此文仅用于记录学习过程中,链路层的一些特殊的数据量,并不对其中涉及到的名词做更具体地展开。
最短帧长64字节
对于总线型以太网来说,需要使用CSMA/CD协议来避免出现总线通信冲突,即多个设备同时向总线上发送数据,这样最终混杂在一起的信号无法还原出任何信息。而CSMA/CD协议能够检测到出现总线冲突的原理是:首先如果检测到总线上有信号在传输则自身等待该信号传输完毕再传输自己的数据。当自己开始发送数据后,适配器一边发送数据一边检测信道上的信号电压的变化情况,当多个设备同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(相互叠加)。当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,即出现总线冲突。
假设现在A尝试通过总线向B发送数据,如下图:
设信号从A传输到B的时间为 $ t $ ,则可知最极端的情况是信号在到达B之前的一瞬间B开始向A发送数据,这种情况下冲突被A检测到需要的时间为 $ 2t $ ,即信号从A到B再从B到A的时间。换句话说,从A开始发送数据开始算起,最多 $ 2t $ 的时间后A就能知道是否出现了冲突。因此我们把端到端往返时间 $ 2t $ 称为争用期,又称为碰撞窗口,这是一个非常重要的参数,因为一个设备在发送数据的时候,只有经过争用期的“考验”,即经过这段时间还没检测到碰撞,才能肯定这次发送不会发生碰撞。这样就可以放心的把这一帧顺利发送完毕。
适配器在争用期内检测到冲突则可以立刻停止发送数据而等一会再继续发送(CSMA/CD协议使用截断二进制指数退避算法来完成这一动作)。但试想这样一种情况,A在检测到冲突之前就发送完了所有数据,所以等到冲突传输到A的时候,A完全不知道自己发送的上一个数据帧出现了冲突,也就不可能对此做出任何反应,这对协议的设计者来说肯定不是一个好消息。
以太网设计时的最大端到端距离大概为2.5km(事实上现实中几乎不会有这么长的端到端距离),则往返距离为5km,而电磁波在 1km 的电缆上的传播时延约为5μs,则5km的传播时延约为25μs,即两个相距2.5km的设备通信的争用期为25μs,再加上一些冗余的计算量后,以太网规定两个通信设备间的最大争用期51.2μs。而10Mbit/s 的以太网上51.2μs最多能发送64字节的数据,也就是说在10Mbit/s的以太网上,不管距离多远(在有效的通信距离内)的两个设备发送数据,只要发送了64比特的数据后还没检测到冲突,则此次通信一定不会发生冲突。所以为了防止出现还没检测到冲突数据就发送完毕了这种情景,以太网规定10Mbit/s的以太网上最短帧长为64字节,所以如果上层要传输的数据没这么长,就必须填充一些无效的比特来凑够最短帧长。
不过现在可是2019年了,100Mbit/s和1000Mbit/s的以太网根本就不是什么新鲜玩意了,根据上面的计算方法可以得到100Mbit/s以太网的最短帧长为640字节,而1000Mbit/s的以太网的最短帧长达到了6400字节!当然另一个办法就是减小以太网的传输有效距离,同样可以满足要求。
最小帧间距 9.6μs
网络设备在接收到一个帧后需要一段短暂的时间来恢复并为接受下一帧做好准备。所以以太网规定了最小帧间距为 9.6μs。
8字节的帧前同步码与帧开始界定符
先来看一下以太网V2的MAC帧格式:
由图中可以看出,在传输媒体上实际传送的要比MAC帧还多8个字节。这是因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位就无法接收,结果使整个的MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传到物理层时还要在帧前插入8字节(由硬件生成),它由两个字段构成。第一个字段是7个字节的前同步码(1和0交替码),它的作用是使接收端的适配器在接收MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步。第二个字段是帧开始界定符,定义为10101011.它的前六位的作用和前同步码一样,最后两个连续的1就是告诉接收端适配器:“MAC帧的信息马上来了,请做好准备”。