0 引言
以太网帧长度不能小于64字节这个要求很多人都知道,但是要问为什么,应该有些人就答不上来了,用就是了呗~这样不好,我们要知其然还要知其所以然。
咳咳,不装B。其实在下也是最近把《计算机网络》翻出来看,正好看到了,就拿出来记录一波。
问:到底为什么以太网帧长度不能小于64字节呢?
答:为了避免以太网中信号碰撞。
1 何为碰撞检测?
碰撞检测是CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议的一个要点。这个协议又是啥个东东呢?各位都知道TCP/IP体系结构最下面一层是网络接口层,这一层在OSI七层体系结构中又划分为数据链路层和物理层。这里说的CSMA/CD协议就是以太网在数据链路层使用的协议。
碰撞检测也就是局域网中某个站点(也就是主机)在发送数据时,其适配器(通俗点讲就是网卡)会检测信道上是否有其他站在发送数据,检测到则中止帧的发送。因为多个站点同时发送数据,总线上信号叠加会造成信号失真,不能正常解析。所以我们要避免多个站点同时发送数据的冲突,也即避免发生信号碰撞。
2 何为争用期?
首先,大家记住一个数据,电磁波在1km电缆的传播时延约为5μs。
如下图所示,A向B发送数据, τ后到达B(单程端到端传播时延,记为τ)。若B在A的数据到达之前,发送自己的数据(这时B检测信道是空闲的,因为它没收到任何数据),则必然会与A的数据在信道中发生碰撞。而A在开始发送后多久才能知道发生碰撞了呢?要等到B的数据到达A,而A还未结束发送。
假设一个极端情况,当图中所示的时间差δ(δ为B发送数据时刻与A数据到达B的时刻的时间差)趋向于0,则A检测到发生碰撞的时间2τ-δ = 2τ,当超过这个时间都未检测到碰撞,则A发送出的数据就一定不会产生碰撞了。以太网中端到端的往返时间2τ称为争用期,也叫碰撞时间。只有经过争用期这段时间还未检测到碰撞,才能肯定这次发送不会发生碰撞,这时就可以放心把这一帧发送完毕。
3 争用期为多少?
按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器(这个数据百度得来)。按照之前的电磁波在1km电缆的传播时延约为5μs计算,可以得到最大往返时间为((4*2500)/1000)*5μs = 50μs,但实际以太网争用期确定为51.2μs,不仅考虑到以太网的端到端时延,而且还包括其他的许多因素,如存在的转发器所增加的时延,以及强化碰撞的干扰信号(这个概念本文就不解释了,读者自行查阅)的持续时间。
4 以太网帧最小长度
有了争用期51.2μs和以太网传输速率10Mbps(本文讨论的是传统以太网标准),我们可以得出10Mbps*51.2μs=512bit=64Byte,这个数据长度就是以太网帧最小长度。
各位读者想通了吗?当帧长度小于64Byte时,争用期还没结束,帧就已经发送完毕,即使检测到碰撞也不能中止帧的发送。一个异常帧就这么传输出去,显然不是我们想要的。
当规定帧最小长度为64Byte时,只要小于64Byte的帧就被丢弃,大于等于64Byte又一定能检测到是否发生碰撞(发生碰撞即中止发送,没有结束符的帧也会被丢弃)。
5 结语
以上就是以太网帧长度为什么不能小于64字节的原因了,文中内容基本都是从《计算机网络》摘录的知识,自己整理了一下,如有错误欢迎指正~
原文地址:https://www.cnblogs.com/1million/p/11942836.html