4.9.2 网络诊断与分析工具(ping、traceroute、ss、tcpdump、iftop、nethogs)

网络诊断与分析工具(ping、traceroute、ss、tcpdump、iftop、nethogs)#

本节围绕常用网络诊断工具给出安装、原理草图、核心命令与排错流程,并通过可执行示例与练习帮助建立标准化排查路径。

原理草图:从现象到定位

文章图片

一、工具安装(常见发行版)

# Debian/Ubuntu
sudo apt update
sudo apt install -y iputils-ping traceroute iproute2 tcpdump iftop nethogs mtr

# RHEL/CentOS
sudo yum install -y iputils traceroute iproute tcpdump iftop nethogs mtr

1. ping:连通性与时延基线

命令解释
- -c 次数;-i 间隔;-s 包大小;-W 超时;-M do 禁止分片用于 MTU 探测

示例:建立 RTT/丢包基线

# 10次探测,2秒间隔,超时1秒
ping -c 10 -i 2 -W 1 1.1.1.1

预期效果
- 输出 time=xx mspacket loss,用于基线与抖动评估。

示例:MTU 探测

# 1472 字节 + 28 字节头部 = 1500,检测路径MTU
ping -c 3 -M do -s 1472 1.1.1.1

排错要点
- 出现 Frag needed 或超时,说明路径 MTU 低于 1500。


2. traceroute / mtr:路径与跳点分析

命令解释
- -I ICMP;-T TCP;-n 不解析域名;-m 最大跳数

示例:定位异常跳点

# 以ICMP探测,最多30跳,避免DNS解析干扰
traceroute -I -n -m 30 1.1.1.1

示例:持续观测抖动(推荐)

# mtr持续观测,输出报表
mtr -n -r -c 20 1.1.1.1

排错要点
- 单跳延迟/丢包异常可能为链路拥塞或限速点。
- 某跳不响应不代表故障,需结合后续跳点是否可达。


3. ss:连接状态与队列堆积

命令解释
- -l 监听;-n 数字;-t TCP;-p 进程;state 过滤状态

示例:查看端口占用

ss -lntp

示例:统计 TIME_WAIT

ss -ant state time-wait | wc -l

示例:查看 80 端口连接与队列

ss -ant sport = :80

排错要点
- Send-Q/Recv-Q 非零:应用处理慢或内核队列堆积。
- TIME_WAIT 激增:短连接过多或客户端复用不足。


4. tcpdump:抓包与协议分析

命令解释
- -i 接口;-nn 不解析;-s 0 全包;-w 保存

示例:抓取指定主机 TCP 通信

# 抓包30秒,保存文件,便于Wireshark分析
sudo timeout 30 tcpdump -i eth0 -nn -s 0 host 1.1.1.1 and tcp -w /tmp/case.pcap

示例:实时观察握手与重传

sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'

排错要点
- 关注重传、乱序、窗口缩小、RST。
- 生产环境抓包需控制范围/时间,避免性能与隐私风险。


5. iftop:接口实时流量

命令解释
- -i 指定网卡;-P 显示端口;-n 不解析;-B Byte显示

示例:找出大流量连接

sudo iftop -i eth0 -n -P -B

排错要点
- 通过连接维度识别异常IP或端口。


6. nethogs:按进程统计带宽

命令解释
- -t 文本模式;-d 刷新间隔;指定网卡

示例:定位占用带宽的进程

sudo nethogs -t -d 2 eth0

排错要点
- 获取 PID 后结合 lsof -p PID 查看具体连接。


7. 组合排查示例(完整流程)

场景:业务请求慢,怀疑网络

# 1) 基线:丢包/延迟
ping -c 5 -W 1 10.0.0.10

# 2) 路由与跳点
mtr -n -r -c 10 10.0.0.10

# 3) 连接与队列
ss -ant | head
ss -s

# 4) 流量主体
sudo iftop -i eth0 -n -P -B

# 5) 进程带宽
sudo nethogs -t -d 1 eth0 | head -n 20

# 6) 协议抓包
sudo timeout 15 tcpdump -i eth0 -nn -s 0 host 10.0.0.10 -w /tmp/slow.pcap

8. 常见排错清单

  • ping 丢包但 traceroute 正常:检查防火墙/ICMP 限速策略。
  • 某跳丢包但后续跳点正常:中间路由器限速,不一定故障。
  • ss 显示 Recv-Q 持续增长:应用读取慢或线程阻塞。
  • iftop 大流量但 nethogs 无进程:可能是内核转发或容器/命名空间流量。
  • tcpdump 频繁 RST:应用异常关闭或防火墙策略重置连接。

9. 练习与验证

1) MTU 探测练习
- 目标:找到路径最大可传输大小
- 步骤:逐步增大 -s,直到出现 Frag needed

ping -c 2 -M do -s 1400 1.1.1.1
ping -c 2 -M do -s 1472 1.1.1.1

2) TIME_WAIT 观察练习
- 目标:了解短连接对端口的影响

ss -ant state time-wait | wc -l

3) 抓包分析练习
- 目标:识别 SYN/ACK/重传

sudo timeout 10 tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

10. 安全与性能注意事项
- 抓包应限定目标与时长,避免过度采集与性能冲击。
- 记录诊断结论时附带命令与时间戳,便于复盘与复现。