Как узнать байты, отправленные для подключенного сокета TCP?

Я хочу узнать, сколько байтов передается через сокет TCP (кстати, я использую Ubuntu 18.04). Я попробовал команду ss, но кажется, что ss может показывать только bytes_received, но не bytes_sent. Так есть ли способ показать bytes_sent для сокета? И почему этот номер не отображается в сс? Я думаю, что bytes_received и bytes_sent тесно связаны.

> ss -ti

ESTAB    0   0   host1:ssh              host2:7703
     cubic wscale:2,8 rto:384 rtt:181.622/16.823 ato:40 mss:1452 cwnd:10 
     ssthresh:118 bytes_acked:120873541 bytes_received:1151501 segs_out:87562 
     segs_in:39194 send 639.6Kbps lastsnd:11732 lastrcv:11564 lastack:11564 
     pacing_rate 1.3Mbps retrans:0/203 reordering:56 rcv_rtt:11516 rcv_space:71360

0 ответов

Я изучал эту же проблему и пришел к выводу, что это зависит от используемого вами ядра.

Из моих тестов я смог получить bytes_sent, bytes_acked, а также bytes_recievedна ядрах Linux 4.xx и 5.xx, но не на 3.xx. См. Пример ниже наDebian GNU/Linux with kernel 4.19.0-6-amd64:

$ ss -itpn

State           Recv-Q           Send-Q                      Local Address:Port                      Peer Address:Port
ESTAB           0                0                          172.16.177.135:22                        172.16.177.1:60928            
users:(("sshd",pid=700,fd=4))
    bytes_sent:50872 bytes_acked:50872 bytes_received:11165

* Я вырезал другую информацию, не относящуюся к этой проблеме

После того, как копаться sock_diag и исходный код СУ, он выглядит как сс использованийINET_DIAG_INFO типа struct tcp_info чтобы получить эту информацию.

Я надеюсь, что это поможет и сообщу вам, если я увижу что-нибудь еще.

Другие вопросы по тегам