网络诊断知识体系

诊断原则与框架

分层排查模型

 物理层 → 数据链路层  → 网络层 →   传输层  →  应用层
   ↓        ↓          ↓         ↓         ↓
 连接性    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. 对比其他网站             # 判断是本地还是远程问题