3、数据链路层故障排查:MAC地址表学习机制、交换机VLAN配置错误排查、STP生成树协议导致网络中断、端口安全与环路检测
数据链路层,说白了就是交换机干活的那一层。很多网络工程师一遇到不通,就习惯性去ping网关、查路由,结果折腾半天发现是二层的问题。我个人习惯是,先确认二层通不通,再往上走。这一章咱们就聊聊数据链路层最常见的几个坑。
3.1 MAC地址表学习机制
交换机怎么知道数据该从哪个口出去?靠的就是MAC地址表。这个表记录了每个MAC地址对应哪个端口。交换机收到一个帧,先看源MAC,学下来;再看目的MAC,查表转发。
听起来简单,对吧?但问题往往就出在这个学习过程里。
核心要点:MAC地址表是动态学习的,老化时间默认300秒。如果设备频繁更换端口,或者网络中有环路,MAC表就会乱掉。
我在项目中遇到过这么个事:某公司新装了一批摄像头,结果装完后部分摄像头时通时不通。查了半天,发现是摄像头和交换机之间有个傻瓜交换机,导致MAC地址在两个端口之间反复漂移。嗯,这就是典型的MAC地址漂移问题。
排查步骤
- 查看MAC表:
display mac-address或show mac address-table - 确认漂移:同一个MAC出现在多个端口,基本就是环路或配置错误
- 检查端口:看下对应端口的状态、流量、错误计数
- 清空MAC表:
clear mac-address-table,然后观察重新学习的情况
小技巧:我习惯在核心交换机上开启MAC地址漂移检测告警,一旦有异常立刻知道。命令大概是 mac-address flapping detection,不同厂商略有差异。
3.2 交换机VLAN配置错误排查
VLAN配置错误,可以说是数据链路层最常见的故障原因之一。你想想看,一个VLAN里的设备,怎么都ping不通另一个VLAN的网关,或者同VLAN的设备互相不通,十有八九是VLAN配置出了问题。
常见错误类型
| 错误类型 | 现象 | 排查方向 |
|---|---|---|
| Access端口VLAN配错 | 设备无法获取IP或无法通信 | 检查端口下的 access vlan 配置 |
| Trunk端口允许VLAN遗漏 | 跨交换机同VLAN不通 | 检查 allowed vlan 列表 |
| Native VLAN不一致 | 部分流量异常,甚至环路 | 两端Trunk的native vlan必须一致 |
| VLAN未创建 | 端口配置了不存在的VLAN | show vlan 确认VLAN是否存在 |
我曾经遇到过一个案例:客户说新买的服务器接上去就是不通,但同一台交换机上其他设备都正常。我过去一看,端口配的是VLAN 100,但交换机上根本没创建VLAN 100。你想想看,端口配了一个不存在的VLAN,数据帧根本不知道该往哪走。创建了VLAN之后,问题立刻解决。
注意:Trunk端口两端的Native VLAN必须一致,否则会产生二层环路。我曾经见过一个网络,就因为一端Native VLAN是1,另一端是99,结果整个网络广播风暴,差点把核心交换机打挂。
3.3 STP生成树协议导致网络中断
STP本来是为了防止环路而设计的,但有时候它自己反而成了故障的源头。嗯,这里要注意,STP的收敛过程需要时间,如果网络拓扑频繁变化,就会导致间歇性断网。
STP故障的典型场景
- 端口反复UP/DOWN:导致STP不断重新计算,网络时断时续
- 根桥选举异常:优先级配置不当,导致次优路径成为根桥
- 端口角色错误:应该阻塞的端口变成了转发状态
- STP与RSTP混用:不同STP模式之间兼容性差
我记得有一次,一个工厂的网络每到整点就断几秒钟。查了日志发现,是某台交换机的端口在整点时因为某种原因重启,触发STP重新计算。后来发现是那个端口连接的设备电源不稳定,换了电源就好了。
排查命令
# 查看STP状态
display stp brief
show spanning-tree
# 查看根桥信息
display stp root
show spanning-tree root
# 查看端口角色
display stp interface gigabitethernet 0/0/1
show spanning-tree interface gigabitethernet 0/0/1
我的建议:在核心交换机上手动指定根桥,把优先级设低一点(比如4096),避免根桥漂移。另外,把接入层交换机的边缘端口开启PortFast,让接入设备不用等STP收敛。
3.4 端口安全与环路检测
端口安全和环路检测,这两个功能是保护二层网络的重要手段。但配置不当的话,它们也会成为故障源。
端口安全
端口安全的作用是限制一个端口上能学习的MAC地址数量。比如你只允许一个MAC地址通过,那如果有人私接交换机,就会触发安全策略,端口被shutdown。
我在项目中遇到过:某办公室突然断网,过去一看,端口被err-disable了。查了日志,是端口安全触发了。原来是有员工自己带了个小交换机,想多接几台电脑。嗯,端口安全确实起到了作用,但问题是业务也断了。
避坑指南:我曾经吃过亏,端口安全配置了restrict模式,结果端口没关,但不停发告警,把日志刷爆了。后来我改用shutdown模式,配合恢复机制,既安全又可控。
环路检测
环路检测(Loop Detection)是交换机自带的防环机制。它通过发送检测帧,如果发现同一个帧从其他端口回来了,就判定有环路,然后阻塞端口。
环路检测和STP的区别在于:STP是主动防环,环路检测是被动发现。我个人建议,在接入层交换机上同时开启这两个功能,双重保险。
配置示例
# 端口安全配置(华为)
interface gigabitethernet 0/0/1
port-security enable
port-security max-mac-num 2
port-security protect-action shutdown
port-security recovery-time 300
# 环路检测配置(华为)
loopback-detect enable
interface gigabitethernet 0/0/1
loopback-detect enable
loopback-detect action shutdown
注意:环路检测和STP可能会冲突。如果同时开启,要确保它们的优先级和动作不矛盾。我一般建议,核心层用STP,接入层用环路检测,各司其职。
知识体系总览
下面这张图,是我梳理的数据链路层故障排查的核心逻辑。你可以把它当作一个检查清单,遇到二层问题,按这个思路走一遍,基本能定位到根因。
数据链路层的故障排查,说白了就是一层一层剥洋葱。先从MAC表看有没有学到地址,再确认VLAN配置对不对,然后看STP有没有异常,最后检查端口安全和环路检测有没有误触发。按照这个顺序来,大部分问题都能快速定位。
嗯,这一章的内容就到这里。记住,二层是三层的基础,二层不通,三层再好的路由协议也白搭。下次遇到网络不通,先别急着查路由,从MAC表开始看起。