概述
数据链路层的三个基本问题
目录标题
- 数据链路层的三个基本问题
- 1. 封装成帧
- 2. 透明传输
- 3. 差错检测
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。则计算过程如下:
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。幸运的是,这些都是由硬件完成的,处理速度很快,不会延误数据的传输。
最后
以上就是怡然蛋挞为你收集整理的数据链路层的基本问题的全部内容,希望文章能够帮你解决数据链路层的基本问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复