Linux 上每个 IP 地址打开的 TCP 连接数是否有 65536 个的硬性限制?

Linux 上每个 IP 地址打开的 TCP 连接数是否有 65536 个的硬性限制?

Linux 上每个 IP 地址的 TCP 连接数是否有 65536 个的硬性限制?我读到过某个地方有这个限制,但有人要求确认,我就是找不到。

我似乎记得文件描述符是一个 16 位整数,这在某种程度上限制了它?

或者这只是胡说八道,除了服务器有多强大之外,难道就没有其他限制吗?

答案1

您可能正在考虑端口数量。在当前版本的 IPv4 中,TCP 中有 65536 个可用端口。这不仅仅是 Linux 的限制,它是协议的一部分。您的 IP 地址标识您的机器,端口标识您机器上的程序。

但是,连接数不受此限制。连接由 5 条信息组成,用极客的话来说就是 5 元组。它由协议(TCP、UDP)、本地 IP 地址和端口以及远程 IP 地址和端口决定。因此,以网络服务器为例。它可以在同一个端口(最有可能是 80)上为许多连接提供服务。您的网络服务器甚至可以支持到同一客户端计算机的多个连接。假设您从两个窗口连接到 google.com。您的机器将为每个连接选择一个未使用的端口。因此,谷歌的服务器必须跟踪(TCP、google.com、80、yourmachine、someport1)和(TCP、google.com、80、yourmachine、someport2)。在某些时候你会遇到限制,但这不是硬性限制,并且非常依赖于系统。

是的,每个套接字都是一个文件描述符,但并非所有机器都使用短句作为 fd 表。在我的系统上,一个完全没有调整的系统,cat /proc/sys/fs/file-max给出了 323997。我确信如果需要的话我可以提高它。

因此,限制为 65336,但这与寻址有关,而不是连接数。连接数受到限制,但更多受系统配置和内存大小限制。

相关内容