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地址的协议。过程很简单:

  1. 主机A想和主机B通信,但只知道B的IP,不知道B的MAC。
  2. A发送一个ARP广播请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
  3. 同一广播域内的所有设备都会收到这个请求,但只有B会回应:“我是,我的MAC是aa:bb:cc:dd:ee:ff。”
  4. A把B的IP和MAC对应关系缓存到本地ARP表里,下次直接用。
我的经验:ARP表是有老化时间的,默认一般是120秒到300秒。如果网络里频繁出现“间歇性断连”,十有八九是ARP表老化后重新学习时出了问题。我习惯先看一眼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
避坑指南:我曾经遇到过一个案例,某台服务器突然无法访问外网,查了一圈发现是ARP表里网关的MAC地址被篡改了——典型的ARP欺骗攻击。所以,关键设备的IP-MAC绑定,我建议做成静态的,别依赖动态学习。

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
避坑指南:我曾经处理过一个故障,两台交换机之间Trunk链路配好了,但VLAN 10就是不通。查了半天,发现是其中一台交换机的Trunk端口上忘了配port trunk allow-pass vlan 10。记住:Trunk端口默认只允许VLAN 1通过,其他VLAN需要显式放行。

4.4 STP(生成树协议)与环路问题

网络里最怕什么?环路。一旦出现环路,广播帧会在环路里无限转发,最终导致广播风暴,整个网络瘫痪。STP(Spanning Tree Protocol)就是用来解决这个问题的——它通过逻辑上阻塞某些端口,把有环路的物理网络修剪成无环的逻辑树形结构。

4.4.1 STP的工作原理

STP的核心机制是选举:

  1. 选举根桥:所有交换机中,桥ID(优先级+MAC地址)最小的成为根桥。
  2. 选举根端口:非根桥上,到达根桥路径开销最小的端口成为根端口。
  3. 选举指定端口:每条链路上,到达根桥路径开销最小的端口成为指定端口。
  4. 阻塞剩余端口:既不是根端口也不是指定端口的,被阻塞(Blocking状态)。

这样,环路就被打破了。如果某条链路故障,STP会重新计算,把之前阻塞的端口放开。

4.4.2 STP的端口状态变迁

状态 说明 是否转发数据 是否学习MAC
Blocking 阻塞状态,不转发数据 否 否
Listening 监听BPDU,不转发数据 否 否
Learning 学习MAC地址,不转发数据 否 是
Forwarding 正常转发数据 是 是
Disabled 端口被管理员关闭 否 否
我的经验:STP收敛时间比较长(30-50秒),这在生产环境里是致命的。所以我建议用RSTP(快速生成树协议)或MSTP(多生成树协议),收敛时间可以缩短到1-2秒。另外,如果网络里出现频繁的端口震荡(Flapping),STP会反复计算,导致网络时断时续。这时候别急着调STP参数,先查物理链路和光模块。

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 本章知识体系总览

下面这张图,把数据链路层排查的核心知识点串起来了。你可以把它当作排查时的“作战地图”。

数据链路层排查知识体系 数据链路层排查知识体系 数据链路层排查 MAC地址与ARP协议 交换机MAC地址表 VLAN与Trunk链路 STP与环路问题 ARP请求/应答 ARP缓存表 ARP欺骗攻击 静态ARP绑定 MAC学习 MAC老化 MAC漂移 泛洪与单播 Access端口 Trunk端口 802.1Q标签 Native VLAN 根桥选举 端口状态 RSTP/MSTP 环路检测 排查口诀:先查MAC表,再看ARP;VLAN配Trunk,环路找STP 排查流程建议 1. 确认物理链路正常(端口状态、光模块、线缆) 2. 查看交换机MAC地址表,确认设备MAC是否被学习到 3. 检查ARP表,确认IP-MAC映射是否正确 4. 验证VLAN配置和Trunk链路是否一致 5. 检查STP状态,确认是否有环路或端口阻塞