Как отслеживать значения cwnd и sstresh для TCP-соединения? [закрытый]

Я хочу установить эти значения, когда пакет отправляется или принимается по соединению сокета. Существует ли инструмент, который делает это?

4 ответов


Я не согласен с ответом Немо. Wireshark (а также dumpcap, tcpdump) не способны измерять/регистрировать cwnd и ssthresh, поскольку они не являются полем в датаграммах tcp, а являются только значениями, которые находятся внутри ядра как структуры ядра. Данные по управлением затора не переданы над проводом, только данные по регулирования потока.

чтобы отслеживать эти значения, либо реализуйте get_info и периодически пробуйте данные, или взгляните на tcp_probe модуль ядра (см.: http://www.linuxfoundation.org/collaborate/workgroups/networking/tcptesting)

UPDATE: я создал исправленную версию модуля tcp_probe, которая может использоваться для мониторинга cwnd и ssthread, см. https://github.com/Dynalon/tcp_probe_fixed


на ss утилита будет генерировать этот вывод для сокетов:

# 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 может сделать трюк.

см. также /proc/net/tcp документация. (Нет, я на самом деле не следую этому; Вам, возможно, придется копаться в источниках ядра, чтобы понять это...)


Я нашел инструмент, который может контролировать эти значения. http://www.umic-mesh.net/downloads/flowgrind.html