技术博客

网络故障排查:mtr、tcpdump 和 ss 应该怎么组合使用?

网络问题不能只 ping,一线运维需要把路径质量、端口状态、连接队列和抓包证据结合起来判断。

网络排查mtrtcpdumpLinux运维

网络故障最容易陷入争论:应用说网络有问题,网络说链路正常,运维夹在中间。要减少争论,就要拿出证据。

ping 只能证明 ICMP 层面的连通性,不能说明 TCP 端口、路径抖动、丢包位置和应用协议是否正常。更完整的排查通常要组合使用 mtrsstcpdump

mtr 看路径质量

mtr 结合了 ping 和 traceroute,可以持续观察路径上的延迟和丢包。

mtr -rw target.example.com

注意不要只看中间节点丢包。很多路由器会限制 ICMP 响应,中间节点显示丢包但后续节点正常,不一定代表真实业务丢包。

ss 看连接状态

ss -tanp
ss -s

ss 可以查看监听端口、连接状态、队列和进程。大量 SYN-SENT 可能说明对端不可达或被防火墙拦截;大量 TIME-WAIT 要结合连接模型判断,不要见到就认为异常。

tcpdump 留证据

抓包是网络排查的关键证据:

tcpdump -i eth0 host 10.0.0.10 and port 443

抓包要明确目标:是看三次握手、TLS 握手、重传、RST,还是应用层响应。不要无目的抓一大堆包,最后没人分析。

排查顺序

先确认 DNS,再确认路由和防火墙,然后看端口监听和连接状态,最后抓包验证。这样能把“感觉网络慢”变成具体问题。

参考资料