Linux 路由器上的最大连接数较小

Linux 路由器上的最大连接数较小

我有一台 Linux 机器充当路由器,上面没有 iptables 或其他防火墙,也没有运行任何网络应用程序,只有纯粹的路由器。我把它放在一个测试环境中,这个环境会生成许多 TCP 连接,每个连接都有唯一的源 IP 和目标 IP,这些连接会通过这个路由器。我观察到成功创建的连接数上升到大约 500 个,然后几分钟内无法再创建任何连接,然后再创建 100 个连接,然后又出现一次暂停,依此类推。如果为每个源-目标对创建了 10 个连接,那么最大数量就会增加大约 10 倍,因此问题可能出在许多来自不同 IP 的连接上。

由于流量只是简单的路由,因此它与文件描述符的数量、iptables 连接跟踪以及在类似情况下经常建议检查的其他事项无关。该盒子有大量的可用 RAM 和 CPU,两个 NIC 都是千兆位的。内核是 2.6.32。

我已经尝试增加两个网卡上的 net.core.*mem_max、net.core.netdev_max_backlog 和 txqueuelen,但完全没有效果。我还应该检查什么?内核本身是否有速率限制?

答案1

不清楚为什么您确定问题不是由您的某个端点(客户端或服务器)引起的,您生成的流量类型是什么?它适用于不同的设备吗?

答案2

我找到了答案,而且很有趣——ARP 表溢出。测试环境中的流量来自许多位于直接连接网络中的 IP,因此系统必须首先使用 ARP 来找出 MAC,而 Linux 中 ARP 表的默认硬限制仅为 1024 个条目,这使得连接到 2 个不同接口的网络之间的连接数接近 512。当我增加 net.ipv4.neigh.gc_thresh1 以及 .gc_thresh2 和 .gc_thresh3 时,问题就解决了。

相关内容