更多优质内容
请关注公众号

计算机网络基础(二)数据链路层——封装成帧、透明传输和差错检测-张柏沛IT博客

正文内容

计算机网络基础(二)数据链路层——封装成帧、透明传输和差错检测

栏目:其他内容 系列:计算机网络系列谢希仁 发布时间:2022-02-15 03:15 浏览量:2121

数据链路层的功能是将网络层传下来的数据报组装为帧,并负责将帧从一个链路节点传递给另一个链路节点(即路由器)。

 

- 三个基本问题

数据链路层要解决3个基本问题:

封装成帧、透明传输和差错检测。

 

封装成帧

封装成帧指对网络层数据报的前后添加首部和尾部构成一个帧(部分类型的帧只有帧首没有帧尾,如MAC帧),首部尾部作用是进行帧定界,有了首部和尾部网卡才能从一长串01电信号中确认帧的界限。

帧首部和帧尾部本质是2个控制字符,控制字符SOH(start of header)放在一帧的最前面表示帧的首部开始(第一个字符),控制字符EOT(end of transmission)表示帧的结束(最后一个字符)。

不同类型的帧,其SOH和EOT是不同的,例如PPP协议帧,其帧首部的第一个字符是0x7E(0111 1110),而尾部字符也是0x7E。MAC帧的首部第一个字符是 1010 1011

 

 

 

透明传输

透明是指一个实际存在的事物看起来好像不存在一样。透明传输在这里是指如果帧的数据部分有SOH或者EOT字符的二进制(数据部分尤其是图片视频等,是什么二进制串都可能出现的),接收方也不会把数据部分的SOH和EOT错认为是帧的边界,导致数据丢失

 

为了解决这个问题,实现透明传输,我们可以使用字节填充解决:

字节填充是指发送端的数据链路层在数据中发现SOH或EOT时,在它前面插入一个转义字符ESC,如果转义字符ESC也出现在数据中,就在ESC前面再插入一个ESC。

字节填充只是用来实现透明传输的其中一种方法,其实不同的协议会有不同的解决方法,例如PPP协议,它的首尾控制字符都是 0x7E(01111110)。一方面PPP协议在异步传输(逐个字符的传送)会使用字节填充的方法,在同步传送(一连串的比特连续传送)时,PPP协议会使用零比特填充,具体做法是对于帧数据部分,只要发现有5个连续的1就在5个1后面填入0,这么一来就可以保证数据部分不存在 01111110 这个控制字符,在接收端则反操作即可还原原来的比特。

 

- 差错检验

在传输过程中可能会出现比特差错(噪音干扰、电压不稳定等原因),即1可能变成0,0可能变成1。

传输错误的比特占所传输比特总数的比率称为 误码率 BER。误码率和信噪比有很大的关系。

差错检测的算法常使用CRC循环冗余检验,其原理如下:

在发送端,假定待传输的数据是k个比特。

假设待传输的一组数据 M = 101001 (k = 6),我们要在M的后面再添加供差错检验用的n位冗余码(FCS)一起发送。

n位的冗余码FCS的计算如下:

进行 2^n 乘 M的运算,这相当于在M后面加n个0,得到一个 k+n 为的数X,后面的这n位就是待会儿要被FCS冗余码填充的n位。

用X除以(使用模2除法)一个事先定好的长为 n+1 位的除数 P,得到商和余数分别是 Q 和 R, R长为n位。R就是冗余码FCS。

那么原始数据加冗余码就是 M + R,M + R会放在帧首和帧尾之间一起传输

接收端会以帧为单位进行CRC检验:具体做法是把收到的帧的 M + R 部分使用模2除法除以相同的P,检验得到的余数R2是否为0(我们知道 M除以P的余数是R,那么 (M+R)除以P的余数肯定就是0)。如果R2大于0,说明出现了比特差错(R2为0的话,不一定就没有比特差错,不过这个概率会非常小,只要P够大,这个概率就会小到可以忽略不计)。

如果检测到出现比特差错,接收方就会丢弃这个帧。

 

使用CRC循环冗余检测的开销是每个帧都要多传输n位比特,n多大取决于P多大。

在数据链路层,发送端生成FCS和接收端进行CRC检验都是通过硬件完成的,因此处理很快,不会延误数据的传输。

另外,链路层只保证无比特差错(帧内比特从0变成1或者从1变成0),但不保证无传输差错,对于帧丢失、帧重复和帧失序的传输差错情况会交给传输层来解决。链路层并不提供可靠传输(准确的说,是TCP/IP体系的链路层不提供可靠传输,而OSI体系(7层模型)的链路层提供可靠传输)。




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > 计算机网络基础(二)数据链路层——封装成帧、透明传输和差错检测

热门推荐
推荐新闻