我似乎对 IP 队列有疑问。
我有一台 linux 机器,我用它来运行一些实验。linux机器被配置成路由器,有两个网卡,连接另外两台电脑,管理它们的网络流量。使用 iptables 捕获所有传入的包,并由 C 应用程序进行分析。
作为实验的一部分,分析数据包的应用程序具有内置延迟。
所以我有一台非常快的计算机通过我的 linux-router 发送数据包,还有一个(相对)慢的 linux-router 一个一个地分析和处理数据包。
这种情况导致这样一个事实,即当我在连接到 linux-router 的一台计算机上启动发送方应用程序时,我在 linux-router 上的 IP 队列(几乎)瞬间被填满。
IP 队列的最大长度当前设置为 1024,如果溢出,则丢弃数据包。这是意料之中的,我可以接受。
但是,(这就是有趣的地方),我时不时地收到以下错误:
“接收网络链接消息失败:没有可用的缓冲区空间”
一开始以为是IP队列溢出导致的,但分析后发现有时IP队列缓冲区没有溢出也会报错,有时即使缓冲区DID也收不到消息溢出。
当我运行时> cat /proc/net/ip_queue
,我得到下表(也用于监控 IP 队列溢出):
Peer PID : 27389
Copy mode : 2
Copy range : 65535
Queue length : 0
Queue max. length : 1024
Queue dropped : 1166875
Netlink dropped : 2916
查看最后两个值,Queue dropped
似乎是指由于缓冲区已满而无法进入 IP 队列的数据包。当我轰炸 linux-router 时,我可以看到这个值上升。Netlink dropped
(顾名思义:))似乎与我遇到的错误有关。
我尽我所能搜索有关此错误的材料,但找不到任何似乎指向我所需方向的内容。
底线:为什么我会收到此错误,我该怎么做才能避免它?