首页/系统/Linux 内核与性能调优速查/ss -ti 解读单连接 TCP 状态
网络栈调优98 条

ss -ti 解读单连接 TCP 状态

单连接吞吐或延迟问题时, ss -ti 输出的 cwnd、rtt、retrans 与发送队列是最直接的证据。

ss -ti 单连接状态

单条连接出现吞吐低或延迟高的问题时,ss -ti 给出的信息最直接:cwnd 是拥塞窗口,代表当前允许在途的未确认数据量;rtt 与 rttvar 是平滑往返时间及其波动;retrans 是该连接累计的重传次数;发送队列有积压则说明数据已交给内核但还没发出去。这些量合在一起,能区分是网络受限还是应用写入过猛。

基本信息

查看命令ss -ti dst :443
按状态筛选ss -tin state established '( dport = :443 )'
关键字段cwnd、rtt、rttvar、retrans、send、bytes_retrans
口径提醒retrans 与 bytes_retrans 都是累计值,需要用差值
权限普通用户即可查看本机连接状态

典型使用场景

  • 单条连接的吞吐远低于预期,确认是否受拥塞窗口限制
  • 延迟抖动排查:用 rttvar 判断往返时间的稳定程度
  • 确认重传集中在少数连接,缩小抓包范围
  • 评估发送队列积压,区分应用写入速度与网络发送能力
  • 对比同一服务不同客户端连接的指标差异

读取方法

读取方法
ss -ti dst :443                          # 查看与 443 端口通信的连接详情
ss -tin state established | head -20     # 所有已建立连接,含 TCP 内部信息
ss -tin state established '( sport = :8080 )'   # 只看本机服务端口
# retrans 为累计值:间隔采样两次做差,才能对应到故障时段

字段判读

字段含义判读
cwnd拥塞窗口,可发送的在途数据量长期偏小说明受网络条件限制
rtt / rttvar平滑往返时间与波动rttvar 大表示链路不稳定
retrans累计重传次数需用差值对应故障时段
send发送队列积压字节数持续非零说明发送侧拥塞
bytes_retrans累计重传字节数结合总发送量看比例

判读链路

  • 先看有无重传,判断是否存在丢包
  • 再看 cwnd 与 send 的关系,区分受限于网络还是本端
  • 然后看 rtt 与 rttvar,评估路径延迟是否稳定
  • 必要时结合抓包与设备计数,把结论落到具体链路位置
rtt 是平滑后的估计值,不是某一次报文的瞬时延迟,用它来判断「此刻延迟多少毫秒」会偏保守,看趋势更可靠。
retrans 与 bytes_retrans 都是自连接建立以来的累计值,不看差值就无法判断故障发生的时间段,也无法衡量影响程度。

易错点

  • 把 rtt 的平滑值当成瞬时延迟,据此判断某一时刻的网络质量
  • retrans 为累计值却不做差值,无法对应故障时段
  • 只看单个字段,不结合 cwnd、send 与 rtt 一起判断
  • 在连接已经变化的情况下对比两次采样,得到无效结论

数据来源与参考

  • man ss
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌