4. 数据链路层排查:MAC地址与ARP协议、交换机MAC地址表、VLAN配置与Trunk链路、STP(生成树协议)与环路问题
网络不通,很多人第一反应就是查IP、查路由。但我干了这么多年运维,发现一个规律:七成以上的连接断开问题,其实都卡在数据链路层。说白了,就是二层没搞定,三层再折腾也没用。
这一章,咱们就把数据链路层的几个核心排查点掰开揉碎讲清楚。MAC地址怎么查、ARP表怎么清、交换机MAC表怎么学、VLAN和Trunk怎么配、STP怎么防环。嗯,都是实战里天天碰到的活儿。
4.1 MAC地址与ARP协议:二层通信的“身份证”与“翻译官”
MAC地址是设备的物理地址,出厂就烧在网卡里。你想想看,IP地址可以随便改,但MAC地址是唯一的。两台设备要通信,光知道对方IP不行,还得知道对方的MAC地址。谁来做这个翻译工作?ARP协议。
4.1.1 ARP的工作机制
ARP(Address Resolution Protocol)就是把IP地址解析成MAC地址的协议。过程很简单:
- 主机A想和主机B通信,但只知道B的IP,不知道B的MAC。
- A发送一个ARP广播请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 同一广播域内的所有设备都会收到这个请求,但只有B会回应:“我是,我的MAC是aa:bb:cc:dd:ee:ff。”
- A把B的IP和MAC对应关系缓存到本地ARP表里,下次直接用。
4.1.2 排查ARP问题的常用命令
排查ARP问题,这几个命令你得烂熟于心:
| 操作系统 | 查看ARP表 | 清除ARP缓存 | 静态绑定ARP |
|---|---|---|---|
| Windows | arp -a |
arp -d |
arp -s IP MAC |
| Linux | arp -n |
ip neigh flush all |
arp -s IP MAC |
| 华为交换机 | display arp |
reset arp all |
arp static IP MAC |
| Cisco交换机 | show arp |
clear arp-cache |
arp IP MAC arpa |
4.2 交换机MAC地址表:转发决策的核心
交换机怎么知道数据该从哪个端口发出去?靠的就是MAC地址表。这张表记录了“MAC地址 → 端口号”的映射关系。交换机收到一个数据帧,会查表决定转发还是泛洪。
4.2.1 MAC地址表的学习与老化
交换机的MAC地址表是动态学习的:
- 学习过程:当设备A从端口1发送数据时,交换机记录下A的MAC地址和端口1的对应关系。
- 转发过程:如果目标MAC地址在表里,交换机直接从对应端口转发(单播)。
- 泛洪过程:如果目标MAC地址不在表里,交换机把数据帧从除接收端口外的所有端口广播出去(泛洪)。
- 老化过程:MAC地址表条目有老化时间(默认300秒),如果一段时间内没收到该MAC的流量,条目会被删除。
排查要点:如果某台设备突然无法通信,先查交换机的MAC地址表。看看有没有学到这台设备的MAC。如果没学到,说明物理链路或端口配置有问题;如果学到了但端口不对,说明可能有环路或MAC地址漂移。
4.2.2 查看MAC地址表的命令
# 华为交换机
display mac-address
# Cisco交换机
show mac address-table
# 查看指定VLAN的MAC表
show mac address-table vlan 10
# 查看指定端口的MAC表
show mac address-table interface GigabitEthernet0/0/1
4.3 VLAN配置与Trunk链路:隔离与互联的艺术
VLAN(虚拟局域网)的作用是把一个物理网络划分成多个逻辑网络。不同VLAN之间默认是不能通信的,这就实现了广播隔离和安全隔离。但有时候,我们又需要让同一VLAN跨越多个交换机——这时候就得靠Trunk链路。
4.3.1 Access端口与Trunk端口的区别
| 端口类型 | 用途 | 处理方式 | 典型场景 |
|---|---|---|---|
| Access端口 | 连接终端设备(PC、服务器) | 只属于一个VLAN,发出帧不带标签 | 办公室PC接入 |
| Trunk端口 | 连接交换机之间、交换机与路由器 | 允许多个VLAN通过,帧带802.1Q标签 | 交换机级联 |
4.3.2 Trunk链路配置示例
配置Trunk链路时,最容易犯的错误就是两端封装协议不一致,或者允许通过的VLAN列表不匹配。我见过太多因为Trunk没配好导致VLAN间通信失败的案例了。
# 华为交换机配置Trunk
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20 30
# Cisco交换机配置Trunk
interface GigabitEthernet0/1
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 10,20,30
port trunk allow-pass vlan 10。记住:Trunk端口默认只允许VLAN 1通过,其他VLAN需要显式放行。
4.4 STP(生成树协议)与环路问题
网络里最怕什么?环路。一旦出现环路,广播帧会在环路里无限转发,最终导致广播风暴,整个网络瘫痪。STP(Spanning Tree Protocol)就是用来解决这个问题的——它通过逻辑上阻塞某些端口,把有环路的物理网络修剪成无环的逻辑树形结构。
4.4.1 STP的工作原理
STP的核心机制是选举:
- 选举根桥:所有交换机中,桥ID(优先级+MAC地址)最小的成为根桥。
- 选举根端口:非根桥上,到达根桥路径开销最小的端口成为根端口。
- 选举指定端口:每条链路上,到达根桥路径开销最小的端口成为指定端口。
- 阻塞剩余端口:既不是根端口也不是指定端口的,被阻塞(Blocking状态)。
这样,环路就被打破了。如果某条链路故障,STP会重新计算,把之前阻塞的端口放开。
4.4.2 STP的端口状态变迁
| 状态 | 说明 | 是否转发数据 | 是否学习MAC |
|---|---|---|---|
| Blocking | 阻塞状态,不转发数据 | 否 | 否 |
| Listening | 监听BPDU,不转发数据 | 否 | 否 |
| Learning | 学习MAC地址,不转发数据 | 否 | 是 |
| Forwarding | 正常转发数据 | 是 | 是 |
| Disabled | 端口被管理员关闭 | 否 | 否 |
4.4.3 环路排查实战
怎么判断网络里有没有环路?几个典型现象:
- 交换机CPU飙升:环路导致大量广播帧,交换机CPU忙于处理,利用率冲到90%以上。
- MAC地址漂移:同一个MAC地址在短时间内出现在不同端口上,交换机会报“MAC address flapping”日志。
- 网络延迟暴增:数据帧在环路里反复转发,延迟从几毫秒飙升到几百毫秒。
- 端口流量异常:某个端口的入方向或出方向流量突然暴涨,远超正常值。
排查命令:
# 查看STP状态
display stp brief
# 查看MAC地址漂移
display mac-address flapping record
# 查看端口流量
display interface GigabitEthernet0/0/1
# 查看日志
display logbuffer
实战案例:有一次,某公司整个办公网络突然瘫痪,所有PC都无法上网。我登录核心交换机,发现CPU利用率99%,日志里全是“MAC address flapping”告警。顺着告警查,发现是一台接入交换机上有人私接了家用路由器,路由器的LAN口和WAN口都接到了交换机上,形成了环路。拔掉那根线,网络立刻恢复。所以,环路问题很多时候是人祸,运维规范一定要做好。
4.5 本章知识体系总览
下面这张图,把数据链路层排查的核心知识点串起来了。你可以把它当作排查时的“作战地图”。