以太网帧与 MAC 地址
局域网内两台机器通信不需要路由器——它们靠 MAC 地址直接在数据链路层传输。理解以太网帧结构和 ARP 协议,是排查"同网段 ping 不通"这类问题的基础。
以太网帧结构
IEEE 802.3 以太网帧(标准帧,最大 1518 字节):
┌─────────┬─────────┬──────┬─────────────────────┬──────┐
│前导码 │目标MAC │源MAC │类型/长度 │数据 │FCS
│8字节 │6字节 │6字节 │2字节 │46-1500│4字节│
└─────────┴─────────┴──────┴─────────────────────┴──────┘
字段说明:
前导码(Preamble):7字节同步 + 1字节帧起始分界符(SFD),硬件处理
目标 MAC:6 字节目标物理地址(FF:FF:FF:FF:FF:FF = 广播)
源 MAC:6 字节发送方物理地址
类型/长度:
0x0800 = IPv4
0x0806 = ARP
0x86DD = IPv6
0x8100 = VLAN 标记(802.1Q)
数据:46-1500 字节(最小 46,不足则填充 Padding)
FCS:帧校验序列(CRC-32),检测传输错误
MTU(最大传输单元):以太网默认 1500 字节(不含帧头尾)。超过 MTU 的 IP 包需要分片(或发送方降低大小)。
MAC 地址
MAC = Media Access Control = 硬件地址 = 物理地址
格式:6 字节,16 进制,用 : 或 - 分隔
示例:AA:BB:CC:DD:EE:FF
结构:
前 3 字节 = OUI(厂商标识,IEEE 分配)
后 3 字节 = 厂商自行分配的序列号
特殊 MAC:
FF:FF:FF:FF:FF:FF = 广播(所有设备接收)
01:xx:xx:xx:xx:xx = 多播(第一字节最低位为1)
00:xx:xx:xx:xx:xx = 单播(第一字节最低位为0)
查看 MAC:
ip link show eth0
# link/ether aa:bb:cc:dd:ee:ff
ARP:IP 地址到 MAC 地址的解析
sequenceDiagram
participant A as PC-A (10.0.1.100)
participant Switch as 交换机
participant B as PC-B (10.0.1.200)
A->>Switch: ARP 广播 Request\n"谁是 10.0.1.200?\n我是 AA:BB:CC:11:11:11"
Switch->>B: 转发广播到所有端口
Note over B: 我就是 10.0.1.200!
B->>Switch: ARP 单播 Reply\n"我是 10.0.1.200,\nMAC = AA:BB:CC:22:22:22"
Switch->>A: 转发给 PC-A
Note over A: 记录到 ARP 缓存\n10.0.1.200 → AA:BB:CC:22:22:22
A->>B: 现在可以直接用 MAC 地址发送以太网帧了
# 查看 ARP 缓存
ip neigh show
arp -n
# 手动触发 ARP(ping 即可)
ping -c 1 10.0.1.200
# 发现 ARP 欺骗(ARP Spoofing)
# 如果同一 IP 对应多个 MAC,可能有 ARP 欺骗:
arp -n | sort | uniq -d -f 1
交换机工作原理
交换机工作在数据链路层(L2),根据 MAC 地址表转发帧。
交换机 MAC 地址表(CAM Table):
端口 MAC 地址 VLAN 老化时间
────────────────────────────────────────────────
Gi0/1 AA:BB:CC:11:11:11 1 245s
Gi0/2 AA:BB:CC:22:22:22 1 180s
Gi0/3 AA:BB:CC:33:33:33 10 300s
学习过程:
1. PC-A 从 Gi0/1 发帧 → 交换机记录"AA:BB:CC:11:11:11 在 Gi0/1"
2. 目标 MAC 不在表中 → 向所有端口广播(Flooding)
3. PC-B 回复 → 交换机记录"AA:BB:CC:22:22:22 在 Gi0/2"
4. 下次 A→B:直接从 Gi0/2 转发(Unicast Forwarding),不再广播
300 秒无活动 → 条目老化删除(Aging)
常见问题排查
# 问题:同网段两台机器 ping 不通
# 步骤 1:确认两台机器在同一网段
ip addr show # 检查 IP 和子网掩码是否一致
# 步骤 2:检查 ARP 是否解析成功
ping -c 1 10.0.1.200 && ip neigh show | grep 10.0.1.200
# 如果 ARP 条目 FAILED → 对方不存在或防火墙丢弃 ARP
# 步骤 3:检查本地防火墙
sudo iptables -L INPUT -n | grep -E "(DROP|REJECT)"
# 如有规则丢弃 ICMP → 添加放行规则
sudo iptables -I INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 步骤 4:检查网线/网卡
ethtool eth0 | grep "Link detected"
# Link detected: yes → 物理连接正常
# 步骤 5:抓包确认
tcpdump -i eth0 -n 'arp or icmp' -c 10
# 能看到 ARP 请求?有 ICMP Echo Request?有 Reply?
CCNA 对应考点
考纲位置:Domain 2.1 — Compare Cisco Catalyst switch features Domain 2.2 — Configure and verify VLANs
高频考题: - 交换机如何学习 MAC 地址(自学习过程) - MAC 地址表满了怎么办(MAC 泛洪攻击,导致交换机像集线器一样广播所有帧) - ARP 欺骗原理(用于中间人攻击) - MTU 与巨帧(Jumbo Frame,可配置为 9000 字节,用于存储网络)
下一节:交换机工作原理与生成树——当网络中有多台交换机互联时,需要生成树协议防止二层环路(广播风暴)。