补充:
三、结论:是否符合 RFC?
| 角度 | 是否符合 | 说明 |
|---|---|---|
| 以太网标准严格语义(RFC 894) | 对于以太网接口,理论上应使用广播 MAC 封装广播 IP。 | |
| 协议互操作与实现容忍度(实际 RFC 行为) | RFC 未规定“ARP 关闭时必须仍发送广播帧”,Linux 的行为可视为实现选择,不违反协议必备要求。 | |
| 工程意义 | 避免了非以太网 NOARP 接口误发广播帧,保持内核一致性。 |
简要结论:FreeBSD 的实现与 Linux 不同。在 FreeBSD 里,即使接口被设为 NOARP(ifconfig <if> -arp),对 IPv4 广播报文(如 255.255.255.255 / 子网定向广播)仍会在 L2 使用以太网广播 MAC ff:ff:ff:ff:ff:ff 发送。这是因为 FreeBSD 在 arpresolve() 中先处理 M_BCAST/M_MCAST,完成 L2 目的地址填充后直接返回;对 IFF_NOARP 的检查发生在其后,因此不会覆盖广播/多播的映射逻辑。相对地,你前面看到的 Linux 代码是在 NOARP 分支里优先把 neigh->ha 设为本机 MAC,从而“吃掉”了广播语义。