linux - 使用 IP 队列时出现 Netlink 错误

标签 linux networking iptables ipv4 netlink

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

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

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

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

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

IP队列的最大长度当前设置为1024,如果溢出,数据包将被丢弃。这是预料之中的,我对此表示同意。

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

"Failed to receive netlink message: No buffer space available"

一开始,我认为这是由于 IP 队列溢出造成的,但经过一些分析,我发现有时即使 IP 队列缓冲区没有溢出,我也会收到错误,有时即使缓冲区确实溢出,我也不会收到消息。

当我运行> 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

查看最后两个值,队列丢弃似乎是指由于缓冲区已满而无法进入 IP 队列的数据包。当我轰炸 linux-router 时,我可以看到这个值上升。 Netlink drop (顾名思义:))似乎与我遇到的错误有关。

我尽了最大努力搜索有关此错误的 Material ,但无法找到任何似乎为我指明所需方向的内容。

底线:为什么我会收到此错误以及如何避免它?

最佳答案

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

关于linux - 使用 IP 队列时出现 Netlink 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517776/

相关文章:

c++ - 如何实现域用户的软件注册?

docker - 限制与 Docker 守护进程的连接 - ext_if 的值应该是多少

centos - 应用防火墙规则 : iptables-restore: Line 49 failed

Java 在 CentOS 最小安装上运行非常慢,但在正常安装上运行速度很快

c - Linux 中的 C Shell 简介

C 原型(prototype)函数 - 目标文件

java - RMI 线程阻止 JVM 在 main() 完成后退出

amazon-web-services - 从 docker 容器内部连接到主机的辅助 IP

linux - 文件内容到 Blob 字符串转换

linux - openwrt中几万条规则的ip规则