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