数据链路层解决的三个问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Abel_Liujinquan/article/details/89225843

1、封装成帧

封装成帧就是在一段数据的前后分别添加首部、尾部和帧检验序列 ,然后就构成了一个帧。
注:首部和尾部的一个重要作用就是帧定界。

2、透明传输

发送数据帧时,加上转义字符“ESC”,以及接收数据帧时,去掉转义字符,得到真实数据,这就叫做透明传输。

  • 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
  • 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

注意:如果转义字符“ESC”也出现在数据当中,那么应当在转义字符前插入一个转义字符。
在这里插入图片描述

3、差错检测

传输过程中可能会产生比特差错:1可能会变成0,0可能会变成1,为了检查传输是否正确,需要在原始数据后加上一个帧检验序列(FCS)。

循环冗余检验(CRC)是常用的帧检验算法

1)原始数据添加帧检验序列:

假设传输数据为101001,我们在该序列后加几位零,变成101001000,再除以一个四位数(序列后加0个数+1),例如1101。除法最后的余数(001)作为帧检验序列(FCS),所以最后传输序列变成101001001

注意:除法的余数为被除数和除数做不进位加法的结果。
在这里插入图片描述

2)接收端校验数据:

用接收端收到的序列除以同一个除数1101,如果最后余数为0,则传输的数据正确,接收端接收;否则传输的数据出错,接收端会丢弃该数据。
如果接收到101001001,我们做计算101001001/1101(同样用不进位加法),最后余数为零,所以传输数据正确。

3)循环冗余检验的特点:
  • 这种检测方法并不能确定究竟是哪一个或哪几个比特出错。
  • 只要经过严格的挑选,并使用位数足够多的除数P,那么出现检测不到差错的概率就很小。

猜你喜欢

转载自blog.csdn.net/Abel_Liujinquan/article/details/89225843