微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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”来基于每个接口查找统计信息.

原文地址:https://www.jb51.cc/linux/394822.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐