Как узнать байты, отправленные для подключенного сокета 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
чтобы получить эту информацию.
Я надеюсь, что это поможет и сообщу вам, если я увижу что-нибудь еще.