1

我想知道在 tcp 套接字上传输了多少字节(顺便说一下,我使用的是 Ubuntu 18.04)。我试过ss命令,但似乎ss只能显示bytes_received,而不是bytes_sent。那么有什么方法可以显示套接字的 bytes_sent 吗?为什么这个数字没有显示在ss中?我认为 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
4

1 回答 1

2

我一直在研究同样的问题,并得出结论,这取决于您使用的内核。

根据我的测试,我已经能够在 Linux 内核 4.xx 和 5.xx 上获得bytes_sentbytes_acked和,但在 3.xx 上却不行。bytes_recieved请参阅下面的示例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_diagss 的源代码后,看起来 ss 使用INET_DIAG_INFO类型struct tcp_info来获取此信息。

我希望这会有所帮助,如果我想出其他任何事情,我会让你知道。

于 2019-11-04T15:45:30.807 回答