以太网帧最小帧长与最大帧长

杀马特。学长 韩版系。学妹 提交于 2020-01-17 20:49:19

 

讨论以太网的帧长,就不得不先提一下以太网的大名鼎鼎的CSMA/CD协议。

1.1  CSMA/CD协议

CSMA/CD是英文carrier sense multiple access/collision detected 的缩写,可把它翻成“载波监听多路访问/冲突检测”,或“带有冲突检测的载波侦听多路访问”。

所谓载波监听(carrier sense),意思就是以太网络上的各个工作站在发送数据前,都要监听总线上有没有数据正在传输。若有数据传输 (称总线为忙),则不发送数据,需要等待;若无数据传输(称总线为空),可以立即发送准备好的数据。

所谓多路访问(multiple access),意思就是以太网络上的各个工作站在发送数据时,共同使用一条总线,且发送数据是广播式的。

所谓冲突(collision),意思就是,若以太网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的冲突;多个工作站都同时发送数据,在总线上就会产生信号的冲突,哪个工作站接收到的数据都辨别不出真正的信息。这种情况称冲突或者碰撞。

为了减少冲突发生的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,检测自己传输过程中有没有其他工作站在发送数据,在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。

详细见CSMA/CD协议介绍。

1.2  以太网探测帧

当多个工作站均想向以太网发送数据时,如果总线处于忙的状态,大家都等待,也不会有何争议;但是如果总线处于空的状态,而且工作站是依次监听到空状态,那么各个工作站就会陆续向总线发送数据,A工作站发送的数据还未传递到另一个要发送数据的B工作站,那么B工作站仍然认为总线为空的状态,那么B工作站也向总线注入数据;如果还有更多工作站向总线注入数据,原理一样,只是更加复杂而已。

A工作站传递的数据与B工作站传递的数据就会在总线的某处发送冲突,导致此次数据发送失败。那有什么办法可以提前判断,使得工作站不必每次都源源不断的向总线注入数据,其后又检测到冲突,而重新等待,如此反复,既浪费了宝贵的工作站资源与总线资源,又使得数据迟迟不能发送出去。

先了解下碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。以太网实现原理是,假设某个工作站检测到冲突发生,那就发送碰撞信号,使冲突更加明显,使得所有工作站均能检测到总线发生了冲突。

我们来看一下,假设A检测到总线是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到总线是空闲的,开始发数据包,这时就会发生冲突。假设B 首先发现发生碰撞,开始发送碰撞信号。

这个碰撞信号会返回到 A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完, 则A不会重传这个数据包。

以太网为什么要设计这样的重传机制。首先,以太网不想采用连接机制,这会降低传输效率,但他又想保证一定的传输效率。因为以太网的重传是微秒级,而传输层的重传,如TCP的重传达到毫秒级,应用层的重传更达到秒级。我们可以看到越底层的重传,速度越快,所以对于链路层发生的错误,以太网必须有重传机制。

要保证以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间 必须控制在一定范围之内。

解决方法就是,每个想要发送数据的工作站,检测到总线为空状态,在发送数据之前,先发送一个探测帧,探测帧的发送就圆满的解决了上面的问题。而探测帧的长度既要达到最快速的传递到目的地,又要确保探测帧的传递时间足够使得其他工作站能够监听到。这个探测帧的长度就是以太网规定的最小帧长,就是一个最小最长帧。

由于以太网传递的帧,归根结底还是由比特流组成。上面提到的传输速率,其实就是工作站的发送速率,传输一个帧还是一个个的比特发送出去。即,工作站发送一个帧的第一个比特到达目的地,而此帧的最后一个比特正好发送出去。

2.1  碰撞槽时间

C代表光速,也就是20.3cm/ns(每纳秒20.3厘米), C是30W。电子在铜介质(普通铜)中的移动速度是21W/s  。

假设公共总线媒体长度为S,帧在媒体上的传播速度为0.7C(光速),网络的传输率为R(bps),帧长为L(bps),tPHY为某站的物理层时延; 

则有:

碰撞槽时间=2S/0.7C+2tPHY

因为Lmin/R=碰撞槽时间 

所以:Lmin =(2S/0.7C+2tPHY )×R 

Lmin 称为最小帧长度。

碰撞槽时间在以太网中是一个极为重要的参数,有如下特点: 

(1)它是检测一次碰撞所需的最长时间。

(2)要求帧长度有个下限。(即最短帧长)

(3)产生碰撞,就会出现帧碎片。

(4)如发生碰撞,要等待一定的时间。t=rT。(T为碰撞槽时间)

假设:A、B两地之间通过一个单向传送带传递物品,传送带的传输速度是C(C代表光速),也就是20.3cm/ns(每纳秒20.3厘米),A点有个人叫Marcia,她要把一车荔枝一串一串的发送给B点的那个人Allen,现在Marcia需要抉择的是:我在传送荔枝给Allen的时候,如果Allen同时也有荔枝传给我,这个时候就会产生冲突,而冲突会把传送中的荔枝撞碎,破碎的荔枝渣会通过传送带反送给我,我很想知道是哪一串荔枝被撞碎了,如何实现?一个办法就是:在我收到荔枝碎片的时候,我仍旧在传着这串荔枝!比如有很多串荔枝,第1串,第2串等,当我发送第3串荔枝的过程中,收了荔枝碎片,那肯定是第3串里先发出的荔枝出现了碰撞,而不是第2串或第1串中的荔枝发生碰撞。

为了实现这一点,假如Marcia到Allen点的距离是2500米(250000厘米),传送带上的荔枝每纳秒20.3厘米,那么一串荔枝中的第一个荔枝到达Allen点的用时就是250000除以20.3=12500纳秒,在加上碎片返回的时间是12500纳秒,等于25000纳秒,这个时间就是一串荔枝在传送带上必须持续的时间。

Marcia高兴的时候,往传送带上放荔枝的时候快,不高兴的时候就慢。高兴的时候每秒可以往传送带上放100Mbit个荔枝,换算一下,也就是说放一个荔枝用10纳秒。不高兴的时候每秒钟只能往传送带上放10Mbit个,也就是说放一个荔枝用100纳秒。

因为一串荔枝必须持续的时间25000纳秒,那么对于不高兴的时候,25000除以100=250个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个10Mbit/s的以太网,最小帧长应该是250bit。但为了确保Marcia在放荔枝的过程中不会被扎到手,放送荔枝间会有一定的延时,所以最小帧长被定义为512bit(64字节)。

因为一串荔枝必须持续的时间25000纳秒,对于高兴的时候,25000除以10=2500个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个100Mbit/s的以太网,最小帧长应该是2500bit。但一个2500bit的帧又太大了,上层来的数据包不可能这么大。所以我们只能缩短A点到B点的距离为250米,一个荔枝在传送带上往返的时间也变成了2500纳秒。这时用2500除以10=250个荔枝,这个结果就是一串荔枝的数量。所以,理论上一个100Mbit/s的以太网,最小帧长应该是250bit,网络最大有效距离是250米。但为了确保Marcia在放荔枝的过程中不会被扎到手,放送荔枝间会有一定的延时,所以帧长被定义为512bit(64字节)。

由此可见,MAC层发送的速度越快,以太网的最大有效距离就越短。但对于1000Mb/s的吉比特以太网,MAC层有两种选择,要么保留CSMA/CD,要么不用它。若保留CSMA/CD协议,必须面临碰撞检测问题,这就要再一次减小网络的最大有效传输距离到25米。当然您可以不缩短网络的距离,而是增加一个帧的程度,就如我们开始分析100Mb/s以太网那样,让一个帧持续足够长的时间。但因为上层来的数据没有这么多,所以就需要在MAC层进行一些无用数据的填充来满足这个要求。

2.2  最优冲突时间

下面我们来估计在最坏情况下,检测到冲突所需的时间 

(1)A和B是网上相距最远的两个主机,设信号在A和B之间传播时延为τ,假定A在t时刻开始发送一帧,则这个帧在t+τ时刻到达B,若B在t+τ-ε时刻开始发送一帧,则B在t+τ时就会检测到冲突,并发出阻塞信号。

(2)阻塞信号将在t+2τ时到达A。所以A必须在t+2τ时仍在发送才可以检测到冲突,所以一帧的发送时间必须大于2τ。 

(3)按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米,最多经过4个中继器(以太网中使用中继器的5-4-3-2-1原则),因此规定对于10Mbps以太网规定一帧的最小发送时间必须为51.2μs。 

(4)51.2μs也就是512位数据在10Mbps以太网速率下的传播时间,常称为512位时。这个时间定义为以太网时隙。512位时=64字节,因此以太网帧的最小长度为512位时=64字节。

2.3  以太网帧长

802.3-2002标准定了以太网的头结构为DA(6)+SA(6)+Len/Type(2)=14字节。帧校验序列(FCS):4字节,使用CRC计算从目的MAC到数据域这部分内容而得到的校验和。

以太网的帧开销是18字节,是“目的MAC(6)+源MAC(6)+Type(2)+CRC(4)”。以太网最小帧长为64字节,那么IP报文最小为46字节,而局域网规定IP最大传输单元1500字节,实际上加上以太网帧的18字节,就是1518字节。

IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time。(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。

512个位时,也就是64字节的传输时间,如果以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。

这就是为什么以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。

CISCO交换机有一种转发方式叫fragment-free,叫无碎片转发,他就是检查64个字节之内有没有错误,有的话不转发,这样就排除了正常的以太网错误包。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!