我无法尝试从 Linux(RedHat5)机器设置超过 65536 个传出的 TCP 连接。
我已经配置了传出和接受框以允许足够的文件描述符。
我不相信接受方面存在问题 - 我有多个目标箱,每个目标箱都有多个 IP 地址,并且我使用多个端口。
在传出方面,我不认为每个 IP 地址都达到了限制 - 我使用了多个 IP 地址和端口(我为多个 IP 地址中的每一个都打开了从 30,000 - 60,000 端口的连接)。
我是否遗漏了某些 Linux 内核可调参数?或者 TCP 中存在某些基本限制?
失败的原因是用于打开连接的应用程序挂在 connect() 调用中。
感谢 NickB 的帮助
答案1
这是一个博客,有人从一个盒子里获取了超过 1,000,000 个出站邮件。
- Richard Jones,MetaBrew.com,2008-11-04,使用 Mochiweb 开发百万用户的 Comet 应用程序,第 3 部分, 部分将其提高到 100 万(存档这里。
在第 1 部分中,我们将范围设置为“1024 65535” - 这意味着有 65535-1024 = 64511 个非特权端口可用。其中一些将被其他进程使用,但我们永远不会获得超过 64511 个客户端连接,因为我们将用尽端口。
...
因此,我们来启动 17 个新 IP 地址,每个地址建立 62,000 个连接,这样一共就有 1,054,000 个连接
答案2
TCP 协议仅使用 16 位来表示目标端口和源端口。无法同时打开超过 65536 个端口 - 即使是在 Linux 上也不行。
答案3
在此上下文中,“单个接口”是指单个网络接口,并为其分配单个 IP 地址。每个出站 TCP 连接都绑定到单独的端口,因此您的示例是不可能的。