计算机网络——数据链路层(一)
一、数据链路层概述
1.1 功能
- 为网络层提供服务,良好的服务接口。
- 保证数据传输的有效、可靠。
- 处理传输错误:差错检测和控制。
- 流量控制:基于速率、基于反馈。
数据链路层处理的协议数据单元PDU是数据帧
帧是由帧头帧尾和载荷构成。
帧头里面主要包含有:定位需要的地址、物理地址信息。
帧尾主要是做帧的效验 。
1.2 成帧
数据链路层数据链路层使用物理层提供的服务,物理层处理的是位流,数据电路层处理的是帧。
将原始的位流分散到离散的帧中叫成帧,成帧的方法有:
- 字符统计法
- 带字节/字符填充的标志字节法
- 比特填充的比特标志法
- 物理层彪马违例法
1.3 字符统计法
发送方:在每个帧头部中的第一个字段,标识帧的长度,总共有多少字符数。
接收方:通过第一个字段,就知道帧有几个字符,在哪里结束帧。
优点:简单
缺点:一旦出错,无法恢复。
现在已经很少使用
1.4 字节填充的标志字节法
这种方法考虑了错误之后重新同步的问题,让每一帧都用一些特殊的字节
作为开始和结束。
缺点:
- 容易造成帧界的混淆——增加转义字符
- 依赖于八位字符
使用这种方法会出现一个问题:传输的数据中含有标记,会和帧界混淆。
针对这种情况需要增加转义字符
如上图是几种常见的增加转义字符的情况。
比如第一行,当头部出现FLAG时,在其前面加上ESC标记。
1.5 比特填充的标志比特法
- 这是一种面向二进制的帧格式,把所有需传输的数据以比特位一字排开,并以特殊的位模式01111110作为帧标志,即一个帧的的开始。
- 当帧中出现一个与帧标志相同的位串01111110,则在5个1后插入一个0,即变成01111101,接收方自动删除第5个1后的0。这称为
位填充法(零比特填充法),也称为透明传输
- 如果由于干扰,一个帧没内有正确接收,则可扫描接收串,一旦扫描到01111110,即新的一帧从此开始。
1.6 物理层编码违例法
在曼切斯塔编码中,连续的高电平或连续的低电平可用作帧边界
- 采用冗余编码技术,如曼切斯特编码,即两个脉冲宽来表示一个二进制位。
- 数据0:低-高电平对
- 数据1:高-低电平对
- 高高电平对和低低电平对没有使用,可用作帧边界。
二、差错处理概述
任何信道,即使是光纤,也会出错。
处理错误主要有两种手段:
纠错:恢复出真确的来。
检错:仅仅检出错误,不恢复,通常伴随重传。
错误主要有两类错误:
单个错误:分散在各块数据中。
突发错误:集中于一个数据块,整个块都是错误。
2.1 纠错码
一种前向纠错技术:发现错误,从错误中恢复出正确的来。因为其需要太多的冗余位,纠错开销太大,在有线网络中极少使用,主要用于无线网络中。
2.2 检错码
只能发现错误,不能从错误中恢复,但可采用重传。计算机网络中主要采用循环冗余码(CRC)
。
2.3 码字
包含数据位和检验位的n位单元。
2.4 海明距离
两个码字的海明距离:两个码字之间不同位的数目。
2.5 全部码字的海明距离
全部码字任意两个码字之间海明距离的最小值。
2.6 海明距离的意义
如果海明距离为d,则一个码字需要发生d个1位才能变成另外一个码字
2.7 海明距离与检错的关系
海明距离为d+1的编码能检测出d位差错。
因为在距离为d+1的检验码中,只改变d位的值,不可能产生领另一个合法码,如奇偶校验码,海明距离为2,能查出单个错。
例:检错码(奇偶位)
例:偶校验
2.8 海明距离与纠错的关系
海明距离为2d+1的编码,能纠正d位差错。因为此时如果一个码字发生差错,他仍然距离原来的码字距离最近,可以直接恢复为该码。
例:纠错码
海明距离增加,纠错能力也增加。
当一个系统中海绵距离增加的时候,合法码字就少了,即传输效率降低。
三、纠1位错的海明码
3.1 计算冗余位
纠一位错需要的冗余位(emm,这个我没看懂)。
3.2 海明纠错码
3.3 如何决定每个数据位的校验位
3.4 校验位的计算
例如 m = 7
如上图,使用偶校验,计算出n = 11,将要传输的信息码1001000
写进去。
然后根据一个校验集合里的1的个数是偶数的规则,进行填数。
例如1的校验集合是所有的奇数,在这个信息码中对应的是B3 B5 B7 B9 B11,分别是:10100,有2个1,偶数,所以1校验位填上0。
以此类推。
上图清晰的列出了对应数据位填充的校验位。
3.5 海明码纠错过程(接收端)
- 将差错计数器置0,counter = 0
- 当海明码数据到达接收端后,接收端逐个检查各个校验位的奇偶性。
- 如果发现某一校验位和它所检测的集合的奇偶性不正确,就将检验位的编号加到差错计数器中,最终counter=0则无差错,≠0则counter的值便是出错的位。
例
3.6 利用海明码纠正突发错误
- 将连续的k个码字按行排列成矩阵
- 发送数据时,按列发送,每列k位
- 如果一个突发错误长度是k位,则在k个码字中,至多只有一位受到影响,正好可以用海明码纠错恢复。
四、检错码
纠错需要较多的冗余位,信道利用率不高。在局域网中,主要使用的事检错码:奇偶校验码、互联网校验和、循环冗余校验码等等。
4.1 奇偶校验
奇偶位取值等同于队数据进行模2和运算。
4.2 校验和
校验和通常是按照N位码字来进行模2加运算,发放将运算结果附在数据报文末尾,作为校验位。例如:16位的互联网补码校验和。
4.3 循环冗余检错码CRC
4.3.1 原理
- 任何一个k位的帧看成一个k-1的多项式
例如10110001看成 x^6 + x^4 + x^3 + x^0 - 生成多项式 G(x) G(x) 为 r 阶
- 设m位帧的多项式M(x) m>r 即M(x) > G(x)
- 如果 x^r M(x) / G(x) = Q(x) + R(x) 其中Q(x) 为商 R(x)为余数,则(x^r M(x) - R(x)) / G(x) = Q(x) 即 余数为 0
(我看的不是很明白。)
4.3.2 仿真例子
4.3.3 模2加运算
实际上就是异或运算,相同得0,相异得1
4.3.4 举例
那个原理实在是太抽象了,看了这个例子好像又懂了。
设定G(x)
用得到的T(x) 1001111010110110000
去除G(x) 10011
得到余数1110
,然后用T(x)去减余数1110
,得到CRC码11010110111110
对没错就是这样
接收方的检查是这样的
如果整错那么就是正确的。fine
4.3.5 生成多项式国际标准
这个就是那个G(x)
4.3.6 CRC小结
小结一下