Linux 如何监视TCP连接的cwnd和ssthresh值?

Linux 如何监视TCP连接的cwnd和ssthresh值?,linux,tcp,Linux,Tcp,我希望在通过套接字连接发送或接收数据包时确定这些值。是否有任何现有的工具可以做到这一点?根据您所说的“监视器”的含义,可能会实现这一点 另见。(不,我没有真正了解它;您可能需要深入了解内核源代码来理解它……我找到了一个可以监视这些值的工具 我不同意尼莫给出的答案。Wireshark(以及dumpcap、tcpdump)无法测量/记录cwnd和ssthresh,因为它们不是tcp数据报中的字段,而只是作为内核结构驻留在内核中的值。拥塞控制数据不通过有线传输,只传输流量控制数据 要监视这些值,可以定

我希望在通过套接字连接发送或接收数据包时确定这些值。是否有任何现有的工具可以做到这一点?

根据您所说的“监视器”的含义,可能会实现这一点


另见。(不,我没有真正了解它;您可能需要深入了解内核源代码来理解它……

我找到了一个可以监视这些值的工具

我不同意尼莫给出的答案。Wireshark(以及dumpcap、tcpdump)无法测量/记录cwnd和ssthresh,因为它们不是tcp数据报中的字段,而只是作为内核结构驻留在内核中的值。拥塞控制数据不通过有线传输,只传输流量控制数据

要监视这些值,可以定期实现和采样数据,或者查看
tcp\u探测器
内核模块(请参阅:)

更新:我已经创建了tcp_probe模块的补丁版本,可用于监视cwnd和ssthread,请参见该实用程序将为套接字生成以下输出:

# ss -i
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
ESTAB      0      2054000          1.2.3.4:34069          1.2.3.5:ssh     
     htcp wscale:11,11 rto:247 rtt:47/0.75 ato:40 cwnd:1542 ssthresh:742 send 380.1Mbps rcv_rtt:14 rcv_space:64240

您可以从中检查cwnd/ssthresh值。

请详细说明如何从Wireshark获取这些值?Wireshark有一个GUI。您告诉它您感兴趣的数据包(通过端口号、IP地址、网络接口等),单击“开始”,通过TCP连接移动一些流量,单击“停止”,然后Wireshark将解析协议。它将确定哪些数据包是哪个TCP连接的一部分,并且在每个ACK中都包含cwnd。(但不是ssthresh…我不知道如何监控它,因为它是网络堆栈的内部)要找到ssthresh,只需查看一个图表,了解慢速启动停止和拥塞避免(AI)启动的位置。两个相位之间的连接点是ssthresh。没有自动查找的方法。是否有关于这些列的含义的文档?例如,“发送”是347.6Kbps,这是什么意思?那么macOS呢?我尝试了
lsof-Tfqs-iTCP-sTCP:builded
,但在结果中找不到cwnd/ssthresh值。