能,ss -i可查看连接质量核心指标:重传次数、rtt、拥塞窗口等,但仅对established tcp连接有效,需结合retrans增长与rtt飙升判断丢包或限速。

ss -i 能看到连接质量吗
不能直接看到“质量报表”,但 ss -i 是唯一能从内核 socket 层拿到连接级实时指标的命令。它输出的是每个 TCP 连接的底层状态,比如重传次数、RTT(往返时延)、拥塞窗口大小、接收/发送队列长度等——这些才是判断连接质量的核心依据。
注意:ss -i 只对 ESTABLISHED 状态的 TCP 连接有效,UDP 和 LISTEN 状态不显示;字段含义依赖内核版本(4.1+ 才稳定支持 rtt/rttvar),旧系统可能只返回空或部分字段。
-
ss -tni:最常用组合,-t 表示 TCP,-n 避免 DNS 解析,-i 显示连接指标 - 关键字段:
rtt:123/45表示当前 RTT 为 123ms,RTTVAR(偏差)为 45ms;cwnd:10是拥塞窗口大小(单位为 MSS),持续低于 2–4 说明链路受限或丢包严重 - 如果某连接
retrans:3不断增长,且rtt同步飙升,基本可判定该连接存在持续丢包或中间设备限速
/proc/net/snmp 里的 TCP 指标怎么看
/proc/net/snmp 提供的是整个 TCP 协议栈的累计统计,不是单连接质量,但能帮你识别系统级异常模式。它比 ss -i 更稳定、无权限限制,适合脚本化监控。
重点看 TCP 行末尾的几个字段(顺序固定):InSegs(收到总段数)、OutSegs(发出总段数)、RetransSegs(重传段数)、EstabResets(非正常关闭连接数)。
- 计算重传率:
RetransSegs / OutSegs> 2% 就值得警惕;>5% 基本确认存在路径问题(如中间防火墙策略、QoS 丢包) -
EstabResets突增,通常对应大量 RST 包,常见于后端服务崩溃、连接池泄漏或负载均衡器健康检查失败 - 这个文件不包含时间戳,必须两次读取做差值;用
awk '/^Tcp/ {print $10,$12,$14,$16}' /proc/net/snmp提取关键字段最稳妥
为什么 ping 和 traceroute 不算“连接质量报表”
它们测的是 ICMP 路径连通性,和真实业务连接(TCP)质量无关。很多生产环境会限速或丢弃 ICMP,导致 ping 显示延迟低但 HTTP 请求超时;traceroute 的跳数也不反映 TCP 重传或窗口收缩行为。
更隐蔽的问题是:同一台服务器上,不同目的 IP 或不同源端口的连接质量可能差异极大(例如 BGP 路由策略、运营商 peering 点拥堵),而 ping 默认只打一个目标。
- 真要验证业务连接质量,应该用
curl -w "@format.txt" -o /dev/null -s http://target:8080/health,其中format.txt包含%{time_total}、%{time_connect}、%{speed_download} - 不要依赖单次
ping结果;连续跑 100 次:ping -c 100 -i 0.1 target | grep 'packet loss',>1% 丢包才具参考价值 -
tcpping(需安装)比ping更接近真实场景,它用 TCP SYN 探针模拟连接建立过程
容器或云主机里怎么查连接质量
宿主机视角下,ss -i 和 /proc/net/snmp 仍然可用,但要注意命名空间隔离。容器内默认看不到宿主机的全局统计,而宿主机上的 ss -i 会列出所有 netns 中的连接(包括容器),但字段值反映的是容器网络栈的实际表现。
真正容易被忽略的是:云厂商虚拟网卡(如 AWS ENA、Azure Accelerated Networking)的 TX dropped 往往出现在宿主机 ip -s link show dev eth0 的 TX 部分,而不是容器内 ifconfig —— 这意味着问题在 vSwitch 层,不在应用本身。
- 查容器内连接质量:进容器执行
ss -tni dst <target_ip></target_ip>,确保目标地址在容器网络可达范围内 - 查宿主机整体 TCP 健康度:
cat /proc/net/snmp | awk '/^Tcp/ {print "retr:",$14,"reset:",$18}',比看 ifconfig 的 errors 更准 - 别在容器里跑
tcpdump抓包——流量经过 veth pair 和 bridge,抓到的可能是重复帧或未完成三次握手的 SYN,误导性极强











