1. 故障应急总览:协议栈故障分类、应急响应流程、故障排查工具箱概览

网络协议栈出问题,说白了就是数据从应用层到物理层的某一段“卡住了”。我干了十几年网络运维,见过最离谱的一次——整个公司断网两小时,最后发现是网线被老鼠咬了一半。嗯,从那以后我再也不敢小看物理层。

这一章咱们先搭个框架。你得知道故障分几类、出了事先干嘛、手头该备什么工具。别一上来就抓包,先想清楚方向。

1.1 协议栈故障分类

我个人习惯把故障按OSI七层模型分层归类。这样定位快,也方便团队协作。你想想看,应用层报错和链路层丢包,排查思路完全不一样。

故障层 典型表现 常见原因
应用层 (L7) HTTP 500、DNS解析失败、SSL握手超时 配置错误、证书过期、后端服务挂掉
传输层 (L4) TCP重传率高、连接超时、端口不可达 防火墙拦截、队列溢出、MTU问题
网络层 (L3) 路由黑洞、ICMP不可达、TTL超时 路由表错误、BGP策略、环路
链路层 (L2) MAC地址冲突、STP震荡、CRC错误 环路、网卡故障、线缆质量差
物理层 (L1) 端口down、光衰过大、信号干扰 光模块损坏、线缆断裂、电源问题

核心原则:从底层往上查,先确认物理层和链路层通不通,再谈上层协议。我见过太多人一上来就分析应用日志,结果发现网线都没插好。

1.2 应急响应流程

故障来了别慌。我总结了一个“三分钟止血法”,团队里用了好几年,效果不错。

  1. 确认影响范围——是单点还是全网?用户还能不能访问?
  2. 快速回滚或隔离——如果是变更导致的,先回滚。别纠结根因,先恢复业务。
  3. 收集现场信息——抓包、日志、计数器。记住,重启前一定要留证据。
  4. 分层定位——按1.1节的分类,逐层排除。
  5. 修复验证——改完配置要验证,别留尾巴。

我曾经踩过的坑:有一次线上故障,我直接重启了核心交换机。结果问题确实消失了,但重启后日志全没了,根本查不到根因。后来发现是某个模块的固件bug,重启只是暂时缓解。所以——重启前,先抓包、存日志、拍下当前状态。

1.3 故障排查工具箱概览

工具不在多,在于精。我平时随身带的就这几样,覆盖了从L1到L7的排查需求。

工具 适用层 常用场景
ping / fping L3 快速检测连通性、丢包率
traceroute / mtr L3 定位路径中的跳数和延迟
tcpdump / Wireshark L4-L7 抓包分析重传、握手、应用协议
ss / netstat L4 查看端口监听、连接状态
ip / ifconfig L2-L3 查看接口状态、IP配置、路由表
ethtool L1-L2 查看网卡速率、双工、CRC错误
curl / wget L7 模拟HTTP请求,测试应用层响应

我的小习惯:写一个简单的排查脚本,把常用的命令串起来。比如先ping网关、再traceroute目标、然后ss看端口、最后curl测试。一键执行,省时间。

1.4 故障排查逻辑图

下面这张图是我自己画的排查逻辑。每次出问题,我就按这个流程走一遍,基本不会漏。

协议栈故障排查逻辑图 协议栈故障排查逻辑图 收到故障告警 确认影响范围 快速恢复 / 回滚 收集现场信息 分层定位(L1→L7) 修复并验证 提示:每一步都要记录时间点和操作,方便事后复盘

1.5 避坑指南

  • 别信直觉,信数据。 我曾经凭经验判断是DNS问题,折腾了半小时,结果tcpdump一看,是网卡协商成了10M半双工。
  • 抓包要抓对方向。 在客户端和服务端同时抓,对比看。单端抓包容易漏信息。
  • 别忽略时间戳。 很多故障是间歇性的,没有时间戳你根本对不上号。
  • 变更记录要留好。 我见过最坑的一次,运维同事凌晨改了防火墙规则没通知,第二天全组排查了三个小时。

一句话总结:故障排查不是技术活,是逻辑活。按流程走,用工具说话,别拍脑袋。