本文简述一下数据链路层主要涉及的知识点,只是作为一个整理,暂时不作详解,未提到的知识点后续会再整理发布。
任务及必要性
封装成帧:帧是数据链路层的传送单元:将网络层交付下来的IP数据报(分组)的前后添加首部和尾部,封装成帧。首部和尾部的重要作用是进行帧定界。帧定界是分组交换的必然要求。
透明传输:避免消息字符与帧定界字符(SOH、EOT)相混淆,在数据中出现控制字符前插入ECS转移字符,达到无论什么比特组合的数据都可通过数据链路层
差错检验:为了保证数据传输的可靠性,在传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC
以太网(MAC)帧
以太网帧由前导码、本体构成
前导码:由前同步码与帧开始定界符构成,前同步码用于同步两端时间,实现“位同步”(即比特同步)
本体:由首部,数据和 FCS 三部分组成
- 类型:存储上层协议的编号,告诉以太网数据帧携带的是什么数据。对于ARP来说这两个字节是0x0806,对于IP数据报是0x0800,还有RARP(逆地址解析协议)是0x8035
- FCS 是帧校验序列(使用CRC检验):用于判断帧是否在传输过程中有损坏(比如电子噪声干扰)
循环冗余检验CRC
基本思想:将传输的数据除以“生成多项式”,得到的余数作为校验数据附加到原数据后面。
举例说明:
- 假定待传输的数据M = 101001(k = 6),除数p = 1101(n=3,为什么=3后面讲)
- 进行模2运算,即(2^n)乘M的运算,相当于在M后面添加n个0,即M后面添加3个0
- 现在M = 101001000(k+n = 9)位的数除以除数p(n = 3)位,得到商是Q(不关心),余数R =001(n位)
- R就是冗余码FCS,将R添加到原数据后即可
- 接受端对收到的数据再次进行CRC检验,方法就是把收到的每一帧都除以相同的除数,然后检查得到的余数。
- 余数为0,则正确,接收这个帧;余数不为0,帧有问题,丢弃帧
为什么除数取1101?
在CRC算法中,这个被除数也叫做“生成多项式”。生成多项式的选取是个很有难度的问题,如果选的不好,那么检出错误的概率就会低很多。所以对于使用者来说,只要把现成的成果拿来用就行了。
1 | CRC8=X8+X5+X4+X0 |
为什么n=3?
n在CRC里面称为“位宽”,并且不是多项式对应的二进制数的位数,而是多项式位数减1。比如上述例子中的多项式是1101,那么n=其位数-1=4-1=3,按照CRC算法的要求,计算前要在原始数据后填上n个0,也就是3个0
MTU最大传输单元
数据链路层允许的IP数据报的长度(一般最小64字节,最大1500字节),每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
- 数据链路层的最小MTU 为 64 字节:因为需要做碰撞检测
碰撞检测:以太网发送数据时,如果在争用期内没有发生碰撞,那么后续发送的数据就一定不会发生冲突,如果发生碰撞,一定是在发送的前64字节之内,由于检测到冲突后会中止发送,所以发送的数据一定小于64字节,因此凡长度小于64字节的帧都是由于冲突而异常终止的无效帧,收到后立即丢弃。
为什么争用期(冲突窗口)为51.2us呢?
在极限条件下,一个局域网中两个站点(4个中继器连接)的最大距离为2500m,往返5000m,电缆的传播时延为5us/km,即如遇冲突,端到端往返时延为25us。然而这是理想的时延,考虑到中继器的额外时延,最坏情况下取估计时延为45us,再加上强化冲突需发送48bit,接受方要接受到48bit后才确认冲突,即在增加4.8us,共49.8us,所以通常以太网取51.2us为争用期的时间长度
参考博文
为什么是64字节呢
因为争用期是51.2us,对于 10Mbps 的 以太网来说,其这个时间等于发送 64 字节,即 512(10*51.2) 位的时间,所以可以在64字节之内检测到冲突。
传输时延是指一个站点从开始发送数据帧到数据帧发送完毕所需要的全部时间,传播时延是指发送端开始发送数据到接收端收到数据所需要的全部时间。
数据链路层的最大 MTU 为 1500 字节,即数据字段的最大长度
较小长度的帧传输效率又不高,较大的帧占用共享链路时间过长,影响其它主机的通信,然后通过多次试验选择了一个折衷的长度:1518字节,对应的MTU就是1500字节。
IEEE 802.3又叫做具有CSMA/CD(载波监听多路访问/冲突检测)的网络。CSMA/CD是IEEE802.3采用的媒体接入控制技术,或称为介质访问控制技术。
载波监听:发送前或发送中检测信道是否有其他站在发送数据
多路访问:总线型网络,计算机以多点接入的方式连接在一条总线上
冲突检测:发送中载波监听就是冲突检测