dir*_*ide 18 networking ethernet
查看维基百科上的以太网条目,我无法弄清楚它是如何指示以太网帧的长度的。EtherType/Length 头字段显然可以指示帧类型或显式长度,我猜测在帧类型的情况下,它必须执行一些其他逻辑来确定数据包的长度。例如,如果 EtherType 字段为 0x0800,则表示 IPv4 有效负载,因此接收 NIC 必须检查有效负载的前 32 位以找到 IP 数据包的长度,从而计算出 IP 数据包的总长度以太网帧,并知道何时查找帧尾校验和和帧间间隙。
这听起来正确吗?我还查看了以太网的IEEE 802.3 规范(无论如何是第 1 部分),这似乎证实了这一点,但它非常不透明。
小智 22
物理编码子层负责对帧进行定界,并将它们向上发送到 MAC 层。
例如,在千兆以太网中,8B/10B 编码方案使用 10 位代码组对 8 位字节进行编码。额外的两位表示一个字节是控制信息还是数据。控制信息可以是Configuration、Start_of_packet、End_of_packet、IDLE、Carrier_extend、Error_propagation。
这就是 NIC 知道帧开始和结束位置的方式。这也意味着在完全解码之前,帧的长度是未知的,类似于 C 中以 NULL 结尾的字符串。