数据链路层的基本问题

数据链路层的三个基本问题

1. 封装成帧

在这里插入图片描述
①数据链路层将IP的数据报的前后分别添加首部和尾部,构成一个帧。但因该层的协议很多,不同协议的帧的首部和尾部信息所有不同。

②帧的首部和尾部有帧开始符和结束符,被称为帧定界符。

③每一种数据链路层协议都规定了所能传送帧的数据部分的长度上限——最大传输单元(MTU),以太网的MTU为1500个字节(指的是数据部分长度。注意,MTU不是越大越好,因为MTU越大意味着单个数据包,在线路质量较差的网络环境中,数据包中 bit位发生错误的概率也越大,丢包率会越高。同时MTU越大,传送一个数据包时延也越大,会影响其他计算机的通信从而造成用户体验差。因此,1500字节是一个折衷的结果)

2. 透明传输

①帧定界符:可以选用ASCII码表中的SOH(0x01)作为帧开始定界符,EOT(0x04)为帧结束定界符。

②如果数据部分出现“EOT”或“SOH”时要进行字节填充。(具体方法:发送端的数据链路层在数据中出现控制字符“EOT”、“SOH”以及“ESC”,则在前面插入一个转义字符“ESC”的编码。接收端的数据链路层在收到删除这个插入的转义字符。这样用字节填充法解决透明传输的问题)。

在这里插入图片描述

3. 差错检测

在这里插入图片描述
①现实的通信链路都不会是理想的,在传输过程中可能会产生差错。为了保证数据传输的可靠性,必须采用各种差错检验技术(如循环冗余检验,CRC)。

②要让接收端能够判断帧在传输过程中是否有差,需要在帧中包含用于检测错误的信息,这部分信息称为“帧校验序列(FCS)”

③以CRC技术为例计算FCS。假设要检测的数据为M=101001(注意,不仅包含帧的数据部分,还包含了数据链路层的首部),要想得到n位FCS。则计算过程如下:

扫描二维码关注公众号,回复: 9985829 查看本文章

A.要得到n位的FCS,则必须先在M后面添加n位(这里假设n为3)的0,得到被除数101001 000。再除以收发双方事先商定好的n+1位除数P(设为1101),得到商Q,余数R(n位,比除数少一位),这个R(001)就是要计算的FCS。

B.接收方收到后,会使用M和FCS合成一个二进制数(即101001001),再除以P(1101),如果余数为0,表示该帧没有差错。否则表示传输有差错,就会丢弃从而出现丢包现象(这个得由传输层的TCP协议通过丢包重传来实现可靠传输)

在这里插入图片描述

④帧检验序列FCS包含了帧的数据部分(来自网络层)和数据链路层的首部。这意味着,如果通信经过多条链路时,IP数据报的源和目标地址会被修改或者经过路由器时网络层首部的TTL(生存时间减1),这些会造成IP数据报的变化。而当通信由一条链路到下一条链路时由于协议不同,会造成数据链路层首部格式不同,帧开始和结束符也不同,这都需要将帧进行重新封装,重新计算FCS。幸运的是,这些都是由硬件完成的,处理速度很快,不会延误数据的传输。

发布了106 篇原创文章 · 获赞 269 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_32642107/article/details/104678885