诊断原则与框架
分层排查模型
物理层 → 数据链路层 → 网络层 → 传输层 → 应用层
↓ ↓ ↓ ↓ ↓
连接性 MAC地址 IP路由 TCP/UDP HTTP/DNS
四步排查法
1. 定义问题:什么不能工作?何时开始?影响范围?
2. 确定边界:问题在本地?运营商?远程服务器?
3. 逐层测试:从底层向上,排除每一层可能性
4. 隔离定位:确定故障点,收集证据
Level 1: 基础连通性诊断
├── ping, traceroute 基础使用
├── DNS解析检查
└── 本地网络配置检查
Level 2: 路径质量分析
├── mtr 综合诊断
├── 丢包/延迟统计分析
└── 协议层测试(TCP/HTTP)
Level 3: 性能瓶颈定位
├── 带宽测试 (iperf3)
├── MTU问题诊断
└── 路由策略分析
Level 4: 复杂场景处理
├── VPN网络诊断
├── 防火墙后诊断
└── BGP/运营商级问题
工具选择指南
| 遇到什么问题? |
首选工具 |
诊断逻辑 |
| 上网慢,怀疑带宽不足 |
iperf3 |
测试 TCP/UDP 实际吞吐量,排除物理限制。 |
| 网络不稳定,偶尔断线 |
mtr |
持续观察哪一跳(Hop)出现了丢包。 |
| 网页打不开,怀疑 DNS |
dig |
检查域名是否解析到了正确的 IP。 |
| 特定服务连不上(如 NAS) |
nc |
检查 5000/443 等端口是否被防火墙拦截。 |
| 怀疑文件下载被代理限速 |
Wireshark |
观察 TCP Window 是否被压低,是否有重复确认(Dup ACK)。 |
核心诊断流程
阶段1:本地网络检查
# 1.1 物理连接检查
ifconfig/ip addr # 查看接口状态
ping -c 4 127.0.0.1 # 本地环回测试
# 1.2 网关连通性
netstat -rn # 查看路由表
ping -c 4 [网关IP] # 测试网关
# 1.3 DNS解析
nslookup wcj.x3322.net # 基础解析
dig +short wcj.x3322.net # 快速解析
cat /etc/resolv.conf # 查看DNS配置
阶段2:路径诊断
# 2.1 基础路径追踪
traceroute -n wcj.x3322.net # 不解析主机名
traceroute -w 1 -q 1 wcj.x3322.net # 快速测试
# 2.2 全面路径分析(推荐)
mtr -r -c 10 wcj.x3322.net # 标准报告
mtr -T -P 443 wcj.x3322.net # TCP方式(绕过ICMP限制)
阶段3:连接性测试
# 3.1 端口测试
nc -zv [IP] [端口] # 基础端口测试
nmap -p [端口] [IP] # 详细端口扫描
# 3.2 协议测试
curl -I http://wcj.x3322.net # HTTP测试
curl -I https://wcj.x3322.net # HTTPS测试
telnet [IP] [端口] # 原始TCP测试
阶段4:性能测试
# 4.1 带宽测试
# 需要服务端配合
iperf3 -c wcj.x3322.net
# 实际下载速度
curl -o /dev/null [大文件URL]
# 4.2 延迟/抖动测试
# 统计延迟分布
ping -c 100 -i 0.1 wcj.x3322.net
# 结合路径的统计
mtr -r -c 100 wcj.x3322.net
关键工具速查
1. 路径分析工具矩阵
| 工具 |
最佳用途 |
关键参数 |
ping |
基础连通性 |
-c 次数 -i 间隔 -s 大小 |
traceroute |
路径发现 |
-n -w 超时 -q 次数 |
mtr(My Traceroute) |
综合诊断 |
-r -c 次数 -T(TCP) |
tcptraceroute |
防火墙后诊断 |
-n -p 端口 |
2. 端口/协议工具矩阵
| 工具 |
最佳用途 |
关键参数 |
说明 |
nc (netcat) |
端口测试 |
-zv [IP] [端口] |
可以测试特定 TCP/UDP 端口是否通畅:nc -zv [IP] [Port] |
curl |
HTTP/HTTPS测试 |
-I -v -w 格式 |
|
nmap |
全面端口扫描 |
-p 端口 -sS(SYN扫描) |
强大的扫描工具,用于发现网络上的主机和开放的服务端口 |
3. 性能测试工具
| 工具 |
测试内容 |
需要服务端 |
iperf3 |
网络带宽 |
是 |
qperf |
延迟/带宽 |
是 |
speedtest-cli |
互联网速度 |
否 |
常见问题排查清单
问题1:无法访问特定网站
# 排查步骤
1. ping 8.8.8.8 # 测试互联网连通性
2. ping wcj.x3322.net # 测试DNS+连通性
3. nslookup wcj.x3322.net # 测试DNS解析
4. curl -I https://wcj.x3322.net # 测试HTTP(S)
5. traceroute wcj.x3322.net # 检查路径
问题2:VPN连接慢
# 排查步骤
1. ping [VPN网关] # 基础延迟
2. mtr -r [VPN网关] # 路径质量
3. iperf3 -c [VPN内网IP] # 隧道内带宽
4. curl --interface [VPN接口] # 测试VPN出口速度
5. 对比直连和VPN速度
问题3:高延迟/丢包
# 排查步骤
1. ping -c 100 wcj.x3322.net # 统计丢包率
2. mtr -r -c 100 wcj.x3322.net # 定位丢包点
3. 测试不同时间段 # 判断是否高峰期问题
4. 测试不同协议 # TCP vs ICMP
问题4:DNS问题
# 排查步骤
1. cat /etc/resolv.conf # 检查DNS服务器
2. dig @8.8.8.8 wcj.x3322.net # 测试公共DNS
3. dig +trace wcj.x3322.net # 跟踪解析过程
4. nslookup wcj.x3322.net [DNS服务器] # 指定DNS测试
特殊场景处理
1. 绕过防火墙/限制
# 使用TCP代替ICMP
mtr -T -P 443 wcj.x3322.net # 通过443端口测试
tcptraceroute -p 80 wcj.x3322.net # TCP traceroute
curl --connect-timeout 5 [URL] # HTTP连通性测试
2. MTU问题诊断
# 查找最大不分片大小
ping -M do -s 1472 wcj.x3322.net # Linux
ping -D -s 1472 wcj.x3322.net # macOS(实际用-s)
# 逐步减小包大小直到成功
3. BGP/路由问题
# 在线工具优先
1. bgp.he.net # BGP工具箱
2. bgpview.io # BGP可视化
3. ping.pe # 全球Ping测试
# 本地查询
whois [IP/ASN] # 查询归属信息
traceroute --as-path wcj.x3322.net # 显示AS路径(部分系统)
自动化诊断脚本
基础诊断脚本
#!/bin/bash
TARGET=${1:-"8.8.8.8"}
echo "=== 网络诊断报告 $(date) ==="
echo "目标: $TARGET"
echo ""
# 1. 基本连通性
echo "1. 基本连通性测试:"
ping -c 4 $TARGET | tail -2
echo ""
# 2. DNS解析
echo "2. DNS解析测试:"
nslookup $TARGET 2>&1 | grep -A2 "Name:"
echo ""
# 3. 快速路径检查
echo "3. 路径检查 (前5跳):"
traceroute -n -w 1 -q 1 -m 5 $TARGET 2>/dev/null || echo "traceroute不可用"
echo ""
# 4. HTTP测试(如果是域名)
if [[ $TARGET =~ [a-zA-Z] ]]; then
echo "4. HTTP连通性:"
curl -I -m 5 "http://$TARGET" 2>/dev/null | head -1
fi
高级诊断脚本
#!/bin/bash
TARGET=$1
PORT=${2:-80}
REPORT_FILE="/tmp/network_report_$(date +%Y%m%d_%H%M%S).txt"
{
echo "=== 详细网络诊断报告 ==="
echo "目标: $TARGET"
echo "时间: $(date)"
echo ""
# 多维度测试
echo "# 1. 综合路径分析 #"
sudo mtr -r -c 10 $TARGET 2>/dev/null || echo "MTR不可用"
echo ""
echo "# 2. 端口连通性 #"
for p in $PORT 443 22; do
echo -n "端口 $p: "
timeout 2 nc -zv $TARGET $p 2>&1 | grep -E "succeeded|open" || echo "关闭/超时"
done
echo ""
echo "# 3. 性能基准 #"
echo "延迟统计 (10次):"
ping -c 10 $TARGET | tail -2
echo ""
echo "# 4. HTTP性能 #"
timeout 5 curl -s -o /dev/null -w """
DNS解析: %{time_namelookup}s
连接建立: %{time_connect}s
开始传输: %{time_starttransfer}s
总时间: %{time_total}s
""" "http://$TARGET" 2>/dev/null || echo "HTTP测试失败"
} | tee $REPORT_FILE
echo "报告已保存: $REPORT_FILE"
应急参考卡
当网络完全不通时
# 1分钟快速检查
1. ip addr show # 是否有IP地址?
2. ping 127.0.0.1 # 本地TCP/IP协议栈正常?
3. ping [网关IP] # 能否到达网关?
4. ping 8.8.8.8 # 能否到达互联网?
5. nslookup google.com # DNS是否工作?
当网站访问慢时
# 3分钟定位瓶颈
1. ping [网站] # 基础延迟
2. mtr -r [网站] # 路径质量
3. curl -I [网站] # HTTP响应
4. curl -o /dev/null [网站] # 下载速度
5. 对比其他网站 # 判断是本地还是远程问题