1.3 MiB
数据链路层
基本概念
- 结点:主机、路由器。
- 链路:网络中两个结点之间的物理通道。
- 数据链路:网络中两个结点之间的逻辑通道。
- 帧:链路层的协议数据单元。
数据链路层功能:
- 为网络层提供服务:无确认无连接服务、有确认无连接服务、有确认面向连接服务。
- 链路管理。
- 组帧。
- 流量控制。
- 差错控制。
封装成帧
在一段数据的前后部分添加首部和尾部,构成一个帧。接受端在收到物理层上交的比特流后就可以根据首部和尾部的标记从而识别帧的开始和结束。
透明传输
不管所传数据为什么样的比特组合都能在链路上传输。因此链路层就看不见有什么方案数据传输的东西(控制信息)。
字符计数法
帧首部使用一个计数字段(第一个字节,八位)表明帧内字符数。
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧。
比如3 1 1 和 4 2 2 2,如果前面的帧丢失变成 3 1,那么后面的4就会被补到前面变成 3 1 4导致错误。
字符填充法
帧就是加头加尾分别标记开始结束,而如果数据内某段比特流数据正好与标记字段重复,就会导致误判断的情况。
字符填充法就是在误会的字符前添加转义字符。
零比特填充法
当帧开始符和结束符一样,且帧定界符中含有5个以上连续的1,就可以使用零填充法。
- 在发送端扫描整个信息字段,只要有连续的五个1,就立即在第五个1后加上一个0,无论后面是1还是0。
- 在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描,发现连续五个1时就把后面的0删除。
违规编码法
使用帧中不会用到的编码来定帧的起始和终止。
由于字节计数法的脆弱性与字符填充实现的复杂性与不兼容性,所以基本上使用零比特填充与违规编码法。
差错控制
噪声来源:
- 全局噪声:线路本身电气特征所产生的固有的随机噪声(热噪声);可以通过改善传感器调高信噪比来减少。
- 局部噪声:外界特定短暂的原因所产生的冲击噪声,是产生差错的主要原因;可以通过编码计数来解决。
差错:
- 位错:比特位出错,1变为0,0变为1。
- 帧错:有三种情况,假如发送的是1 2 3:
- 丢失:1 2。
- 重复:1 2 2 3。
- 失序:3 1 2。
差错控制:
- 检错编码:
- 奇偶校验法。
- 循环冗余码(CRC)。
- 纠错编码:海明码。
物理层所说的编码是针对单个比特的调制,为了达成同步。
而数据链路层所说的编码是针对一组比特,通过冗余码的计数实现对一串二进制比特率的检查。
奇偶校验码
首先一串数据长度为n-1,需要在数据第一位加上一位校验码。
奇校验要选校验码1或0使得n位的总数据里的1为奇数,而偶校验要选校验码1或0使得n位的总数据里的1为偶数。
奇偶校验码对于出错的数据仍有对应的奇偶个1则无法检验出是否出错。即出错奇数个位数可以检查出来,偶数个位数不能检查出来,所以其检错能力为50%。
如字符为1100101原数据有4位1,若使用奇校验,则需要首位校验位为1让整个数据有奇数5个1,从而整个数据变为11100101。若接受方收到11000011、11001010这种数据则能校验,因为数据有偶数个1,11010011则无法校验,因为有奇数个1。
CRC循环冗余码
分为三个部分:传输数据、生成多项式、FCS帧检验序列/冗余码。
如简单来说在接受端:
| 传输数据 | 生成多项式 | 冗余码 | ||
|---|---|---|---|---|
| 5 | ÷ | 2 | =2 | 1 |
所以最终发送的数据就是传输数据+冗余码:5+1=6。
在接收端:
| 接受数据 | 生成多项式 | 冗余码 | ||
|---|---|---|---|---|
| 6 | ÷ | 2 | =3 | 0 |
余数为0,判断无错,就接受。
其中正式的计算方法如下,并给出例题:发送数据为1101 0110 11,采用CRC校验,生成多项式为10011,其最终发送数据是?
原数据加0
假设生成多项式G(x)的阶为r,则需要在原数据后面加r个0(多项式有N位,那么阶就是N-1位)。
如题目中生成多项式10011表示为多项式是$x^4+x^1+x^0$,所以阶就是4。
最后数据就是1101 0110 1100 00。
模二除法
在数据加0后使用模二除法除以多项式,余数就是冗余码CRC校验码的比特序列。
模二除法就是异或,同0,异1。
所以就得到了帧检验序列FCS为1110。
所以要发送的数据就是要发送的数据加上帧检验序列:1101 0110 1111 10。
检错过程
把接收到的每一个帧都除以相同的生成多项式,然后检查得到除数R,如果R=0,则接受,否则丢弃。
FCS的生成与接收端CRC检验都是由硬件完成,所以处理很快,因此不会延误数据的传输。
海明码
能发现双比特错,但是只能纠正单比特错。
确定校验码位数r
海明不等式:$2^r\geqslant k+r+1$,其中r为冗余信息位,k位信息位。
假如传输的数据D=1011 01为6位,即信息位k为6,就可以一个个代入得到最小的r为4,所以海明码的校验码为4位,传输数据为6+4=10位。
确定校验码和数据的位置
假设4位校验码分别为$P_1$、$P_2$、$P_3$、$P_4$,数据从左到右为$D_1$、$D_2$……$D_6$。
校验码$P_n$需要插入到原数据之中作为传输数据,且只能插入到$2^n$的位置,即1、2、4……
然后在其他位置按需填入$D_n$:
| 数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 代码 | P_1 |
P_2 |
D_1 |
P_3 |
D_2 |
D_3 |
D_4 |
P_4 |
D_5 |
D_6 |
| 实际值 | 1 | 0 | 1 | 1 | 0 | 1 |
求出校验码的值
需要将数据位置的十进制先用二进制表示。
然后根据二进制中校验码$P_n$位置的1来判断其可以校验哪些位,因为第一步校验位的插入规定,$P_n$的位置使用二进制表示一定只有一个1,那么就要根据这个1所在的位置找到所有同样这个位置是1的位置所在的数据位,就是可以被校验码校验的原数据位。同一位可以被不同的校验码同时校验。
$P_1$是第一位,即0001位,所以1在二进制位置的第四个地方,找到10个位置中所有二进制位置的第四个位为1的数据位,即0011(3):$D_1$;0101(5):$D_2$;0111(7):$D_4$;1001(9):$D_5$。所以$P_1$可以校验这4个数据。
要使其能校验,就要令所有要校验的位异或等于0。
即令$P_1\oplus D_1\oplus D_2\oplus D_4\oplus D_5=0$。从而$P_1\oplus1\oplus0\oplus1\oplus0=0$,根据同0异1得到$P_1=0$。
同理$P_2$的位置用二进制表示是0010,所以它可以校验二进制位置第三位是1的所有数据位,即可以校验$D_1$、$D_3$、$D_4$、$D_6$。
即令$P_2\oplus D_1\oplus D_3\oplus D_4\oplus D_6=0$。从而$P_1\oplus1\oplus1\oplus1\oplus1=0$,根据同0异1得到$P_2=0$。
同理$P_3$的位置用二进制表示是0100,所以它可以校验二进制位置第二位是1的所有数据位,即可以校验$D_2$、$D_3$、$D_4$。
即令$P_3\oplus D_2\oplus D_3\oplus D_4=0$。从而$P_1\oplus0\oplus1\oplus1=0$,根据同0异1得到$P_3=0$。
同理$P_4$的位置用二进制表示是1000,所以它可以校验二进制位置第一位是1的所有数据位,即可以校验$D_5$、$D_6$。
即令$P_4\oplus D_5\oplus D_6=0$。从而$P_4\oplus0\oplus1=0$,根据同0异1得到$P_4=1$。
| 数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 二进制 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 |
| 代码 | P_1 |
P_2 |
D_1 |
P_3 |
D_2 |
D_3 |
D_4 |
P_4 |
D_5 |
D_6 |
| 实际值 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
从而最后海明码就是0010 0111 01。
检错并纠错
已知海明码就是0010 0111 01。假如第五位出错,从而变为0010 1111 01。
令所有要校验的位进行异或运算:
$P_1\oplus D_1\oplus D_2\oplus D_4\oplus D_5=0\oplus1\oplus1\oplus1\oplus0=1$。
$P_2\oplus D_1\oplus D_3\oplus D_4\oplus D_6=0\oplus1\oplus1\oplus1\oplus1=0$。
$P_3\oplus D_2\oplus D_3\oplus D_4=0\oplus1\oplus1\oplus1=1$。
$P_4\oplus D_5\oplus D_6=1\oplus0\oplus1=0$。
从$P_1$进行的运算开始,将所有计算结果组成为1010,这个数字即表示出错的位置,即第五位出错。
流量控制
较高的发送速度和较低的接受能力不匹配时传输会出错。
数据链路层流量控制与传输层的流量控制的区别:
- 数据链路层流量控制是点到点的,而传输层的流量控制是端到端的。
- 数据链路层流量控制是相邻两个结点的,而传输层的流量控制是两个主机的。
- 数据链路层流量控制是收不下就不回复确认(确认控制帧),而传输层的流量控制是接收端发送发送端一个窗口公告。
流量控制协议分为停止等待协议与滑动窗口协议,滑动窗口协议又分为两种后退N帧协议与选择重传协议。其实停止等待协议也是一种特殊的滑动窗口协议。
滑动窗口可以解决流量控制和可靠传输两个部分的功能。
数据链路层协议的滑动窗口在同一次发送与接受中都是固定的。
| 窗口大小 | 停止等待协议 | 后退N帧协议 | 选择重传协议 |
|---|---|---|---|
| 发送 | =1 | >1 | >1 |
| 接受 | =1 | =1 | >1 |
停止等待协议(Stop-and-Wait)
每发送完一个帧就停止发送并等待对方确认,如果收到确认就再发送下一个帧。因为是停止等待,所以只用一位以10来对帧编号就可以了。虽然同样是0帧,但是是不同的帧。
无差错情况
ACK表示确认acknowledge。
有差错情况
- 发送完一个帧后,必须保存其副本,传输完毕才能丢失该副本。
- 数据帧与确认帧必须编号。
信道利用率=数据帧长度/(数据帧长度+往返时延RTT+确认帧长度)。
信道利用率=(单位时间内发送数据的比特数/发送发发送数据传输率)/发送周期。
当确认帧忽略时可以用下面的公式。
例题 如一个信道的数据传输速率为4kb/s,单向传播时延为30ms,若使用停止等待协议的信道最大利用率为80%,则数据帧长度至少为多少?
令数据帧长度为L(kb),利用公式:信道利用率=(单位时间内发送数据的比特数/发送发发送数据传输率)/发送周期。
得到:0.8=\dfrac{\dfrac{L}{4}}{\dfrac{L}{4}+2\times0.03}
最后得到L=960b。
信道吞吐率=信道利用率×发送方的发送速率。
后退N帧协议(GBN)
- 发送窗口:发送方维持一组连续的允许发送的帧的序号。
- 接受窗口:接受方维持一组连续的允许接受的帧的序号。
GBN会一次性将在发送窗口内的n个帧一个个全部发送完,然后再移动受确认的帧的个数个窗口,如果一直收不到确认信息则一直不移动发送窗口并不断依次重传。
假设发送窗口一次一共有N个帧,且帧开始的索引值为0,帧的类型分为:
- 发完被确认的帧h:发送窗口已经发送过的且已经被接收端发送确认消息且被接受的帧个数。此时从0到h-1都是已经发送且被确认的帧,发送窗口的开始索引为h。已经移动发送窗口h次。
- 已经发送但仍等待确认的帧n:在发送窗口中已经被发送但是因为确认信息在路上所以等待确认的,此时h到h+n-1都是已经发送但仍等待确认的帧。
- 还能发送的帧:即在发送窗口中还没有被发送的帧。还能发送的帧个数为N-n个。开始的索引为h+n,结束的索引为h+N-1。
- 还不能发送的帧:在发送窗口后面的不能被发送的帧,开始的索引为h+N。
GBN发送方必须响应的事件:
- 上层调用:上层发送数据,发送方必须检查发送窗口是否已满,未满则产生帧并发送,若已满则先缓存数据,等窗口不满时再发送。
- 收到一个ACK:对n号帧采取累积确认的方式,标明接收方已经收到n号帧和其之前的全部帧。
- 超时事件:如果出现超时,则发送方重传所有已发送但是未被确认的帧。
选择重传协议(SR)
[]