可用ping测试连接质量:执行ping -c 10 -i 0.5 8.8.8.8,观察min/avg/max/mdev中max显著高于avg(如avg=12ms、max=240ms)表明间歇性延迟尖峰;100%丢包但traceroute可达则多因目标禁ICMP或防火墙拦截;配合-q参数适合脚本判断连通性。

怎么用 ping 测试连接质量并识别丢包/延迟异常
ping 是最直接的连接质量探测工具,但它返回的不只是“通”或“不通”,关键要看 time= 值波动和 packet loss 百分比。
-
ping -c 10 -i 0.5 8.8.8.8:发 10 个包,间隔 0.5 秒,避免单次抖动误判 - 关注
min/avg/max/mdev行 —— 如果max明显高于avg(比如 avg=12ms,max=240ms),说明存在间歇性延迟尖峰 - 出现
100% packet loss但路由可达(traceroute能走到中间跳)时,大概率是目标禁 ICMP 或防火墙拦截,不是链路问题 -
ping -q -c 20 google.com配合-q(静默)适合脚本判断:返回值为 0 表示至少一个包通,非 0 才真失败
如何用 mtr 定位具体哪一跳导致质量下降
mtr 是 ping 和 traceroute 的组合体,能持续探测每跳的丢包率和延迟,比单次 traceroute 更可靠。
-
mtr -r -c 50 -w 8.8.8.8:-r 输出报告模式,-c 50 发 50 个包,-w 以宽屏格式显示(避免列截断) - 重点看每跳的
%Loss列 —— 如果第 3 跳开始出现 20% 丢包,而后续跳丢包率不增加,问题就在这一跳设备(通常是你的 ISP 出口或骨干网节点) - 如果某跳显示
???且后续跳丢包率飙升,说明该跳屏蔽了 ICMP TTL-exceeded 响应,但实际路径已劣化,需结合tcptraceroute或业务日志交叉验证 - 避免在终端里直接运行
mtr(无参数),它默认交互式,会持续占用终端;生产环境排查务必加-r
为什么 ss -i 比 netstat 更适合查 TCP 连接质量细节
ss -i 能显示每个 TCP 连接的内核级指标,比如重传数、拥塞窗口、RTT 估计值,这些是 netstat 完全不提供的。
-
ss -tienp | grep :443:-t 限 TCP,-i 显示 TCP info,-e 输出扩展字段,-n 不解析域名,-p 需 root 权限查进程 - 输出中
retrans:12表示该连接已重传 12 次 —— 即使连接“活着”,高重传率意味着链路丢包或接收端处理慢 -
rtt:12345/6789中斜杠前是 RTT 估计值(微秒),后是 RTT 方差;方差过大(如 >5000)说明延迟极不稳定 -
cwnd:10是拥塞窗口大小(MSS 单位),长期卡在 2–4 说明链路持续触发拥塞控制,可能受弱 Wi-Fi 或 QoS 限速影响
用 iftop + nethogs 区分是网络层还是进程层的问题
带宽打满不等于连接质量差,但质量差常伴随异常流量。这两工具定位方向不同:iftop 看谁在连、连哪,nethogs 看哪个进程在吃带宽。
-
iftop -P -n -f "port 80 or port 443":只过滤 HTTP/HTTPS 流量,-P 显示端口,-n 禁 DNS 解析,-f 用 tcpdump 语法过滤 -
nethogs -d 2 -t:-d 2 设刷新间隔 2 秒,-t 启用跟踪模式(显示实时速率变化曲线),能一眼看出某个进程是否突发上传/下载 - 常见陷阱:
iftop默认按总流量排序,但短连接(如大量 DNS 查询)可能不显眼却拖慢整体响应 —— 加-F参数可按连接数排序 -
nethogs无法显示容器内进程(除非用--docker或挂载/proc),K8s 场景下得配合crictl stats或 cAdvisor
ss -i 里的 retrans 和 rtt 数值,跟 mtr 的某跳丢包、nethogs 的进程行为串起来——没有单个命令能自动完成归因,必须人工对照时间戳和连接特征。


















