概述

我们在工作中,经常听到小伙伴说报文的长度是64、128、256字节等,我们都知道它们是什么意思,不过在计算网络带宽时,总是会比预想的要小,并且报文越小,差距越大。

这个问题几乎是所有网络新手都会遇到的困扰,网上关于这方面的资料也不多,大部分小伙伴只能去咨询老员工,被鄙视一顿后然后才知道原因:)。

其实这个问题并不难,标准的文档上就有,不过IEEE的标准文档实在是“难以下咽”,让人看到就头疼。今天就把以太网完整帧长的小知识点分享给大家,也非常欢迎各位关注我们的头条号,一起讨论网络知识。

以太网格式

要想知道以太网帧的真正长度,需要先从以太网格式说起。如下图是完整的以太网格式:

以太网帧的数据字段最小长度(计算以太网帧长)(1)

以太网完整帧长

各位小伙伴有没有发现完整帧长中,有的内容比较陌生呢?我们通常说的帧长,指的是下面的内容,它不包含Preamble,SFD,和IFG这三部分内容;

以太网帧的数据字段最小长度(计算以太网帧长)(2)

通常说的帧长

这三部分内容到底有什么用处呢,为什么要算在完整帧长里呢?看完下面的解释就知道了!

Preamble

Preamble,中文翻译是“序言”,引申为“前导码”;

Preamble有7个字节, 它由10循环代码组成,每个字节的内容都是“10101010”;

以太网帧的数据字段最小长度(计算以太网帧长)(3)

Preamble

Preamble本身并没有实际的意思,仅仅用在发送方和接收方之间同步时钟和bit流;

  1. 当发送方发送数据时,会加上这7个字节的报文,告诉接收方“请按照这种规律准备好,我马上要发送数据了”;
  2. 当接收方连续收到“10101010”这串代码时,就需要调整字节的时钟,准备好接收数据。

SFD

SFD全称是start of frame delimiter,中文意思“帧开始界定符”,它只有1个byte,内容是固定的:“10101011”。

以太网帧的数据字段最小长度(计算以太网帧长)(4)

SFD

SFD用来通知接收方“从这个byte以后的内容都是有效数据,不能丢弃了”。

当接收方收到Preamble以后,又收到1个byte的内容,但是这个内容的最后两个bits是“11”,它就知道后面的内容不在是同步信号,而是有意义的数据。

理论上SFD和Preamble是不一样的,两者的功能差别比较大,但是工作中我们通常把这两个内容只简称为“前导码”,忽略SFD(谁让它太短):);但是我们听到前导码时,要知道,它包含两部分的内容:Preamble,SFD。

以太网帧的数据字段最小长度(计算以太网帧长)(5)

前导码

IFG

IFG全称是inter Frame Gap,中文名称是“帧间隙”,它表示的两个Frame之间相隔大小。设备发送完一个Frame以后,并不会立刻再发送下一个,而是会等待IFG的间隔才会继续发送,这一点可能与我们理解的不一样。

最小的帧间隙是12bytes,也是发送完一个帧以后,需要等待发送12bytes的时间才能发送,至于为什么最小是12bytes,需要参考以太网的CSMA/CD特性才行(主要是为了避免冲突)。

以太网带宽计算

上面我们详细解释了Preamble、SFD、IFG三者的功能,现在我们要记住的是:一个完整以太网帧长度,也包含这三部分的内容,因为这三部分也算是以太网的开销

要计算带宽,我们还需要知道FPS(关于FPS的内容,参见我的前一篇文章描述),我们来看一张经典的带宽和FPS对于关系图:

以太网帧的数据字段最小长度(计算以太网帧长)(6)

带宽和FPS对于图

我们以64字节为例,分别以完整帧长度和普通帧长度来计算,看看哪个结果是我们所说的1G(1000M)带宽。

PS:1G带宽对应的FPS是1488095,我们直接从图上可以查到,或者查询标准文档也可以。

完整帧长度

前一篇文章已经描述过,带宽通常指的是1秒内能够处理的bit数,其公式为:带宽 = 速率 * 帧长度;

假设以完整帧长度来计算,因为它包括前导码和帧间隙,所以完整帧长度 = 帧长度 8字节的前导码 12字节的帧间隙 = 64 8 12 = 84 bytes,转换为bit为84*8= 672 bits。

带宽 = 1488095 * 672 = 999,999,840 bit = 1000M bit,这样就和我们通常说的带宽是相同的,也可以证明这种计算方式是正确的。

我们再来看看不加前导码和帧间隙的带宽计算结果。

普通帧长度

假设我们不加上前导码和帧间隙,其计算出来的带宽应该为 = 1488095 * (64*8)= 761,904,640 ≈ 761M,并不是我们通常说的带宽。

不过这种计算方式得到的值也有一个专有的名称:以太网有效负载带宽

以太网有效负载带宽带宽也是一个非常重要的指标,它表示传输1000M的数据,有效内容只有761M左右,剩下的都是以太网本身的消耗

从结果上看,这个效率(76%)其实是不高的,尤其是在字节偏小的情况下,传输效率特别小,也因为这个原因,当初以太网差点被别的技术取代。

总结

从上面的文章里,我们可以得出如下的结论:

  1. 完整的帧长度包含8字节的前导码和12字节的空闲帧;
  2. 前导码用于同步同步发送方/接收方的bit流,提示有效帧内容的开始;
  3. 计算带宽时,使用的帧长是完整帧长,否则计算出来的仅仅是以太网的有效带宽;

看完上面的描述,大家对于前导码和空闲帧的功能了解了吗?如果有疑问,欢迎留言讨论!并且非常欢迎各位关注我们的头条号,一起讨论网络知识,谢谢!

,