本节摘要:帧是链路层的信封,MAC 地址是信封上的本网段门牌。本节讲清帧定界的三种思路、MAC 地址的结构与三类地址、CRC 循环冗余校验的检错原理,并用抓包与命令演示查看网卡 MAC 与帧字段的真实输出。
数据包抵达第二站的第一件事:领信封。物理层交上来的是一串没有边界的比特,链路层必须回答"从哪到哪是一个帧"(定界)、"这帧是给谁的"(寻址)、"路上坏没坏"(检错)。三件事分别由帧格式、MAC 地址与 CRC 字段承担。
接收方的网卡每秒收到几十亿个比特,怎么知道第几个比特开始是一个新帧?三种主流思路:
字符计数法最直接:帧头写明本帧长度,数着收。缺陷是一旦计数字段出错,整帧连同后续所有帧的边界全部错位,错一步满盘皆输,现代链路层几乎不用。
字节填充法用特殊字符标记开头结尾(如旧串行协议 PPP 的 0x7E)。数据里恰好出现 0x7E 怎么办?发送方在它前面插入转义字符 0x7D,接收方再去掉——文本协议里转义的老办法。
比特填充法是 HDLC 与早期以太网的思路:用 01111110 当帧界,发送方每遇到连续 5 个 1 就插一个 0,保证数据里永远不会出现帧界序列,接收方每见 5 个连续 1 就删掉后面的 0。现代以太网更简单:物理层用 4B/5B、64B/66B 等线路编码后,帧界由特殊码组标示,帧间还有明确的空闲间隔。
MAC 地址 48 位,写成 6 组十六进制,如 3C:22:FB:19:8A:41。前 24 位是厂商识别号(IEEE 分配,3C:22:FB 属于苹果),后 24 位由厂商自编。它烧录在网卡固件里,理论全球唯一——"理论"是因为虚拟化时代 MAC 可以软件随意改,克隆网卡也会撞号。
三类特殊地址必须记住:
# 查看本机网卡 MAC(Linux/macOS) $ ip link show 2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... link/ether 3c:22:fb:19:8a:41 brd ff:ff:ff:ff:ff:ff 解读: link/ether 3c:22:fb:19:8a:41 ← 本机单播 MAC( burnt-in ) brd ff:ff:ff:ff:ff:ff ← 该网卡支持广播地址 FF:FF:FF:FF:FF:FF 组播地址规律:第 8 位(最低字节的次低位)为 1 即组播, 如 01:00:5E:xx 开头是 IPv4 组播在以太网上的映射。 广播帧全网段人人收下(ARP 靠它找门牌,见第 4 章); 组播帧只有加入了对应组的网卡收下( IPTV、邻居发现在用)。

CRC 把整个帧看作一个巨大的二进制数,用约定好的生成多项式做模 2 除法,余数填进 FCS 字段。接收方用同一多项式再除一次:余数为零认为没坏,非零直接丢帧,不做任何修复。
演示思路(3 位数据 101,生成多项式 x^2 + 1 即 101): 发送方:101 后补 2 个 0 → 10100 10100 ÷ 101 (模2除法,不借位只异或) 10100 ^101 ---- 0000 → 余数 00 帧实际发送:101 | 00(数据 + 余数) 接收方:收到 10100,再除以 101,余 0 → 判定无损 若途中翻转成 10110:10110 ÷ 101 余 11 ≠ 0 → 丢帧 能力边界:CRC-32 能检出所有 1~2 位错、所有奇数位错、 所有长度 ≤32 的突发错——非常强,但对恶意篡改无抵抗力: 攻击者改完数据可以重算一个合法 CRC(这就是为什么第 7 章 的完整性保护要用带密钥的 HMAC,而不是裸 CRC)。
⚠️ 常见坑:链路层"检错后丢弃"常常把新手搞蒙——为什么不是重传?因为相邻链路误码率通常低于十亿分之一,为极小概率在每一跳都维护状态不划算,端到端的 TCP 重传兜底更便宜。这是"端到端原则"的又一次胜利。
初学者最常见的疑问:既然两套地址都能定位设备,为什么要有两套?答案是它们定位的对象不同——MAC 定位"这条链路上的哪块网卡",出厂时固化、不随位置变;IP 定位"全球拓扑里的哪个网络里的哪台主机",可随地分配、随网段变。笔记本从公司带回家,MAC 不变而 IP 必变;数据包跨网段时,IP 端到端稳定,MAC 却每跳更换(第 4.2 节的铁律)。如果只有 MAC,全球每台交换机都要记住上百亿个地址,自学习表会爆炸;如果只有 IP,同一链路上的设备还得依赖网络层才能说上话,层次耦合。两套地址各管一段,是"扁平身份"与"层次身份"的分工,也是分层思想在编址上的投影。
另一个高频疑问:改 MAC 能不能当隐身手段?不能。日常网络行为里 IP、主机名、浏览器指纹的关联远比 MAC 紧密,且无线环境中 MAC 随每个帧明文广播——随机化 MAC 只是提高长期追踪的边际成本,谈不上匿名。
看 MAC 厂商前缀能做什么实际工作? 在陌生网络里快速识别设备类型:交换机与路由器的厂商前缀和终端网卡常常不同,网络资产盘点工具的第一步就是扫全网 MAC 并按前缀归类。厂商前缀库由 IEEE 公开维护,是"从一串地址读出故事"的廉价情报来源——排错时看到某端口学到的 MAC 属于一台打印机,就能排除"服务器接错口"这类乌龙。
MTU 不匹配会怎样? 两端网卡 MTU 不一致时,小包一切正常、大包莫名丢失,表现为"能 ping 通却传不了大文件"——这是最诡异的链路层故障之一,排错口诀是"用大 ping 试边界"(逐步加大探测包尺寸,找到无声丢包的临界点),处置则是统一两端 MTU 或依赖路径 MTU 发现(第 4 站的分片故事会接上这条线)。
信封有了,下一节解决"一屋子人同时想说话"的秩序问题——介质访问控制。