网络排障实战:当网页打不开时如何用Wireshark进行全链路诊断
当办公室突然有人喊"网站打不开了",作为技术人员的你会怎么做?直接重启电脑?刷新页面?还是打开命令行ping一下?这些常规操作往往治标不治本。本文将带你用Wireshark这把"网络手术刀",从底层协议开始逐层解剖,找到真正的病灶所在。
1. 排查准备:构建科学诊断环境
在开始抓包前,需要做好三项基础工作:
Wireshark基础配置
- 最新版安装(推荐3.6+)
- 启用
Capture packets in promiscuous mode - 设置
Auto-scroll in live capture
网络环境准备
# 清除可能干扰的旧缓存 ipconfig /flushdns # Windows sudo dscacheutil -flushcache # macOS关键过滤命令备忘
dhcp || dns || http || tcp.port == 80 || udp.port == 53
提示:建议准备两台设备,一台制造故障现象,另一台专门抓包,避免本地流量干扰。
2. 第一公里问题:DHCP是否正常分配IP
当电脑连不上网络时,首先应该检查是否获得了合法IP地址。打开CMD执行ipconfig,如果看到169.254.x.x这类APIPA地址,说明DHCP环节已经出问题。
典型故障现象抓包分析:
| 阶段 | 正常流程 | 异常表现 | 解决方案 |
|---|---|---|---|
| Discover | 广播源IP 0.0.0.0 | 无任何Discover包 | 检查网卡驱动/物理连接 |
| Offer | 服务器回复可用IP | 收到多个冲突Offer | 检查DHCP服务器配置 |
| Request | 客户端确认IP | 持续循环Discover | 网络中存在DHCP干扰源 |
| ACK | 最终确认分配 | 未收到ACK | 防火墙拦截UDP 67/68 |
关键过滤技巧:
bootp.option.type == 53 # 专查DHCP消息类型3. 域名解析环节:DNS问题深度定位
获得IP后仍无法访问网站,第二步要验证DNS解析。这里有个常见误区:能ping通域名不代表HTTP能访问,因为ping使用ICMP协议而非DNS。
DNS排障四步法:
- 检查本地hosts文件是否有强制绑定
- 观察DNS查询是否使用预期服务器
dns && ip.dst == <你的DNS服务器IP> - 分析响应时间:
dns.time > 1 # 筛选响应慢的查询 - 验证结果正确性:
dns.flags.response == 1 && dns.flags.rcode != 0 # 非零表示错误
高级技巧:当发现DNS响应慢时,可以添加时间列显示:
右键列标题 -> Column Preferences -> Add -> 类型选择"Delta time"4. 传输层诊断:TCP连接建立过程
DNS解析正确但网页仍打不开,问题可能出在TCP层。通过三次握手分析可以定位约60%的传输层故障。
三次握手异常大全:
SYN无响应
tcp.flags.syn == 1 && tcp.flags.ack == 0 && !tcp.analysis.retransmission可能原因:目标端口未开放、中间防火墙拦截
SYN+ACK后无ACK
tcp.flags.syn == 1 && tcp.flags.ack == 1 && frame.time_delta > 3s可能原因:客户端防火墙阻止出站
频繁重传
tcp.analysis.retransmission || tcp.analysis.fast_retransmission可能原因:网络拥塞、MTU不匹配
连接跟踪技巧:右键任意握手包 -> Follow -> TCP Stream,可完整查看整个TCP会话。
5. 应用层透视:HTTP协议异常排查
前几步都正常但网页仍异常,就需要深入HTTP协议分析。现代网站普遍使用HTTPS,但通过以下方法仍可获取关键信息:
HTTP/1.1关键过滤:
http.request.method == "GET" || http.response.code > 400常见问题定位表:
| 现象 | 过滤条件 | 典型原因 |
|---|---|---|
| 无限重定向 | http.location contains "https" | HSTS策略强制跳转 |
| 403禁止访问 | http.response.code == 403 | 权限/Referer校验失败 |
| 502网关错误 | http.response.code == 502 | 后端服务崩溃 |
| 内容加载失败 | http.content_type != "text/html" | CDN节点异常 |
对于HTTPS网站,可以启用Wireshark的SSL密钥日志功能:
- 设置环境变量
SSLKEYLOGFILE - Wireshark配置:Edit -> Preferences -> Protocols -> TLS
6. 实战案例:电商网站加载失败全分析
某日早晨市场部报告主站商品页无法打开,控制台显示"ERR_CONNECTION_TIMED_OUT"。以下是完整排查过程:
确认DHCP正常:
bootp.option.type == 53 && bootp.option.value == 5确认收到DHCP ACK,IP为10.2.33.105
DNS解析检查:
dns.qry.name contains "examplemall"发现解析到错误的旧IP 203.0.113.45(应为198.51.100.67)
TCP连接测试:
tcp.port == 80 && ip.addr == 203.0.113.45显示SYN包被目标主机拒绝
最终解决方案:
- 清除本地DNS缓存
- 更换备用DNS服务器
- 验证新IP可连通
整个排查过程耗时8分钟,其中3分钟浪费在旧DNS缓存上。这个案例告诉我们:网络问题往往不是发生在你认为的那个环节。