Как отслеживать значения 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