首页/网络/网络排障速查/与正常基线对比(Diff 排障法)
排查流程与方法36 条

与正常基线对比(Diff 排障法)

手头没有思路时,找一台「同角色正常设备」逐项对比:地址、路由、DNS 配置、内核参数、抓包特征,差异点就是嫌疑点。

网络排障速查网络更新于 2026-10-13

Diff 排障为什么有效

网络配置的「正确」很少能凭直觉判断,多数时候是靠与已知正常值一致来定义的。找一台角色相同、版本一致的正常设备做基线,逐项比对地址、路由、解析配置、内核参数、命令输出与抓包特征,差异点自然成为嫌疑点。这个方法特别适合两类场景:曾经正常却突然异常,以及集群里一台坏一台好。

基本信息

为什么有效配置正确性靠与正常值一致来定义,差异直接缩小排查范围
对比维度配置文本、命令输出、抓包特征、性能计数器
前提基线机与问题机的版本、角色、承载业务尽量一致
工具标准输出重定向加 diff,或用配置管理系统的期望状态
结论要求每条差异必须单独验证因果,不能一次性全部改掉

典型使用场景

  • 集群中单台节点异常:与健康节点逐项对比找出差异
  • 变更后功能异常:把变更前后的配置快照做 diff
  • 内核参数相关的问题:对比两台机器的网络参数取值
  • 抓包特征对比:比较正常连接与异常连接的握手与窗口差异
  • 接管陌生环境:先采集基线,后续问题都有参照

配置与状态对比(Linux)

配置与状态对比(Linux)
ssh good-host 'ip -br a; ip route; cat /etc/resolv.conf' > /tmp/baseline.txt
ip -br a; ip route; cat /etc/resolv.conf > /tmp/current.txt
diff -u /tmp/baseline.txt /tmp/current.txt
# 连接与监听状态对比:
ss -lnt > /tmp/listen.current; ssh good-host 'ss -lnt' > /tmp/listen.good
diff -u /tmp/listen.good /tmp/listen.current

内核网络参数对比

内核网络参数对比
sysctl -a 2>/dev/null | grep -E 'net.ipv4|net.core' | sort > /tmp/sysctl.current
ssh good-host "sysctl -a 2>/dev/null | grep -E 'net.ipv4|net.core' | sort" > /tmp/sysctl.good
diff -u /tmp/sysctl.good /tmp/sysctl.current
ethtool -k eth0 > /tmp/offload.current; ethtool eth0 | head -5 >> /tmp/offload.current   # 链路与卸载差异

对比维度与产出

维度采集方式典型差异点
地址与路由ip -br a 与 ip route缺默认路由、掩码不同
解析配置resolv.conf 与 resolved 状态指向不同 DNS 或搜索域缺失
监听与连接ss -lnt 与状态统计服务未监听或队列参数不同
内核参数sysctl 网络相关项队列上限、保活与复用开关
链路与卸载ethtool 与错误计数速率双工差异、卸载开关不同
抓包特征两端抓包比对MTU、TOS 与重传行为差异
对比法对「曾经正常、突然异常」和集群里「一台坏一台好」的场景效果最好,因为基线天然具备可比性。
把差异一次性全部改平是危险做法:多个变量同时变化后,既无法确认根因,也无法回滚,建议一次只改一项并立即验证。

易错点

  • 拿不同版本或不同角色的机器做基线,比对出一堆无关差异反而误导方向
  • 对比出的差异直接全部「修平」,失去定位根因与回归验证的机会
  • 只对比配置文本不对比运行时状态:配置一致但内核参数或链路状态不同很常见
  • 差异结论不记录:改动后无法回溯是哪一项解决了问题

数据来源与参考

  • Linux 运维实践:基线对比法
  • sysctl 手册:内核参数查询

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌