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,但这与寻址有关,而不是连接数。连接数受到限制,但更多受系统配置和内存大小限制。