Linux/Windows 双环境下的实用网络诊断与故障排查技巧
一、故障排查的核心思路
网络问题的表象千差万别,但根因往往逃不出“物理层 → 链路层 → 网络层 → 传输层 → 应用层”这五层框架。定位问题时,建议遵循“由近及远、由下到上”的顺序:先确认本机协议栈与网卡是否正常,再检查网关与路由,最后才排查 DNS、代理与防火墙策略。这样能快速缩小范围,避免在无关方向上浪费大量时间。
二、基础连通性与路由诊断
2.1 连通性测试
先用 ping 确认目标是否可达。Linux 与 Windows 的默认行为不同:Linux 默认持续发包,Windows 默认只发 4 个。跨平台脚本中务必显式指定次数,避免脚本挂起。
# Linux
ping -c 4 8.8.8.8
# Windows
ping -n 4 8.8.8.8
2.2 路由追踪
当 ping 不通时,用路由追踪判断丢包发生在哪一跳。Linux 推荐 mtr(持续采样,比 traceroute 更直观),Windows 用 tracert 或 pathping(会统计每一跳的丢包率)。
# Linux:持续探测并统计每一跳丢包
mtr -rwzbc 50 8.8.8.8
# Windows:逐跳统计,耗时较长但信息全
pathping 8.8.8.8
三、端口与连接状态排查
能 ping 通不等于服务可用。此时应检查目标端口是否监听、连接是否建立。Linux 用 ss(比 netstat 更全且更快),Windows 用 netstat -ano 并配合 tasklist 定位进程。
# Linux:查看所有监听端口
ss -tulnp
# Linux:按状态统计连接数
ss -s
# Windows:查看监听端口及对应进程 PID
netstat -ano | findstr LISTENING
tasklist | findstr <PID>
PowerShell 中还可以用 Test-NetConnection 一步完成“连通 + 端口”检测:
Test-NetConnection 10.0.0.5 -Port 3306 -InformationLevel Detailed
四、DNS 解析排查
很多“网站打不开”其实是 DNS 问题。核心是先区分“解析失败”还是“连接失败”:能解析出 IP 但连不上,通常是网络或防火墙问题;解析不出 IP,才需要重点查 DNS。
# Linux
dig +short www.example.com
dig www.example.com @8.8.8.8 # 指定公共 DNS 做对比
# Windows PowerShell
Resolve-DnsName www.example.com
nslookup www.example.com 8.8.8.8
若指定公共 DNS 能解析而默认 DNS 不能,说明本地 DNS 配置或缓存有问题。Windows 可用 ipconfig /flushdns 刷新缓存,Linux 视 systemd-resolved 使用 resolvectl flush-caches。
五、用抓包定位“玄学”问题
当握手失败、TLS 异常、大量重传等问题无法靠日志判断时,抓包是终极手段。Linux 用 tcpdump,Windows 10/11 内置 pktmon,也可用 Wireshark 做图形化分析。
# Linux:抓取 80 端口的前 100 个包并存盘
tcpdump -i any -nn port 80 -c 100 -w http.pcap
# Windows:内置抓包并转换为 pcapng
pktmon start --etw -c --comp nics
pktmon stop
pktmon etl2pcap PktMon.etl -o capture.pcapng
六、常见故障场景速判
| 现象 | 优先排查方向 | 常用命令 |
|---|---|---|
| 完全无法上网 | 网卡 / IP / 网关 | ip a / ipconfig /all |
| 能 ping 通 IP,域名不通 | DNS 解析 | dig / Resolve-DnsName |
| 域名正常但端口连不上 | 服务监听 / 防火墙 | ss -tulnp / netstat -ano |
| 时通时断、偶发丢包 | 链路质量 / 路由 | mtr / pathping |
| 连接建立但页面卡顿 | TLS / 应用层 | tcpdump / Wireshark |
七、跨平台命令速查表
| 用途 | Linux | Windows |
|---|---|---|
| 连通性测试 | ping -c 4 | ping -n 4 |
| 路由追踪 | mtr / traceroute | tracert / pathping |
| 查看监听端口 | ss -tulnp | netstat -ano |
| 端口探测 | nc -zv host port | Test-NetConnection |
| DNS 解析 | dig / nslookup | Resolve-DnsName |
| 抓包 | tcpdump | pktmon / Wireshark |
| 刷新 DNS 缓存 | resolvectl flush-caches | ipconfig /flushdns |
八、小结
网络排障并不依赖“运气”,而是一套可复用的方法:先分层定位、再逐段验证、最后用抓包收口。把上面这些命令整理成自己的跨平台速查脚本,遇到问题时按顺序跑一遍,绝大多数常见故障都能在几分钟内定位到根因。建议日常就用 mtr 与 Test-NetConnection 替代单次 ping,长期留存基线数据,问题发生时对比更高效。
- 点赞
- 收藏
- 关注作者
评论(0)