以太网如何知道帧有多长?

看看维基百科上的以太网条目,我无法弄清楚它是如何指示以太网帧的长度。 EtherType / Length头字段显然可以指示帧types或显式长度,我猜测在帧types的情况下,必须做一些其他逻辑来确定数据包有多长。 例如,如果EtherType字段是0x0800,则表示IPv4有效负载,因此接收NIC将必须检查有效负载的前32位以findIP包的长度,并且因此计算出总长度以太网帧,并知道何时查找帧结尾校验和和帧间间隔。

这听起来正确吗? 我也看过IEEE 802.3规范的以太网(无论如何),似乎证实了这一点,但它是非常不透明的。

物理编码子层负责分隔帧,并将其发送到MAC层。

例如,在千兆位以太网中,8B / 10B编码scheme使用10位代码组对8位字节进行编码。 多余的两位告诉一个字节是控制信息还是数据。 控制信息可以是Configuration,Start_of_packet,End_of_packet,IDLE,Carrier_extend,Error_propagation。

这就是NIC如何知道帧开始和结束的地方。 这也意味着帧的长度在完全解码之前是未知的,类似于C中由NULL结尾的string。

您真正想要回答您的问题的文章是http://en.wikipedia.org/wiki/Ethernet_II_framing ; 其中说:

由于这个行业开发的标准经历了正式的IEEE标准化过程,所以在新的802.3标准中,EtherType字段被改变为(数据)长度字段。 (原始的以太网数据包使用围绕它的帧来定义它们的长度,而不是明确的长度计数。)由于数据包接收者仍然需要知道如何解释数据包,所以标准要求IEEE 802.2标头遵循该长度并指定数据包types。

从逻辑上讲,只有三个select:

  1. 像使用静态框架大小。
  2. 在其头部或其他地方指定帧大小,甚至用一些标志来限制它。
  3. 根本没有发送帧

其中一个工作在以太网中,因为现在没有其他选项可用于现代networking;)第一和第三是错误的以太网,所以你是正确的!

花了一段时间之前,现在再一次这样做。 没有太多的信息可用,这是令人惊讶的,因为这是一个明显的问题。 我终于决定使用包头中的长度字段。 请参阅以下链接

http://www3.rad.com/networks/infrastructure/lans/etherform.htm#_ieee