linux – 确定TCP有效负载活动/统计信息
我想查找给定文件描述符或给定接口的TCP有效负载活动的计数器(接收的总字节数).优选地,给定文件描述符,但是对于接口就足够了.理想情况下,我真的想知道任何已被识别的字节,即使是那些我还没有读入用户空间的字节(但是?).
我已经看到了getsockopt()的TCP_INFO特性,但是据我所知,没有一个字段看起来存储“接收的总字节数”或“传输的总字节数(例如,acked)”. 我还看到了netlink IFLA_STATS RTNL_TC_BYTES和SIOCETHTOOL ETHTOOL_GSTATS ioctl()(rx_bytes字段)的接口,这些很棒,但我不认为他们能够区分对方的开销/头文件.层和实际的有效负载字节. procfs有/ proc / net / tcp但这似乎不包含我正在寻找的东西. 有没有办法获得这个特定的数据? 编辑:混杂模式对吞吐量有不可承受的影响,所以我无法利用任何使用它的东西.更不用说实现IP堆栈的大部分以确定哪些数据包是合适的超出了我对此解决方案的预期范围. 我的目标是对recvmsg()存储的值进行总体/不信任/第二次猜测. 正确的事情是要正确地跟踪这些值,但是有一个简单的“嘿OS?我在这个套接字上真正接收了多少字节?”是很有价值的. 解决方法
也可以使用带有SIOCINQ的ioctl调用来获取接收缓冲区中排队的未读数据量.以下是手册页中的用法:
http://man7.org/linux/man-pages/man7/tcp.7.html
int value; error = ioctl(tcp_socket_fd,SIOCINQ,&value); 对于接口TCP统计信息,我们可以使用“netstat -i -p tcp”来基于每个接口查找统计信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |