1. 网络故障排查基础:OSI七层模型与TCP/IP协议栈

做网络故障排查这么多年,我最大的体会是:不懂分层,就没法下手。你想想看,一个网络故障可能出在网线、交换机、防火墙、应用服务器,甚至代码逻辑里。没有分层思维,你就像在黑夜里摸象。

1.1 OSI七层模型——网络世界的「分层地图」

OSI七层模型是国际标准化组织(ISO)在1984年提出的。虽然实际生产中我们更多用TCP/IP四层模型,但OSI的思维框架至今仍是排查故障的「底层操作系统」。

层级 名称 核心职责 典型协议/设备
7 应用层 为用户应用提供网络服务 HTTP、FTP、SMTP、DNS
6 表示层 数据格式转换、加密、压缩 SSL/TLS、JPEG、ASCII
5 会话层 建立、管理、终止会话 NetBIOS、RPC
4 传输层 端到端可靠传输、流量控制 TCP、UDP
3 网络层 路由选择、逻辑寻址 IP、ICMP、路由器
2 数据链路层 帧封装、MAC寻址、差错检测 以太网、交换机、ARP
1 物理层 比特流传输、电气特性 网线、光纤、集线器
我的习惯:排查故障时,我总在心里默念「从下往上查」。物理层不通,上面再折腾也没用。有一次客户说「网页打不开」,我直接去机房一看——交换机电源灯都没亮。嗯,这就是典型的物理层问题。

1.2 TCP/IP协议栈——实战中的「四层架构」

OSI太理论了,实际互联网跑的是TCP/IP四层模型。说白了,就是把OSI的上三层合并成「应用层」,把物理层和数据链路层合并成「网络接口层」。

TCP/IP四层模型 vs OSI七层模型 对应关系 TCP/IP 四层模型 应用层 HTTP / DNS / FTP 传输层 TCP / UDP 网络层 IP / ICMP 网络接口层 以太网 / ARP OSI 七层模型 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 排查原则:从物理层开始,逐层向上验证,不要跳层

核心要点:抓包分析主要工作在传输层(TCP/UDP)和应用层(HTTP/DNS等)。你抓到的每一个数据包,都包含了从网络接口层到应用层的完整封装信息。

1.3 网络故障分类——先搞清楚「敌人」是谁

我个人习惯把网络故障分成三大类。这样一分类,排查方向就清晰多了。

  • 连通性故障:ping不通、连不上、丢包。说白了就是「路不通」。
  • 性能故障:慢、卡、延迟高、吞吐量低。路是通的,但堵车。
  • 应用层故障:网页打不开、认证失败、数据乱码。路通了也不堵,但车上的货有问题。
故障类型 典型现象 常见原因 排查工具
连通性故障 ping超时、TCP连接失败 网线松动、IP配置错误、防火墙拦截 ping、traceroute、telnet
性能故障 页面加载慢、视频卡顿 带宽不足、TCP重传、DNS解析慢 Wireshark、iperf、mtr
应用层故障 HTTP 500、SSL握手失败 代码bug、证书过期、协议不兼容 Wireshark、curl、浏览器DevTools
避坑指南:我曾经遇到一个案例,用户说「网络特别慢」,我查了三天带宽、路由、DNS都没问题。最后发现是网线水晶头接触不良,偶尔丢包导致TCP频繁重传。所以,别轻视物理层,它往往是「隐形杀手」。

1.4 排查思路与方法论——我的「三板斧」

做网络故障排查,最怕的就是「乱枪打鸟」。我总结了一套方法论,这些年帮我解决了不少疑难杂症。

1.4.1 分层排查法

从物理层开始,逐层向上验证。每验证一层没问题,就往上走一层。这就像修房子,地基不稳就别谈装修。

  1. 物理层:看指示灯、测线缆、检查接口状态。
  2. 数据链路层:检查MAC地址、ARP表、VLAN配置。
  3. 网络层:ping测试、路由追踪、检查IP配置。
  4. 传输层:telnet端口、检查TCP三次握手、看抓包中的SYN/ACK。
  5. 应用层:检查HTTP状态码、DNS解析、SSL证书。

1.4.2 抓包对比法

这是我最常用的方法。抓一次正常的包,再抓一次故障的包,对比差异。你想想看,正常的三次握手是SYN→SYN+ACK→ACK,如果只有SYN没有ACK,那问题大概率在防火墙或服务器端。

我的经验:抓包时一定要同时抓客户端和服务端两侧的包。有一次我只抓了客户端,发现TCP重传很多,以为是服务器问题。结果抓了服务端才发现,是中间防火墙把某些包丢了。单侧抓包容易「误判」。

1.4.3 排除法

把可能的原因列出来,一个一个排除。比如网页打不开,先排除DNS(nslookup),再排除连通性(ping),再排除端口(telnet),最后看应用层。

# 我的标准排查命令序列
ping 目标IP                    # 检查网络层连通性
traceroute 目标IP              # 检查路由路径
telnet 目标IP 80               # 检查传输层端口
curl -v http://目标IP          # 检查应用层响应
nslookup 域名                  # 检查DNS解析

1.5 抓包分析在故障排查中的定位

抓包分析不是万能的,但它能告诉你「到底发生了什么」。很多故障,日志里看不到,监控里查不到,但抓包一看就明白了。

  • 什么时候该抓包?——当现象明确但原因不明时。比如「能ping通但网页打不开」。
  • 抓包能解决什么问题?——TCP重传、丢包、延迟、协议错误、应用层异常。
  • 抓包不能解决什么问题?——硬件损坏(但能帮你定位到哪一层)。

一句话总结:网络故障排查的核心是「分层思维+抓包验证」。OSI七层是你的地图,Wireshark是你的眼睛。从今天开始,遇到网络问题别急着重启,先想想——问题出在哪一层?