ss -i 给出内核视角的连接画像
套接字查看工具加上信息选项后,会输出内核为这条传输层连接维护的统计信息:拥塞控制算法、拥塞窗口、平滑往返时延与其偏差、重传超时、慢启动阈值、重传次数以及路径最大传输单元等。它是判断「单条连接为什么慢、为什么卡住」最直接的证据来源,因为这里读到的不是测量推断,而是内核实际的运行状态。分析时的关键是别只看一个字段,窗口、时延与重传要一起看。
基本信息
| 适用平台 | Linux iproute2 的 ss,内核需提供对应统计接口 |
|---|---|
| 常用组合 | -t 传输层、-i 信息、-n 不做解析,可再配合表达式过滤 |
| 关键字段 | 拥塞算法、拥塞窗口、往返时延与偏差、重传超时、重传次数、路径最大传输单元 |
| 扩展字段 | 加 -e 可看到套接字编号、用户标识等,便于对应到进程 |
| 分析原则 | 窗口、时延与重传必须联合判读 |
典型使用场景
- 单条连接吞吐上不去:确认是拥塞窗口受限还是丢包压制
- 连接卡住不动:看重传计数与超时定时器状态
- 抖动分析:对比往返时延偏差与业务侧感知
- 验证参数生效:确认拥塞算法与窗口缩放是否按预期工作
- 定位大包问题:读取路径最大传输单元并与接口配置核对
TCP 详情
TCP 详情
ss -tin state established '( dport = :443 )' | head -40
# cubic wscale:7,7 rto:204 rtt:0.62/0.31 mss:1448 pmtu:1500
# cwnd:10 bytes_sent:1201 bytes_acked:1202 segs_out:9 segs_in:8 retrans:0/0
ss -tine state established '( dport = :3306 )' | head -20 # 带扩展字段,便于对应进程
ss -ti state established | grep -o 'retrans:[0-9]*/[0-9]*' | sort | uniq -c # 重传分布关键字段判读
| 字段 | 含义 | 判读 |
|---|---|---|
| 拥塞窗口 | 可发送但未确认的数据上限 | 长期停在很小值说明被丢包或限速压着 |
| 时延与偏差 | 平滑往返时延与其波动 | 偏差大即抖动明显,影响实时业务 |
| 重传超时 | 等待重传的时间 | 明显高于往返时延说明在等重传 |
| 重传计数 | 本连接重传次数与超时放弃数 | 持续增长指向链路丢包 |
| 路径最大传输单元 | 路径探测结果 | 小于接口值说明路径中有限制 |
| 窗口缩放 | 窗口放大因子 | 为较小值说明窗口受限,吞吐上不去 |
加上扩展字段选项还能看到套接字编号与用户标识等,可把连接与进程、文件描述符对上号。