通过增加额外的以太网接口来增加临时端口

有没有办法让短暂的端口数增加一倍,并在16位的限制内工作? 我曾尝试通过eth0创build虚拟以太网接口,并希望能够取消限制。 尽pipe应用程序在出站stream量中使用了新的虚拟IP,但似乎仍然达到了同样的临时端口限制。 我假设虚拟端口与物理接口上的端口有1对1映射。

ifconfig eth0:1 10.10.10.210 netmask 255.255.255.192 ifconfig eht0:2 10.10.10.211 netmask 255.255.255.192

有人可以请告诉我如何可以在Linux中的短暂端口总数加倍,而无需添加额外的NIC?

(仅供参考,我曾尝试增加ulimit / max打开文件,更改端口范围,启用tcp循环/时间戳,减lesstcp fin超时…我想我们只需要超过65k端口为此代理机器。

如果您通过eth0创建虚拟接口,则应该可以为这些接口分配不同的IP地址。 有了这个,你可以使用相同的临时端口号(它们分配在内核中,所以你真的没有太多的控制),每个绑定到不同的地址的多个套接字 – 你可能需要设置SO_REUSEADDR选项。 这将起作用的原因是因为对于传入数据包(UDP / TCP),通过查看本地源IP和端口号来识别流。

正如@Duck所提到的那样,由于TCP / UDP报头只为端口号分配16位,所以在本地堆栈中增加临时范围没有太多意义。

这是网络协议的限制。 例如,TCP和UDP都有16位的源和目的端口。 即使你可以增加端口的数量,也没有人能解决它们。

似乎有一种方法,但它不是免费的。 它被称为“连接之前的绑定”。 看这篇短小而密集的文章 ,总结得非常好。

拥有多个虚拟IP只是一个开始。 引用链接的文章:

在Linux上,临时端口范围是一个全局资源,它不是IP地址本地的特定设置。

所以这很糟糕,你必须用几个正确的设置(其中大部分已经找到了)来改善你的起始位置,并且用聪明的套接字分配技术绕过全局限制。 结果就是您将手动控制所有传出的IP。 这似乎也不能很好地处理使用传统“连接”方式的系统上的其他应用程序。

事实证明,如果你想超过65535的限制,你不能使用0来绑定临时端口。 相反,您需要使用明确的端口号。

还打开tcp_tw_reuse可能会有所帮助: http : tcp_tw_reuse