循环冗余检验 CRC
在发送端先把数据划分为组,假设每组 k 个比特。现假定待传送的数据为 M。CRC 运算就是在数据 M 的后面添加供差错检验用的 n 位冗余码,构成 (k + n) 位的一个帧发送出去。
n 位冗余码可以使用以下方法得出:用二进制的模 2 运算进行 2n 乘 M 的运算,这相当于在 M 后添加 n 个 0。得到的 (k + n) 位的数除以收发双方事先商定的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R (n 位,比 P 少一位)。
re
假定 M = 101001 (k = 6),除数 P = 1101 (n = 3),首先对被除数 M 进行移位运算得到被除数 M' = M * 23 = 101001000
*注:模 2 除法既不向上位借位,也不比较除数和被除数的相同位数值的大小,余数首位是 1 就商 1,是 0 就商 0。
得到余数 R 为 001,拼接到实际发送的数据 M'' = 101001001,接收端接收到 M'' 后除以相同的除数 P,得到的余数如果为 0,则说明数据无差错。
网络中间设备
数据链路层的中间设备是网桥
,两个以太网通过网桥连接起来后,会成为一个覆盖范围更大的以太网,而原来的每个以太网就可以称为一个网段
。
网桥想外暴露了多个接口,每个接口连接一个以太网,网桥内部还要维护一个转发表
用来转发帧,假设有两个以太网 (A, B, C)
和 (D, E, F)
,分别接在接口 1
和 2
,则对应的转发表为:
地址 | 接口 |
---|---|
A | 1 |
B | 1 |
C | 1 |
D | 2 |
E | 2 |
F | 2 |
当 A -> B,网桥收到 A 要发送给 B 的数据帧,在转发表中查询 B 所在的接口为 1,而发送方 A 所在的接口也为 1,网桥由此知道 A 和 B 同属于一个以太网,不需要自己转发,所以会丢弃该帧。
当 F -> C,网桥接收到后发现 C 的接口为 1,则将该帧在通过接口 1 转发出去。
优点:
- 过滤通信量,增大吞吐量。
- 不同的以太网连接后仍然保持了独立的碰撞域,系统整体的吞吐量为各个以太网之和。
- 扩大了物理范围。
- 可以连接不同的物理层,比如 10Mb/s 和 100Mb/s 的以太网。
缺点:
- 转发帧时不仅需要查询转发表,还要执行退避算法,增加了时延。
- 在 MAC 子层没有流量控制功能,当网络负荷很重时,网桥中缓存可能会溢出导致帧丢失。
- 网桥只适合用户不多的和通信量不太大的以太网,否则可能会因为传播过多的广播信息而导致网络拥塞,这就是所谓的广播风暴。
透明网桥
透明网桥是指以太网上的站点并不知道所发送的帧要经过哪些网桥,以太网上的站点都看不见以太网上的网桥。透明网桥还是一种即插即用的设备,无需人工配置转发表就可以工作。
当网桥刚接入时,转发表是空的,之后会按照自学习算法处理收到的帧,逐步建立起转发表。原理为:若是从某个站点 A 发送的帧从接口 x 进入某网桥,那么从这个接口出发沿相反方向一定可以把一个帧传送到 A。
例如有以下网络结构 (A, B) -- [1] X [2] -- (C, D) -- [1] Y [2] -- (E, F)
,X
和 Y
表示透明网桥:
A -> B
时,网桥 X
接收到转发帧后发现自身的转发表中没有 A
对应的接口记录,于是新增一条记录,并将该帧通过除去 A
对应的接口 1
之外的接口转发出去,网桥 X
的转发表变为:
地址 | 接口 |
---|---|
A | 1 |
网桥 Y
接收到后同样会在自身转发表中新增一条记录,然后通过接口 2
转发出去,网桥 Y
的转发表变为:
地址 | 接口 |
---|---|
A | 1 |
F -> C
时,Y
的转发表中会新增一条 F:2
的记录,然后通过接口 1
转发出去,Y
的转发表变为:
地址 | 接口 |
---|---|
A | 1 |
F | 2 |
X
接收到以后会在转发表中新增一条 F:2
的记录,然后通过接口 1
转发出去,X
的转发表变为:
地址 | 接口 |
---|---|
A | 1 |
F | 2 |
B -> A
时,X
发现转发表中无 B
的记录,于是新增 B:1
,然后发现转发表中有 A
的记录,并且与 B
属于统一接口,便知道无需自己转发,X
的转发表变为:
地址 | 接口 |
---|---|
A | 1 |
F | 2 |
B | 1 |
实际上,网桥除了会记录地址和接口以外,还会记录帧进入该网桥的时间。由于网络拓扑结构经常会发生变化,网桥会周期性扫描转发表,将一段时间以前的记录删除,使得转发表总能反应最新的网络拓扑状态。
透明网桥还使用了一个生成树算法,即互联在一起的网桥在彼此通信后,就能找出原来的网络拓扑的一个子集,在这个子集中,整个连通的网络中不存在环路,即在任何两个站之间只有一条路径。该算法即为最小生成树算法,常用的有普利姆 (Prim) 和克鲁斯卡尔 (Kruskal) 算法。
源路由网桥
透明网桥最大的优点就是即插即用,但是对网络资源的利用还不充分。于是另外一种有发送帧的源站负责路由选择的网桥诞生了,这就是源路由网桥。
源路由网桥是在发送帧时,把详细的路由信息放在帧的首部中。为了发现合适的路由,源站以广播的形式向欲通信的目的站发送一个发现帧作为探测用。发现帧将在整个扩展的以太网中沿着所有可能的路由传送。在传送过程中,每个发现帧都记录所经过的路由、当这些帧发现达到目的站时,就沿着各自的路由返回源站。源站得知这些路由后, 从所有可能的路由中选择出一个最佳路由。以后,凡是从这个源站想该目的站发送的帧的首部,都必须携带源站所确定的这一路由信息。
发现帧还可以帮助源站确定整个网络可以通过的帧的最大长度。
源路由网桥对主机是不透明的,主机必须知道网桥的标识以及连接到哪一个网断上。使用源路由网桥可以利用最佳路由。若在两个以太网之间使用并联的源路由网桥,则可使通信量较平均的分配给每一个网桥。使用透明网桥则只能使用生成树,而使用生成树一般并不能保证所使用的路由是最佳的,也不能在不同的链路中进行负载均衡。
多接口网桥——以太网交换机
交换机的每个接口都直接与一个单个主机或另一个集线器相连(普通交换机则是和一个网段相连),并且一般都工作在全双工模式下。交换机可以通过连通多对接口,使每一对相互通信的主机都能像独占传输媒体一样,无碰撞的传输数据。和透明网桥类似,交换机也是一种即插即用的设备,转发表也是通过自学习建立的。当两个站通信完成后就断开连接。