在传统以太网中,为什么要有最小帧长度和最大帧长度的限制?
以太网(IEEE 802.3)帧格式:
1、前导码:7字节0x55,一串1、0间隔,用于信号同步
2、帧起始定界符:1字节0xD5(10101011),表示一帧开始
3、DA(目的MAC):6字节
4、SA(源MAC):6字节
5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)
6、数据:46~1500字节
7、帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。 以CSMA/CD作为MAC算法的一类LAN称为以太网。CSMA/CD冲突避免的方法:先听后发、边听边发、随机延迟后重发。一旦发生冲突,必须让每台主机都能检测到。关于最小发送间隙和最小帧长的规定也是为了避免冲突。
考虑如下的情况,主机发送的帧很小,而两台冲突主机相距很远。在主机A发送的帧传输到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到冲突,于是发送冲突信号。假如在B的冲突信号传输到A之前,A的帧已经发送完毕,那么A将检测不到冲突而误认为已发送成功。由于信号传播是有时延的,因此检测冲突也需要一定的时间。这也是为什么必须有个最小帧长的限制。
按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,因此也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512位=64字节,这就是以太网帧最小64字节的原因。
512位时是主机捕获信道的时间。如果某主机发送一个帧的64字节仍无冲突,以后也就不会再发生冲突了,称此主机捕获了信道。
由于信道是所有主机共享的,如果数据帧太长就会出现有的主机长时间不能发送数据,而且有的发送数据可能超出接收端的缓冲区大小,造成缓冲溢出。为避免单一主机占用信道时间过长,规定了以太网帧的最大帧长为1500。
100Mbps以太网的时隙仍为512位时,以太网规定一帧的最小发送时间必须为5.12μs。 1000Mbps以太网的时隙增至512字节,即4096位时,4.096μs。
对于1000Mb/s的吉比特以太网,MAC层有两种选择,要么保留CSMA/CD,要么不用它。若保留CSMA/CD协议,必须面临碰撞检测问题,这就要再一次减小网络的最大有效传输距离到25米。当然您可以不缩短网络的距离,而是增加一个帧的程度,就如我们开始分析100Mb/s以太网那样,让一个帧持续足够长的时间。但因为上层来的数据没有这么多,所以就需要在MAC层进行一些无用数据的填充来满足这个要求。
最后,我们推导出以下比例关系:
最小帧长/传输速率 正比于 网络最大传输距离/光速
一个网络的最大传输距离也称为冲突域,传输一个最小帧所用的时间(最小帧长/传输速率)正比于1位信息穿越冲突域的时间。
以太网的最大帧长有1518,1522,1536。那么这几个值是怎么来的呢?
下面是最初802.3定义的以太网帧结构:
Preamble (7-bytes) --前导位
Start Frame Delimiter (1-byte) --定界符
Dest. MAC Address (6-bytes) --目的地址
Source MAC Address (6-bytes) --源地址
Length / Type (2-bytes) --长度或帧类型
MAC Client Data --数据,n最大为1500,即MTU
(0-n bytes) Pad --填充字段,p最大为46
(0-p bytes) Frame Check Sequence (4-bytes) --帧校验码
其实Ethernet V2为实际的标准了。所以我们最常见到的是,源地址后是类型而非长度。
在1998年提出的802.3ac里,加入了对vlan的支持。也就是在有vlan的情况下在源地址后多加入4个字节,所以就有了1522这个帧长度了。
Preamble (7-bytes) --前导位
Start Frame Delimiter (1-byte) --定界符
Dest. MAC Address (6-bytes) --目的地址
Source MAC Address (6-bytes) --源地址
Length/Type = 802.1Q Tag Type (2-byte) --表明是VLAN,这个为8100
Tag Control Information (2-bytes) --3-bits User Priority Field;1-bit Canonical Format Indicator (CFI);12-bits VLAN Identifier (VID)
Length / Type (2-bytes) --长度或帧类型
MAC Client Data --数据,n最大为1500,即MTU
(0-n bytes) Pad --填充字段,p最大为46
(0-p bytes) Frame Check Sequence (4-bytes) --帧校验码
最后要提的就是1536这个长度了。我们知道802.3中规定,如果Length / Type的值大于0×600则表示是类型,而这个值就是1536。
1998年提出的802.3z中的应用。802.3中提出了一个Extension字段放在了最末尾。它主要作用是在短封包(如64)传输时,由于1000M速度的加快,导致传输时间的减少,破坏了原有冲突检测的机制,缩短了有效传输矩离,所以要增加一些字节,使长度达到512。当然,这个只用在半双工时了。
第2 / 3页
其实在802.3中没有规定要扩展的值的大小的,所以最大可以扩展到1536。
还有一个就是802.1ad。也就是所谓的“Q-in-Q”,就是多重的vlan了,主要为网络运营商用来管理的,实现用户的vlan和运营商的vlan相隔离。这个也会加大现有封包的长度,会增加4个字节。 以太网最大帧长 最小帧长 - Sacrifice - BabyUnion
还有一个Jumbo frame。这东西不是802.3的标准,而一些厂商提出来的,为了提高1000M时的传输效率。由于是非标的,所以各家支持的大小也不尽相同。一般来说,现在一般可以支持到9k。 在802.3z中还提出一个Frame Bursting。这个东西可以提高短包的传输效率。在1000M以太网下,limit”。帧和帧之间以extension bits来填充gap,以表示线路处于占用状态。burst mode唯一特殊的是,第一个帧要加一个”extension field”。
新的改变可以参见802.3as-2006。
使用burst mode,一端可以连续发包,直到达到了65,536 bit times (8192 byte times)的”burst