Linux 上超过 65536 个 TCP 连接

Nic*_*ckB 11 linux tcp

我一直在尝试从 Linux (RedHat5) 机器设置超过 65536 个传出 TCP 连接。

我已经配置了传出和接受框以允许足够的文件描述符。

我认为接受方没有问题 - 我有多个目标框,每个目标框都有多个 IP 地址,并且我使用了多个端口。

在传出方面,我不相信我会达到每个 IP 地址的限制 - 我使用了多个 IP 地址和端口(我正在为多个 IP 地址中的每一个打开来自端口 30,000 - 60,000 的连接)。

是否有一些我遗漏的 Linux 内核可调参数?还是 TCP 中的一些基本限制?

失败是我用于打开连接的应用程序挂在 connect() 调用中。

感谢您的帮助

小智 10

这是一个博客,其中有人从一个盒子中获得了 > 1,000,000 个出站。

  • Richard Jones,MetaBrew.com,2008 年 11 月 4 日,Mochiweb的百万用户 Comet 应用程序,第 3 部分,部分将其提高到 100 万(存档在此处。)

在第 1 部分中,我们将范围设置为“1024 65535”——这意味着有 65535-1024 = 64511 个非特权端口可用。其中一些将被其他进程使用,但我们永远不会超过 64511 个客户端连接,因为我们将耗尽端口。

...

因此,让我们调出 17 个新 IP 地址,目的是从每个 IP 地址建立 62,000 个连接——总共给我们 1,054,000 个连接


小智 0

TCP 协议仅对目标端口和源端口使用 16 位。即使使用 Linux,也无法同时打开超过 65536 个端口。

  • 每个连接都由一个由远程地址和端口以及本地地址和端口组成的元组来标识。因此,来自不同远程主机的入站连接可能超过 65536 个。> 主机上的单个接口不可能有 65536 个出站连接,而且您的连接数量将被限制为略低于此数量,因为总会有一些端口在使用中。 (5认同)
  • 这仅适用于一个 IP 地址。如果您使用多个 IP 地址,则每个 IP 地址应该能够拥有 65536 个开放端口。 (3认同)