3、链路层排查:MAC地址、ARP表、交换机端口状态、VLAN配置

链路层,说白了就是数据链路层,是网络通信的第二层。很多连接断开的问题,其实都卡在这一层。我见过太多人一上来就抓包、看路由,结果折腾半天,最后发现是交换机端口没起来,或者VLAN配错了。

这一章,咱们就聚焦在链路层的四个核心要素:MAC地址、ARP表、交换机端口状态、VLAN配置。把这四个点吃透了,至少一半的“断连”问题你都能快速定位。

3.1 MAC地址:设备在局域网里的“身份证”

MAC地址是48位的硬件地址,出厂就烧死在网卡里。理论上全球唯一。但注意,我说的是“理论上”。

注意:很多虚拟化环境(VMware、Hyper-V)和容器(Docker)会随机生成MAC地址。如果你发现一台设备的MAC地址频繁变化,别慌,先看看是不是虚拟网卡。

排查MAC地址时,我习惯先确认两件事:

  1. 设备是否真的在线? 用 ping 或者直接看交换机上的MAC表。
  2. 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请求/应答。
小技巧: 在交换机上配置动态ARP检测(DAI),可以有效防止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配置,我一般按这个顺序来:

  1. 确认端口所属VLAN。 用 show vlan brief 或 show interfaces switchport。看端口是Access口还是Trunk口,所属VLAN ID是多少。
  2. 检查Trunk链路。 Trunk口要允许所有需要的VLAN通过。用 show interfaces trunk 查看。我曾经犯过一个低级错误:Trunk口忘了允许VLAN 10,结果VLAN 10里的设备全都不通。
  3. 验证VLAN间路由。 如果不同VLAN要互通,需要三层交换机或路由器做VLAN间路由。检查SVI(交换虚拟接口)是否配置了IP,并且状态是up。
核心原则: 同一VLAN内的通信,靠MAC地址表;不同VLAN间的通信,靠三层路由。如果同一VLAN不通,查MAC和ARP;如果不同VLAN不通,查VLAN间路由。

下面这张图,是我自己总结的链路层排查流程,你可以照着走一遍。

链路层排查流程图 链路层排查流程图 链路层不通 1. 检查交换机端口状态 up? 是 2. 检查MAC地址表 否 排查物理层/网线 有? 是 3. 检查ARP表 否 设备未发送数据帧 正确? 是 4. 检查VLAN配置 否 ARP欺骗/缓存问题 正确? 是 链路层正常 否 修正VLAN/Trunk配置 说明:按流程从上到下排查,每一步都确认无误后再进入下一步,避免遗漏。

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通过,摄像头立刻全部上线。

经验之谈: 配置Trunk口时,我习惯用 switchport trunk allowed vlan add 而不是 switchport trunk allowed vlan all。前者更安全,不会误放行不该通的VLAN。

链路层排查,说白了就是“看表、看状态、看配置”。MAC表、ARP表、端口状态、VLAN配置,这四个点串起来,就是一条完整的排查链路。你按这个思路走,大部分二层问题都能快速解决。