什么是帧
帧是数据链路层(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传输时则称为"帧"。每经过一层就会多包一层头部,这个过程叫做封装。