3、链路层排查:MAC地址、ARP表、交换机端口状态、VLAN配置
链路层,说白了就是数据链路层,是网络通信的第二层。很多连接断开的问题,其实都卡在这一层。我见过太多人一上来就抓包、看路由,结果折腾半天,最后发现是交换机端口没起来,或者VLAN配错了。
这一章,咱们就聚焦在链路层的四个核心要素:MAC地址、ARP表、交换机端口状态、VLAN配置。把这四个点吃透了,至少一半的“断连”问题你都能快速定位。
3.1 MAC地址:设备在局域网里的“身份证”
MAC地址是48位的硬件地址,出厂就烧死在网卡里。理论上全球唯一。但注意,我说的是“理论上”。
排查MAC地址时,我习惯先确认两件事:
- 设备是否真的在线? 用
ping或者直接看交换机上的MAC表。 - MAC地址是否被欺骗? 同一个MAC出现在两个不同端口,基本就是ARP攻击或环路。
查看本机MAC地址,Windows用 ipconfig /all,Linux用 ip link show 或 ifconfig。嗯,这里要注意,ifconfig 在一些新系统上已经没了,建议用 ip 命令。
# Linux 查看 MAC 地址
ip link show eth0
# 输出示例:
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
# link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
看到 state UP 和 link/ether 后面的地址,就对了。
3.2 ARP表:IP地址和MAC地址的“翻译官”
ARP(地址解析协议)负责把IP地址翻译成MAC地址。如果ARP表出问题,设备之间就“鸡同鸭讲”,根本通不了。
我曾经遇到过一个案例:某台服务器能ping通网关,但就是访问不了外网。查了半天,发现ARP表里网关的MAC地址指向了一台不存在的设备。说白了,就是ARP缓存中毒了。
排查ARP表,我一般分三步走:
- 第一步:清空ARP缓存。 Windows用
arp -d *,Linux用ip neigh flush all。清完再试,看问题是否复现。 - 第二步:检查ARP表项。 用
arp -a(Windows)或ip neigh show(Linux)。看目标IP对应的MAC地址是否合理。 - 第三步:抓包确认。 如果怀疑ARP攻击,用Wireshark抓ARP包,看有没有大量重复或异常的ARP请求/应答。
3.3 交换机端口状态:物理层通了,链路层才能通
端口状态是最直观的排查点。你想想看,如果端口都down了,那后面的一切都是白搭。
登录交换机,用 show interfaces status 或 show interfaces description 查看端口状态。重点关注 Status 和 Protocol 两列。
| 状态 | 含义 | 常见原因 |
|---|---|---|
| up/up | 端口正常,链路层通 | 无 |
| down/down | 物理层不通 | 网线没插好、对端设备关机、光模块故障 |
| up/down | 物理层通,但链路层不通 | 封装不匹配、VLAN不匹配、STP阻塞 |
| err-disabled | 端口被错误禁用 | 检测到环路、端口安全违规、UDLD检测失败 |
我个人习惯,看到 down/down 先换根网线试试。别笑,我遇到过好几次,折腾半天,最后发现是网线头没压好。
如果是 up/down,那就要查协议层面的问题了。最常见的就是两端VLAN配置不一致,或者STP(生成树协议)在收敛。
3.4 VLAN配置:逻辑隔离的“隐形墙”
VLAN(虚拟局域网)把一台物理交换机切成多个逻辑网络。配置错了,设备就在同一个交换机上,也互相看不见。
排查VLAN配置,我一般按这个顺序来:
- 确认端口所属VLAN。 用
show vlan brief或show interfaces switchport。看端口是Access口还是Trunk口,所属VLAN ID是多少。 - 检查Trunk链路。 Trunk口要允许所有需要的VLAN通过。用
show interfaces trunk查看。我曾经犯过一个低级错误:Trunk口忘了允许VLAN 10,结果VLAN 10里的设备全都不通。 - 验证VLAN间路由。 如果不同VLAN要互通,需要三层交换机或路由器做VLAN间路由。检查SVI(交换虚拟接口)是否配置了IP,并且状态是up。
下面这张图,是我自己总结的链路层排查流程,你可以照着走一遍。
3.5 实战案例:一个典型的VLAN配置错误
有一次,客户反馈说新部署的20台监控摄像头,全部无法上线。网络拓扑很简单:摄像头接接入交换机,接入交换机通过Trunk连到核心交换机,核心交换机做VLAN间路由。
我登录接入交换机,先看端口状态:show interfaces status,所有摄像头端口都是 up/up。嗯,物理层没问题。
再看MAC地址表:show mac address-table,发现摄像头端口的MAC地址都学不到。奇怪了,端口是up的,为什么学不到MAC?
我仔细一看,发现摄像头端口被划到了VLAN 100,但Trunk口只允许了VLAN 1, 10, 20。说白了,VLAN 100的流量根本过不去。
修正Trunk口配置,允许VLAN 100通过,摄像头立刻全部上线。
switchport trunk allowed vlan add 而不是 switchport trunk allowed vlan all。前者更安全,不会误放行不该通的VLAN。
链路层排查,说白了就是“看表、看状态、看配置”。MAC表、ARP表、端口状态、VLAN配置,这四个点串起来,就是一条完整的排查链路。你按这个思路走,大部分二层问题都能快速解决。