使用IP队列时出现Netlink错误

时间:2012-11-22 17:43:57

标签: linux networking iptables ipv4 netlink

我似乎遇到了IP队列的问题。

我有一台linux机器用于运行一些实验。 Linux机器配置为路由器,具有两个NIC,连接另外两台计算机,并管理其网络流量。 使用iptables捕获所有传入的包,并通过C应用程序进行分析。

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

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

这种情况导致我在连接到linux路由器的其中一台计算机上启动发送方应用程序时,linux路由器上的IP队列(几乎)立即被填满。

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

但是,(这就是它变得有趣的地方),偶尔会出现以下错误:

  

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

一开始,我认为这是由于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(顾名思义:))似乎与我得到的错误有关。

我尽力搜索有关此错误的材料,但无法找到任何似乎指向我所需方向的内容。

底线:为什么我会收到此错误,我该怎么办才能避免此错误?

1 个答案:

答案 0 :(得分:0)

尝试使用setsockopt增加netlink接收套接字上的接收缓冲区空间..这应该删除错误!