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/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 分层排查法
从物理层开始,逐层向上验证。每验证一层没问题,就往上走一层。这就像修房子,地基不稳就别谈装修。
- 物理层:看指示灯、测线缆、检查接口状态。
- 数据链路层:检查MAC地址、ARP表、VLAN配置。
- 网络层:ping测试、路由追踪、检查IP配置。
- 传输层:telnet端口、检查TCP三次握手、看抓包中的SYN/ACK。
- 应用层:检查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是你的眼睛。从今天开始,遇到网络问题别急着重启,先想想——问题出在哪一层?