【问题标题】:Netlink error while using IP queue使用 IP 队列时出现 Netlink 错误
【发布时间】:2012-11-22 17:43:56
【问题描述】:

我的 IP 队列似乎有问题。

我有一台 linux 机器,我用它来运行一些实验。 linux机器被配置成路由器,有两个网卡,连接另外两台电脑,管理它们的网络流量。 使用 iptables 捕获所有传入的包,并由 C 应用程序分析。

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

所以我有一台速度非常快的计算机通过我的 linux-router 发送数据包,还有一台(相对)较慢的 linux-router 逐个分析和处理数据包。

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

IP 队列的最大长度当前设置为 1024,如果溢出,数据包将被丢弃。这是意料之中的,我可以接受。

但是,(这就是有趣的地方),我时不时会收到以下错误:

“接收网络链接消息失败:没有可用的缓冲区空间”

一开始我以为是IP队列溢出导致的,但经过分析发现有时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(顾名思义:))似乎与我遇到的错误有关。

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

底线:为什么我会收到此错误,我可以做些什么来避免它?

【问题讨论】:

  • 我认为你不应该延迟你的 NFQUEUE,而是使用 qdisc(可能由 NFQUEUE 通过在数据包上放置不同的标记来选择,并从数据包标记中选择 qdisc)。

标签: linux networking iptables ipv4 netlink


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2018-06-30
    • 2017-12-18
    相关资源
    最近更新 更多