使用IP队列时出现Netlink错误

我似乎有一个IP队列的问题。

我有一台用来运行一些实验的Linux机器。 linux机器被configuration成一个路由器,有两个网卡,连接另外两台计算机,并pipe理他们的networkingstream量。 使用iptables捕获所有传入的软件包,并由C应用程序分析。

作为实验的一部分,分析数据包的应用程序具有内置延迟。

所以我有一台非常快的计算机通过我的linux路由器和一个相对慢的linux路由器发送数据包,逐个分析和处理数据包。

这种情况导致了这样的事实:当我在连接到linux-router的一台计算机上启动发件人应用程序时,linux-router上的IP队列被(几乎)瞬间填满。

IP队列的最大长度当前设置为1024,如果溢出则丢弃数据包。 这是预期的,我很好。

但是,(这是有趣的地方),每隔一段时间我会得到以下错误:

“无法接收networking连接消息:没有可用的缓冲区空间”

在开始时,我以为这是由于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路由器。 Netlink dropped (因为它的名字暗示:)似乎与我得到的错误。

我尽了最大的努力去寻找这个错误的材料,但没能find任何似乎指向我的方向。

底线:为什么我得到这个错误,我能做些什么来避免它?