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

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

一、CSMA/CD协议

CSMA/CD 是英文 Carrier Sense Multiple Access / Collision Detected 的缩写,可把它翻成“载波监听多路访问 / 冲突检测”,或“带有冲突检测的载波侦听多路访问”。

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

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

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

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

详细见CSMA/CD协议介绍。

二、以太网探测帧

当多个工作站均想向以太网发送数据时,如果总线处于忙的状态,大家都等待,也不会有何争议;但是如果总线处于空的状态,而且工作站是依次监听到空状态,那么各个工作站就会陆续向总线发送数据,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 之间传输的来回时间 必须控制在一定范围之内。

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

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

1、碰撞槽时间

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

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

则有:

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

因为 Lmin / R = 碰撞槽时间 

所以:Lmin =(2 * S / 0.7C + 2 * tPHY )× 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 高兴的时候,往传送带上放荔枝的时候快,不高兴的时候就慢。高兴的时候每秒可以往传送带上放 100 Mbit 个荔枝,换算一下,也就是说放一个荔枝用 10 纳秒。不高兴的时候每秒钟只能往传送带上放 10 Mbit 个,也就是说放一个荔枝用 100 纳秒。

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

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

由此可见,MAC 层发送的速度越快,

(1)如果帧最小长度不变的情况下,以太网的最大有效距离就越短。

(2)如果以太网的最大有效距离不变的情况下,帧的最小长度就越长。

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

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字节。

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 要小于 512 bit time。(来回时间小于 512 位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。

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

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

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

转载:以太网帧最小帧长与最大帧长 - 欣欣然DR FEEL - 博客园

(SAW:Game Over!)

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值