以太网帧结构完全解析

在网线中传输的一段数据到底长什么样?

什么是帧

帧是数据链路层(OSI第2层)交换数据的传输单位,它把上层传下来的IP数据包整体包裹起来,送到同一网络内的下一个设备。交换机和网卡是根据帧中的MAC地址而不是IP地址来决定转发方向的。

前导码与SFD

帧最前面的7字节前导码由0和1交替组成,用于让接收设备识别信号开始并同步时序。紧随其后的1字节SFD(帧起始定界符)则标志着"真正的帧数据从这里开始"。计算帧大小时通常不包含这8字节。

目的·源MAC地址

各占6字节的目的MAC地址和源MAC地址字段,用于标识同一网络内收发这个帧的两台设备。交换机正是依据这些信息决定把帧从哪个端口转发出去。

EtherType(类型)字段

这个2字节的字段像一个标签,标明帧内数据属于哪种上层协议——例如0x0800表示IPv4、0x86DD表示IPv6、0x0806表示ARP。接收设备据此判断该如何解析帧内的数据。

载荷(数据)

实际要传递的上层数据包所在的部分,大小从最小46字节到最大1500字节不等。数据不足46字节时会用无意义的填充凑够最小长度,超过1500字节则由上层拆分成多个帧分别传输。

FCS(帧校验序列)

帧末尾附加的4字节纠错值,用CRC(循环冗余校验)算法计算得出。接收方会重新计算一遍并与收到的FCS值比对,不一致就判定传输中出现错误并悄悄丢弃该帧——这只是检测错误,并不能修复错误。

帧的最小与最大长度

标准以太网帧(不含前导码)规定最小64字节、最大1518字节,加上802.1Q VLAN标签后可增至1522字节。小于64字节的帧难以区分是正常帧还是冲突产生的碎片,因此设有最小长度限制;远超上限的"巨型帧(Jumbo Frame)"是一种非标准扩展功能,只能在支持它的设备之间使用。

帧、数据包、数据段的区别

同一份数据在传输层(TCP)被切分后称为"段",加上IP地址信息后在网络层称为"数据包",再加上MAC地址信息、实际通过网线或Wi-Fi传输时则称为"帧"。每经过一层就会多包一层头部,这个过程叫做封装。

目的MAC地址是如何查出来的

仅凭IP地址查出应写入帧中的目的MAC地址,这个过程由ARP(地址解析协议)负责完成,理解它有助于弄清帧发送前这个字段是如何被填上的。

结合实际网线布线来看

组装好的帧最终会转换成电信号,沿着物理网线传输——双绞线网线遵循T568A/T568B等布线标准,决定信号如何分配到各对线芯上。

常见问题

Wi-Fi通信时也使用同样的以太网帧吗?

不是。Wi-Fi(802.11)使用的是与以太网类似但字段结构不同的独立帧格式。不过当流量从无线链路进入有线交换机或路由器内部时,通常会被转换成标准的以太网帧格式处理。

使用巨型帧是不是总是更好?

不一定。远大于标准1500字节载荷的巨型帧可以减少头部开销、提高大容量传输效率,但路径上的每一台设备(交换机、网卡等)都必须支持,一旦经过不支持的设备,帧就可能被拆分或丢弃,因此需要整条链路的设置保持一致。