【发布时间】:2019-01-07 16:03:41
【问题描述】:
我想知道一个 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
【问题讨论】:
-
从编程角度还是从操作系统角度?
-
"我认为 bytes_received 和 bytes_sent 是密切相关的。" - 从套接字的角度来看,接收到的字节数和发送的数完全没有关系。我目前不确定系统是否在每个套接字的基础上跟踪您想要的统计信息。
-
@tadman 操作系统视角。现在我认为 bytes_acked 可能是我想要的,但不确定。在我看来,bytes_acked 表示套接字已发送并被对等方确认的字节数
-
如果这是操作系统级别的问题,那么这是 SuperUser 的问题,因为 Stack Overflow 是针对编程问题的,这是题外话。
-
跟踪可能与TCP序列号有关,需要跟踪通信的有效载荷字节数。但是,它应该从随机初始序列号 (ISN) 开始。查看实现的内核代码可能会很有趣,可能会保存 ISN,以便可以确定实际字节,并且您可能会看到哪些接口可用于导出它。