本文主题内容
- 理解数据链路层的作用
- 掌握以太网帧格式
- 对比 MAC 地址与 IP 地址
- 理解 MTU、IP 分片和 TCP MSS
- 掌握 ARP 工作流程
- 认识 ARP 报文与邻居缓存
- 分析链路层常见问题
引言:IP 决定数据最终去哪里,但网卡发送的是数据链路层帧。每经过一段链路,主机或路由器都要确定下一跳的硬件地址,再把 IP 数据报封装到适合当前链路的帧中。
一、数据链路层
数据链路层负责同一链路上相邻节点之间的数据传输,主要解决:
- 帧的组织与识别
- 链路层寻址
- 媒体访问控制
- 差错检测
- 向网络层交付有效载荷
网络层负责端到端路径,数据链路层负责当前一跳。数据报经过路由器时,IP 层继续转发,原链路帧则被解开并重新封装。
二、以太网
以太网既规定数据链路层帧格式,也涉及物理介质、速率和访问方式。
2.1 以太网帧格式

常见 Ethernet II 帧包含:
| 字段 | 长度 | 作用 |
|---|---|---|
| 目的 MAC | 6 字节 | 当前链路目标 |
| 源 MAC | 6 字节 | 当前链路发送方 |
| EtherType | 2 字节 | 上层协议类型 |
| 数据 | 46 到 1500 字节 | 有效载荷 |
| FCS | 4 字节 | CRC 差错检测 |
常见 EtherType:
0x0800:IPv40x0806:ARP0x86DD:IPv6
帧前导码和帧间间隔属于物理传输细节,通常不计入上面讨论的以太网帧长度。
2.2 解包与分用
网卡接收帧后先检查目的 MAC 和 FCS。协议栈根据 EtherType 把有效载荷交给 IPv4、ARP 或 IPv6 等上层模块。
数据链路层通过帧边界和 EtherType 完成解包与分用,通过 MAC 地址完成当前链路交付。
三、MAC 地址
MAC 地址通常为 48 位,常用十六进制表示:
text
08:00:27:03:fb:19
3.1 MAC 与 IP 的区别
| 对比 | MAC 地址 | IP 地址 |
|---|---|---|
| 所属层次 | 数据链路层 | 网络层 |
| 主要作用 | 当前链路交付 | 跨网络寻址和路由 |
| 是否随每跳变化 | 帧首部通常变化 | 无 NAT 时通常保持 |
| 地址范围 | 链路局部使用 | 具有网络前缀结构 |
MAC 地址可以由网卡固化,也可以由操作系统配置,不应简单认为任何情况下都绝对不可修改或全球唯一。
3.2 单播、广播与组播
- 单播:发送给一个接口
- 广播:目的 MAC 为
ff:ff:ff:ff:ff:ff - 组播:发送给加入某个组的接口
ARP 请求通常使用广播,因为发送方还不知道目标的单播 MAC。
四、MTU
MTU 是链路层能够承载的最大网络层数据包大小。常见以太网 MTU 为 1500 字节,但隧道、VPN、PPPoE 和巨帧环境可能不同。
4.1 MTU 对 UDP 的影响
IPv4 基本报头 20 字节,UDP 报头 8 字节。在 MTU 为 1500 的链路上:
text
UDP数据建议上限 = 1500 - 20 - 8 = 1472字节
超过 MTU 的 IPv4 数据报可能被分片。


任意分片丢失都会导致整个 UDP 数据报重组失败,因此应用通常应避免大数据报。
4.2 MTU 对 TCP 的影响
TCP 使用 MSS 控制单个报文段携带的最大 TCP 数据长度。
text
MSS = MTU - IP报头 - TCP报头
MTU 为 1500,IPv4 和 TCP 都使用 20 字节基本报头时,常见 MSS 为 1460。

TCP 建连时双方可以通过 MSS 选项通告接收能力。实际发送还会受到路径 MTU、选项长度和拥塞控制影响。
注意:1472 和 1460 都依赖特定报头长度与 MTU,只是常见示例,不是所有网络中的固定值。
五、ARP
ARP 用于在 IPv4 局域网内建立 IP 地址到 MAC 地址的映射。
5.1 为什么需要 ARP
应用通常知道目标 IP 和端口,但网卡发送帧需要目的 MAC:
- 目标在同一子网:解析目标主机 IP
- 目标不在同一子网:解析默认网关 IP
ARP 只解决当前链路的下一跳地址,不负责跨路由器查询远端主机 MAC。
5.2 ARP 工作流程

- 主机查询本地邻居缓存
- 没有映射时广播 ARP Request
- 拥有目标 IP 的主机发送 ARP Reply
- 请求方缓存 IP 与 MAC 映射
- 使用得到的 MAC 封装以太网帧
例:
text
Who has 192.168.1.20? Tell 192.168.1.10
192.168.1.20 is at 00:11:22:33:44:55
5.3 ARP 报文

重要字段包括:
- 硬件类型
- 协议类型
- 硬件地址长度
- 协议地址长度
- 操作码
- 发送方 MAC 和 IP
- 目标 MAC 和 IP
ARP Request 的目标 MAC 字段通常未知,填 0;以太网帧目的 MAC 使用广播地址。
六、ARP 缓存
Linux 查看邻居表:
bash
ip neigh
常见状态包括:
REACHABLE:近期确认可达STALE:缓存存在但需要再次确认DELAY:等待上层流量确认PROBE:正在主动探测FAILED:解析失败
缓存有生命周期,避免每次发送都进行广播。
七、ARP 安全
传统 ARP 没有身份认证。攻击者可以发送伪造应答,把网关 IP 映射到攻击者 MAC,造成:
- 中间人攻击
- 流量劫持
- 断网
- 会话监听
常见防护:
- 交换机 DHCP Snooping 与 Dynamic ARP Inspection
- 关键设备使用静态邻居项
- 网络分区和访问控制
- 使用 HTTPS、SSH 等端到端加密,降低链路被劫持后的影响
八、抓包时怎样观察
可以使用:
bash
tcpdump -n -e arp
tcpdump -n -e ether host 00:11:22:33:44:55
观察跨网络通信时会发现:
- IP 目的地址仍是远端服务器
- 以太网目的 MAC 是本地网关
- 路由器转发到下一链路时重新生成以太网首部
九、总结
数据链路层负责相邻节点的一跳传输。以太网帧使用源和目的 MAC 完成链路层寻址,使用 EtherType 把有效载荷交给上层协议,使用 FCS 检测传输错误。
MTU 限制单个链路帧可承载的网络层数据大小,直接影响 UDP 分片和 TCP MSS。ARP 把下一跳 IPv4 地址解析为 MAC 地址,并通过邻居缓存减少广播。
跨网络通信中,IP 地址描述最终目标,路由表选择下一跳,ARP 得到下一跳 MAC,以太网帧完成当前链路的实际发送。