为什么以太网数据帧最小位64字节
以太网是无连接的,不可靠的服务,采用尽力传输的机制。以太网CSMA/CD我就不多讲了,我相信大家都了解这个原理。
以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据包,但如果他发出的数据包发生错误,他会进行重传。以太网的错误主要是发生碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰撞,碰撞对于以太网来说是正常的。
我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完,则A不会重传这个数据包。
我们先看一下,以太网为什么要设计这样的重传机制。首先,以太网不想采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级,我们可以看到越底层的重传,速度越快,所以对于以太网错误,以太网必须有重传机制。
要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。
512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。
这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。
总结:最小数据帧的设计原因和以太网电缆长度有关,为的是让两个相距最远的站点能够感知到双方的数据发生了碰撞;最远两端数据的往返时间就是争用期,以太网的争用期是51.2微妙,正好发送64byte数据。
注:为什么以太网的争用期是51.2us?
在极限条件下,一个局域网中两个收发器间(允许接4个中继器)的最大距离为2500m,往返5000m,同轴电缆的时延特性为5us/km,即如遇冲突,端到端往返时延为25us。然而这是理想的时延,考虑到中继器的额外时延,最坏情况下取估计时延为45us,再加上强化冲突需发送48bit,接受方要接受到48bit后才确认冲突,即在增加4.8us,共49.8us,所以通常以太网取51.2us为争用期的时间长度(传输512bit,即64字节时间),即桢的长度至少为64字节。
补充资料
以太网的协议是包含了物理层和数据链路层协议的。进一步,数据链路层被细分为两层,MAC(介质访问控制) 和 LLC(逻辑链路控制)。
LLC 本身的作用是胶合层,主要是做复用。以太网的 MAC 层中没有流控,ARQ 和纠错码功能的。也就是说,问题提的功能,以太网通通没有。
这样设计合理的关键前提是 Wired,以及 LAN,这样的物理环境决定了误码率非常低。单跳传输很少出错,如果出错,以太网会直接把包吞掉,由上层自己探测丢包和重传。
当然,上层重传的开销是远大于链路层重传的。例如,让 TCP 做重传,低效的地方在于,一是端到端的重传明显消耗更多的网络容量,因为会走很多跳;二是 TCP 检测的时机不如链路层及时,导致重传的触发往往是滞后的,影响了传输性能。
没有流控,ARQ 和纠错码的以太网协议非常简单,这样能非常容易和高效地实现以太网硬件,大幅降低成本。也正是因为便宜够用,以太网才会如此流行。
如果把目光移到 WAN 和无线网络上,数据链路层就复杂得多。这个时候,长距离通信、无线信道都会导致误码率蹭蹭上升,如果数据链路层不做可靠传输,靠上层太过低效。例如 802.11 就有流控。如果是 3G、4G 这样的移动通信,会更复杂。
参考链接
- https://www.zhihu.com/question/376620338/answer/1055321769
- http://blog.sina.com.cn/s/blog_564fc50a0100lypt.html