在Linux上,每个IP地址是否有65536个开放TCP连接的硬限制?


23

在Linux上,每个IP地址是否有65536个开放TCP连接的硬限制?我在某处阅读过,但有人要求确认,但我找不到。

我似乎记得那是关于文件描述符是16位整数的某种说法,它以某种方式限制了它?

还是这是骗局,除了服务器的强大程度之外,没有其他限制吗?

Answers:


35

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

但是,连接数不受此限制。一个连接包含5条信息,用极客说的是5元组。它由协议(TCP,UDP),本地IP地址和端口以及远程IP地址和端口确定。因此,请使用网络服务器。它可以为同一端口(很可能为80)上的许多连接提供服务。您的网络服务器甚至可以支持到同一客户端计算机的多个连接。假设您要从两个窗口连接到google.com。您的机器将为每个连接选择一个未使用的端口。因此,Google的服务器将必须跟踪(TCP,google.com,80,yourmachine,someport1)和(TCP,google.com,80,yourmachine,someport2)。在某些时候,您会遇到限制,但这不是硬性限制,并且与系统密切相关。

是的,每个套接字都是文件描述符,但并非所有机器都为fd表使用short。在我的系统上,一个没有经过全部调优的系统可以cat /proc/sys/fs/file-max提供323997。我确信我可以根据需要提高它。

因此,限制为65336,但这与寻址有关,与连接数无关。连接数量受限制,但更多受系统配置以及它具有多少内存的限制。


2
因此,请重述5元组:即使我仅限于65536个端口,也只能将每个传入IP地址的连接限制为64k ,对吗?因此,唯一的限制是文件描述符,但不一定是16位?所以基本上您在说什么没有限制?
克里斯(Chris

1
是。另请参见:en.wikipedia.org/wiki/Transmission_Control_Protocol部分“资源使用情况”
user12889 2011年

3
@Chris:在单个本地端口上,每个传入IP地址的连接数为64k ,是的。
grawity 2011年

@克里斯说什么谢谢。5元组与另一台机器最多有(但从未达到)65536个组合。实际上,您永远不会到达那里,因为一台机器不能使用任何旧端口进行连接-有些是出于特定原因保留的。
Rich Homolka'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.