有没有办法将短暂端口的数量加倍并在16位限制附近工作?我尝试在eth0上创建虚拟以太网接口,并希望能够解除限制。虽然应用程序在出站流量中使用新的虚拟IP,但它似乎仍然达到了相同的临时端口限制。我想虚拟端口与物理接口上的端口有一对一的映射。
ifconfig eth0:1 10.10.10.210 netmask 255.255.255.192 ifconfig eht0:2 10.10.10.211 netmask 255.255.255.192
有人可以建议我如何在不添加额外NIC的情况下将Linux中的短暂端口总数翻倍?
(仅供参考,我已尝试增加ulimit / max打开文件,更改端口范围,启用tcp recycle / timestamps,减少tcp fin超时...我想我们只需要超过65k端口用于此代理机器。)< / p>
答案 0 :(得分:3)
如果您在eth0上创建虚拟接口,那么您应该能够为这些接口分配不同的IP地址。有了这个,您可以使用相同的短暂端口号(它们在内核中分配,因此您实际上没有太多控制权),每个端口都绑定到不同的地址 - 您可能需要设置SO_REUSEADDR选项。这将起作用的原因是因为对于传入的数据包(UDP / TCP),通过查看本地源IP和端口号来识别流。
正如@Duck所提到的,由于TCP / UDP报头只为端口号分配16位,因此增加本地堆栈中的短暂范围没有多大意义。
答案 1 :(得分:1)
这是网络协议的限制。 TCP&amp;例如,UDP具有16位源和目标端口。即使你可以增加端口数量,也没有人可以解决它们。
答案 2 :(得分:0)
事实证明,如果要超过65535限制,则不能使用0来绑定临时端口。相反,您需要使用显式端口号。
并启用tcp_tw_reuse
可能会有所帮助:http://krenel.org/tcp-time_wait-and-ephemeral-ports-bad-friends.html
答案 3 :(得分:0)
这似乎是一种方式,但它不是免费的。在连接之前它被称为&#34;绑定&#34;。请参阅this short but dense article,它总结得非常好。
拥有多个虚拟IP只是一个开始。引用链接文章:
在Linux上,短暂的端口范围是全局资源,它不是IP地址本地的特定设置。
这很糟糕,你必须通过几个正确的设置(你已经找到大部分设置)来改善你的起始位置,并通过一个聪明的套接字分配技术来绕过全局限制。结果是您将手动控制所有传出IP。这似乎也不能很好地处理使用传统&#34; connect&#34;的系统上的其他应用程序。方式。