3. 诊断工具链与数据采集方法

网络层排错,说白了就是跟 IP 地址、路由表和路由协议打交道。很多刚入行的兄弟觉得这层最抽象,抓包也看不懂。我做了十几年网络,踩过的坑比走过的桥还多。今天咱们就聊聊网络层那些让人头疼的问题,怎么快速定位,怎么彻底解决。

核心观点:网络层排错的核心是“三层可达性”。只要 IP 地址配对了,路由表写对了,数据包就能找到路。否则,一切上层应用都是空中楼阁。

3.1 IP地址规划与子网掩码错误

IP 地址规划是网络设计的第一步,也是最容易出低级错误的地方。我见过太多因为子网掩码写错导致全网瘫痪的案例。

3.1.1 常见错误类型

  • 子网掩码不匹配:同一网段的两台设备,掩码不一致,导致它们认为对方不在同一个广播域。
  • IP 地址冲突:两台设备配置了相同的 IP,ARP 表会反复震荡,丢包是家常便饭。
  • 默认网关错误:网关 IP 写错了,或者网关设备没配回程路由,数据包有去无回。
  • VLAN 与子网对应错误:VLAN 10 配了 192.168.10.0/24,结果交换机端口划到了 VLAN 20,设备能获取 IP 但出不去。

3.1.2 排错方法论

遇到 IP 地址相关的问题,我习惯按这个顺序查:

  1. 检查本机配置:ipconfig(Windows)或 ifconfig(Linux),确认 IP、掩码、网关是否正确。
  2. 验证同网段通信:Ping 一下网关,如果不通,大概率是二层问题或 IP 冲突。
  3. 检查 ARP 表:arp -a 看看网关的 MAC 地址是否正常。如果 MAC 地址一直在变,说明有 IP 冲突。
  4. 跨网段测试:Ping 远端 IP,如果不通,检查路由表和网关配置。

避坑指南:我曾经在一个数据中心项目里,所有服务器都配了 /24 的掩码,但核心交换机上用的是 /16。结果服务器之间通信时,数据包直接扔给了网关,网关又扔回来,形成了路由环路。排查了整整一天,最后发现是掩码不一致导致的。从那以后,我要求所有设备必须使用统一的掩码规划。

3.2 路由表分析与静态路由配置

路由表是网络层的核心。数据包怎么走,全看路由表怎么说。我经常跟团队说:“路由表就是网络的地图,地图错了,车肯定到不了目的地。”

3.2.1 路由表结构解析

一条典型的路由条目包含以下字段:

字段 说明 排错关注点
目标网络 目的 IP 地址范围 是否包含目标主机
下一跳 数据包要发给谁 下一跳是否可达
出接口 从哪个接口发出去 接口是否 up
路由优先级 直连 < 静态 < OSPF < BGP 是否存在更优路由
度量值 到达目标的“距离” 是否选择了最优路径

3.2.2 静态路由配置排错

静态路由配置简单,但容易出错。常见的坑有:

  • 下一跳不可达:下一跳 IP 没有直连路由,或者对端设备没配回程。
  • 出接口错误:指定了错误的出接口,导致数据包从错误的端口发出。
  • 路由黑洞:汇总路由覆盖了不存在的子网,导致数据包被丢弃。

注意:配置静态路由时,我建议尽量使用“下一跳 IP”而不是“出接口”。因为如果出接口是广播型接口(如以太网),路由器需要先做 ARP 解析,增加了排错复杂度。用下一跳 IP 更直观,也更容易排查。

3.2.3 路由表排错实战

假设你 Ping 不通远端 10.1.1.1,可以按以下步骤排查:

  1. 查看路由表:show ip route(Cisco)或 ip route(Linux),确认是否有到 10.1.1.0/24 的路由。
  2. 检查下一跳:Ping 下一跳 IP,如果不通,检查直连链路。
  3. 跟踪路径:用 traceroute 看数据包走到哪一步断了。
  4. 检查回程路由:很多时候是回程路由没配,数据包能去不能回。

经验之谈:我记得有一次,客户说两个分公司之间 VPN 不通。我查了路由表,发现去程路由没问题,但回程路由指向了错误的下一跳。原因是分公司 A 的静态路由写的是分公司 B 的出口 IP,但分公司 B 的出口 IP 已经变更了。这种问题,用 traceroute 一看就明白了。

3.3 动态路由协议(OSPF/BGP)邻居故障

动态路由协议比静态路由复杂得多。邻居关系建立不起来,是排错的重灾区。我见过最离谱的一次,是 OSPF 邻居因为 MTU 不匹配,卡在 ExStart 状态整整两天。

3.3.1 OSPF 邻居故障排错

OSPF 邻居状态机有 8 个状态,排错时重点关注以下几个:

状态 含义 常见故障原因
Down 未收到任何 Hello 包 接口 down、ACL 过滤、Hello 间隔不匹配
Init 收到 Hello,但未看到自己 单播邻居配置错误、网络类型不匹配
2-Way 双向通信建立 正常,但 DR/BDR 选举可能有问题
ExStart/Exchange 正在交换 DD 报文 MTU 不匹配、Router ID 冲突
Loading 正在同步 LSA 网络拥塞、LSDB 过大
Full 邻接关系建立 正常

排错命令:show ip ospf neighbor 查看邻居状态;debug ip ospf adj 查看邻居建立过程。注意,生产环境慎用 debug,会撑爆 CPU。

3.3.2 BGP 邻居故障排错

BGP 邻居故障比 OSPF 更隐蔽,因为 BGP 是基于 TCP 的。TCP 连接都建立不起来,BGP 邻居肯定起不来。

  • TCP 连接问题:检查是否能 Telnet 对端的 BGP 端口(179)。如果不通,检查 ACL、防火墙规则。
  • Update-Source 错误:BGP 更新源必须是建立 TCP 连接的接口 IP。如果用了 Loopback 接口,必须配置 update-source。
  • EBGP 多跳问题:EBGP 默认 TTL 为 1,如果邻居不是直连,需要配置 ebgp-multihop。
  • AS 号错误:对端配置的 AS 号与本地期望的不一致,邻居会卡在 Active 状态。

我曾经踩过的坑:有一次配置 BGP 联邦,两个子 AS 之间建立 EBGP 邻居,结果一直卡在 Active 状态。查了半天,发现是联邦 ID 配置错了。BGP 的排错,一定要先确认 TCP 通不通,再查 BGP 配置。顺序错了,容易走弯路。

3.4 ICMP协议与Ping/Traceroute排错

ICMP 是网络层排错最常用的工具。Ping 和 Traceroute 都基于 ICMP,但很多人只会用,不会看结果。

3.4.1 Ping 的排错技巧

Ping 不通,不代表网络一定有问题。ICMP 报文可能被防火墙过滤,或者被限速。我习惯用以下方法判断:

  • Ping 回环地址:ping 127.0.0.1,确认本机协议栈正常。
  • Ping 本机 IP:确认网卡和 IP 配置正常。
  • Ping 网关:确认二层链路和 ARP 正常。
  • Ping 远端 IP:确认三层路由正常。

如果 Ping 远端不通,但网关能通,问题大概率在路由或 ACL 上。

3.4.2 Traceroute 的排错技巧

Traceroute 利用 TTL 超时机制,逐跳显示路径。排错时重点关注:

  • 哪一跳开始超时:如果第 3 跳超时,问题可能在第 3 跳设备或链路上。
  • 路径不对称:去程和回程路径不一致,可能导致防火墙丢包。
  • 星号(*)过多:可能是设备不响应 ICMP 超时报文,或者链路有丢包。

实战案例:有一次客户反馈访问某网站慢。我用 traceroute 一看,发现数据包绕了半个中国,走了 20 多跳。正常路径应该只有 5 跳。后来发现是 BGP 路由选路出了问题,导致流量走了备份链路。调整了 BGP 的 Local Preference 后,问题解决。

3.5 本章知识体系图

下面这张图总结了网络层排错的核心逻辑,从 IP 地址规划到路由协议,再到 ICMP 工具的使用。建议你保存下来,排错时对照着看。

网络层排错知识体系 IP地址规划与子网掩码 路由表分析与静态路由 动态路由协议(OSPF/BGP) ICMP协议与Ping/Traceroute 排错方法论:从底层到上层,逐层排查 排错核心原则 1. 先确认物理层和链路层正常(接口 up、ARP 正确) 2. 再检查网络层(IP 配置、路由表、路由协议邻居) 3. 最后用 Ping/Traceroute 验证路径和连通性

3.6 本章小结

网络层排错,说白了就是三件事:IP 地址对不对、路由表准不准、路由协议稳不稳。掌握了这三块,再配合 Ping 和 Traceroute 这两个工具,大部分问题都能在 10 分钟内定位。

嗯,这里要提醒一句:排错时别急着动配置。先看现象,再分析原因,最后动手改。我见过太多人一上来就改路由、重启设备,结果问题没解决,反而搞出了新故障。