确定TCP有效负载活动/统计信息



我想为给定的文件描述符或给定的接口查找TCP有效负载活动的计数器(接收的总字节数)。最好是给定的文件描述符,但对于接口来说就足够了。理想情况下,我真的很想知道任何已经确认的字节,即使是我还没有读取到用户空间的字节(还?)。

我已经看到了getsockopt()TCP_INFO功能,但据我所知,没有一个字段显示存储"接收的总字节数"或"发送的总字节(例如acked)"。

我还看到了接口的netlink IFLA_STATS+RTNL_TC_BYTESSIOCETHTOOL+ETHTOOL_GSTATS ioctl()rx_bytes字段),这些都很棒,但我认为它们无法区分其他层的开销/标头和实际有效载荷字节。

procfs/proc/net/tcp,但这似乎也不包含我想要的内容。

有什么方法可以得到这些特定的数据吗?

EDIT:混杂模式对吞吐量有着难以忍受的影响,所以我不能利用任何使用它的东西。更不用说实现IP堆栈的大部分来确定哪些数据包是合适的,这超出了我对该解决方案的预期范围。

目标是对我从recvmsg()中存储的值进行全面/不信任/秒的猜测。

正确的事情™要做的是正确跟踪这些值,但有一个简单的"嘿,OS?这个套接字上我真的收到了多少字节?"

还可以使用ioctl调用和SIOCINQ来获取接收缓冲区中排队的未读数据量。以下是手册页中的用法:http://man7.org/linux/man-pages/man7/tcp.7.html

int value;
error = ioctl(tcp_socket_fd, SIOCINQ, &value);

对于接口TCP统计数据,我们可以使用"netstat-i-p TCP"来查找每个接口的统计数据。

您想将其用于诊断还是用于开发?

如果进行了诊断,tcpdump可以通过端口和主机详细信息过滤,准确地告诉您网络上发生了什么。

如果是为了发展,也许更多关于你试图实现的目标的信息会有所帮助。。。

ifconfig提供RX和TX总计。

ifconfig从/proc/net/dev获取这些详细信息(您可以通过strace-ifconfig看到)。

还有netstat-t提供的Send/Receive-Q值,如果它更接近您想要的值的话。

也许/proc/net/dev中的统计数据会有所帮助。我不熟悉有效载荷与包括报头在内的完整数据包的计数,所以这个问题很难回答。

至于各个文件描述符的统计数据,我不知道有任何标准的方法可以获得这些信息。

如果可以控制需要统计信息的程序的启动,那么可以使用一个"拦截器"库,该库实现自己的read()、write(),sendto()和recvfrom()调用,将调用传递到标准C库(或直接传递到系统调用),保留活动的计数器,并找到发布这些值的方法。

如果您不想只计算每个接口的RX/TX总数(已在ifconfig/iroute2工具中提供)。。。

如果您进一步研究/proc,您可以获得更多的信息。更具体地说是CCD_ 12。

样本输出:

    Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 12106810846 8527175    0 15842    0     0          0    682866 198923814 1503063    0    0    0     0       0          0
    lo: 270255057 3992930    0    0    0     0          0         0 270255057 3992930    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

如果您开始查找,则信息来自Linux内核的net/core/net-procfs.c(procfs仅使用此信息)。当然,所有这些都意味着你需要特定的过程来跟踪。

您可以仔细阅读/proc中的可用信息,或者如果您需要更稳定的信息,那么专门为您的应用程序复制net-profs功能可能是有意义的。

最新更新