2. 物理层与数据链路层基础
物理层负责把比特流送上介质,数据链路层则把这些比特组织成“帧”,并在同一局域网内完成寻址与交付。理解以太网帧结构、MAC 地址、ARP 协议和交换机转发机制,是排查“同网段能通、跨网段不通”“IP 正确但访问失败”这类问题的基础。本节围绕一条真实的数据链路展开:主机 A(192.168.1.10/24,MAC 为 00:1A:2B:3C:4D:5E)要访问同网段主机 B(192.168.1.20/24,MAC 为 00:1A:2B:3C:4D:6F),中间经过一台二层交换机。
一、以太网帧结构:数据链路层的“信封”
以太网 II 帧是最常见的封装格式,其字段依次为:目的 MAC(6 字节)、源 MAC(6 字节)、类型/长度(2 字节)、数据与填充(46~1500 字节)、帧校验序列 FCS(4 字节)。类型字段标识上层协议,例如 0x0800 表示 IPv4,0x0806 表示 ARP,0x86DD 表示 IPv6。数据字段最小 46 字节是为了保证冲突检测所需的帧长,不足时由上层填充;最大 1500 字节即通常所说的 MTU。
需要区分两个概念:帧的“目的 MAC”是链路层下一跳的地址,而不是最终目的主机的 IP。当数据需要经过路由器转发时,每一跳的源/目的 MAC 都会改变,而源/目的 IP 保持不变。这正是理解 ARP 与交换机转发的前提。
二、MAC 地址:局域网的身份证
MAC 地址长 48 位,通常写成 00:1A:2B:3C:4D:5E 形式。前 24 位是 OUI(组织唯一标识符),由 IEEE 分配给厂商;后 24 位由厂商自行分配。MAC 地址分为单播、组播和广播:广播地址 FF:FF:FF:FF:FF:FF 会被同一广播域内所有设备接收,ARP 请求正是使用广播目的 MAC。此外,交换机不会像路由器那样修改 MAC,它只根据源 MAC 学习、根据目的 MAC 转发。
三、ARP 协议:从 IP 到 MAC 的解析
主机 A 知道 B 的 IP 是 192.168.1.20,但要在以太网中发送帧,必须知道 B 的 MAC。ARP(地址解析协议)完成这一映射。其工作过程如下:
- A 先查本机 ARP 缓存,若已有 192.168.1.20 对应的 MAC,则直接封装发送。
- 若没有,A 构造 ARP 请求:源 MAC 为自己的 MAC,目的 MAC 为广播 FF:FF:FF:FF:FF:FF,类型 0x0806,内容为“谁是 192.168.1.20?请告诉 192.168.1.10”。
- 交换机收到广播帧后,向除入端口外的所有端口泛洪。
- B 收到请求后发现目标 IP 是自己,于是单播回复 ARP 应答,告知自己的 MAC。
- A 收到应答后写入 ARP 缓存,随后即可正常封装单播帧。
ARP 缓存有老化时间,Windows 默认约 15~45 秒,Linux 通常为 30 秒左右,过期后会重新解析。可用 arp -a(Windows)或 ip neigh(Linux)查看当前缓存。
四、交换机转发机制:学习、泛洪、转发、过滤
交换机内部维护一张 MAC 地址表,记录“MAC—端口—老化时间”。其核心行为可归纳为:
- 学习:收到帧时,把源 MAC 与入端口写入 MAC 地址表。
- 泛洪:若目的 MAC 不在表中,或为广播/组播,则向除入端口外的所有端口转发。
- 转发:若目的 MAC 在表中且对应端口不是入端口,则只从该端口发出。
- 过滤:若目的 MAC 与源 MAC 在同一端口,则丢弃该帧。
交换机每个端口是独立的冲突域,但默认所有端口属于同一广播域。因此 ARP 广播会在整个 VLAN 内传播,这也是划分 VLAN 能抑制广播风暴的原因。
五、用 Wireshark 抓取并分析 ARP 请求与应答
在主机 A 上打开 Wireshark,选择连接交换机的网卡,设置过滤器 arp,然后清空 ARP 缓存并触发一次访问:
# Windows 清空 ARP 缓存(需管理员权限)
arp -d *
# Linux 清空指定条目
sudo ip neigh flush 192.168.1.20
# 触发访问
ping 192.168.1.20
抓包后应看到两条关键报文。第一条是 ARP 请求,Info 列显示 Who has 192.168.1.20? Tell 192.168.1.10,展开 Ethernet II 可见目的 MAC 为 Broadcast,类型 0x0806;展开 Address Resolution Protocol 可见 Opcode 为 request (1)。第二条是 ARP 应答,Info 显示 192.168.1.20 is at 00:1a:2b:3c:4d:6f,Opcode 为 reply (2),目的 MAC 已是 A 的单播地址。
判断要点:若只看到请求没有应答,说明 B 未在线、被防火墙拦截或不在同一广播域;若应答中的 MAC 与预期不符,可能存在 IP 冲突或 ARP 欺骗。抓包时还可观察交换机是否把广播泛洪到了其他端口——在另一台同网段主机上同时抓包,应能看到该 ARP 请求,这正是广播域范围的直接证据。
六、关键参数与常见误区
| 项目 | 典型值/说明 |
|---|---|
| 以太网帧最小长度 | 64 字节(含 FCS),数据字段不足 46 字节时填充 |
| 最大传输单元 MTU | 1500 字节(标准以太网) |
| ARP 请求目的 MAC | FF:FF:FF:FF:FF:FF(广播) |
| ARP 应答目的 MAC | 请求方的单播 MAC |
| 交换机未知单播处理 | 泛洪到除入端口外的所有端口 |
| ARP 缓存老化 | Windows 约 15~45 秒,Linux 约 30 秒 |
常见误区包括:把“目的 MAC”误认为最终目的主机 MAC;认为交换机会修改 MAC 地址;认为 ARP 可以跨网段直接解析。实际上,跨网段时主机 A 会把帧发给默认网关的 MAC,由网关再逐跳转发,ARP 只在同一广播域内生效。掌握这些边界,才能在真实网络中快速定位链路层问题。