Linux
ss
工具及 TCP 参数详解
ss
在 Linux 系统中,
工具可以用来查看网络套接字状态。使用如下命令可以查看指定端口的 TCP 连接详细信息:
ss
ss -i -t -p sport = :<port>
其中,
显示 TCP 内部信息,
-i
仅显示 TCP 连接,
-t
显示进程信息。
-p
一、TCP 内部信息字段解释
输出的 TCP 内部信息包含多种与拥塞控制、窗口管理、延迟和流量相关的参数。常见字段及其含义如下:
ss -i
字段 | 含义 |
---|---|
|
TCP 拥塞控制算法,本例使用 Cubic 算法。 |
|
TCP 窗口缩放因子,发送方和接收方用于调整 TCP 窗口大小。例如 9/10 表示发送方和接收方都启用了窗口缩放。 |
|
Retransmission Timeout(重传超时时间),单位 ms。用于控制发送方在未收到 ACK 时等待重传的时间。 |
|
Round-Trip Time(往返时延),单位 ms。例如 表示最近 RTT 为 8.228ms,最小 RTT 为 0.672ms。 |
|
Adaptive Timeout(自适应超时),单位 ms,用于动态调整发送超时时间。 |
|
Maximum Segment Size,TCP 数据段中最大数据长度。 |
|
Path Maximum Transmission Unit,路径最大传输单元。 |
|
接收方 MSS 值,接收方可接收的最大数据段长度。 |
|
广告 MSS,发送方向接收方广告的 MSS 大小。 |
|
拥塞窗口大小,单位为报文段数。 |
|
Slow Start Threshold(慢启动阈值),控制拥塞避免阶段的拥塞窗口阈值。 |
|
已确认的字节数。 |
|
已接收的字节数。 |
/
|
发送/接收的报文段数量。 |
/
|
发送/接收的数据报文段数量(排除控制报文段)。 |
|
当前发送速率,单位 Mbps。 |
/ /
|
最近发送、接收和确认的报文段序号。 |
|
数据发送速率,单位 Mbps。 |
|
传输速率,单位 Mbps。 |
|
应用程序限制发送速率标识。 |
|
重传报文段数量。 |
|
接收端 RTT,单位 ms。 |
|
接收端可用接收窗口大小。 |
|
接收端慢启动门限值。 |
|
最小 RTT,单位 ms。 |
二、慢启动与拥塞避免
TCP 拥塞控制主要依赖 cwnd(拥塞窗口)和 ssthresh(慢启动阈值):
慢启动阶段:当
时,TCP 采用指数增长方式快速增加发送速率。拥塞避免阶段:当
cwnd < ssthresh
时,采用线性增长,防止网络过载。
cwnd >= ssthresh
慢启动阈值
的初始值通常由系统默认设置,可通过以下命令查看:
ssthresh
cat /proc/sys/net/ipv4/tcp_slow_start_after_idle
三、重传与窗口调整
TCP 在出现丢包或超时时会调整窗口和阈值:
超时重传(RTO):
cwnd = 1
立即降低发送速率,防止网络进一步拥塞。
ssthresh = cwnd / 2
快速重传:
cwnd = cwnd / 2
网络轻微拥塞时的优化策略,不如超时重传激进。
ssthresh = cwnd
四、分析和优化重点
在分析 TCP 性能和网络健康状态时,重点关注:
和
cwnd
:控制发送速率和拥塞窗口变化。延迟和丢包:通过
ssthresh
、
rtt
、
rto
等参数判断网络状态。发送速率:
retrans
、
send
、
pacing_rate
反映当前传输效率。应用程序限制:
delivery_rate
标识是否应用程序主动限制流量。
app_limited
当网络不健康或流量过大时,可通过降低
和适当增加 RTT 来减少丢包对传输的影响,从而提高整体稳定性。
cwnd
五、监控和调试工具
可以结合以下工具分析 TCP 流量与性能:
:查看 TCP 内部状态。
ss -i
:查看 TCP 连接及状态。
/proc/net/tcp
:调整 TCP 拥塞控制参数,如
/proc/sys/net/ipv4/
。
tcp_slow_start_after_idle
:监控网络流量。
sar -n DEV
/
tcpdump
:抓包分析。
wireshark
六、总结
TCP 性能优化依赖对
、
cwnd
及相关指标的理解和调控:
ssthresh
与
ssthresh
决定发送窗口和拥塞控制阶段。丢包和超时触发窗口调整和重传策略。延迟 ACK、快速 ACK 等机制可以进一步优化传输延迟。结合
cwnd
和内核参数监控网络健康,有助于减少丢包和提高吞吐量。
ss -i