服务器单个端口(套接字)的最大并发连接数

29

在同一端口(单个套接字)上,使用不同端口号的并发客户端的最大数量是多少?有哪些因素可能影响这个数量?我正在寻找关于Linux环境中telnet的信息。


同样的问题,请参见 https://dev59.com/8nE95IYBdhLWcg3wY85l - wow qing
3个回答

39

这在一定程度上取决于您的操作系统。

然而,没有特定端口的限制。但是并发连接数有限制,通常由内核支持的文件描述符数量(例如2048)所限制。

需要记住的是,TCP连接是唯一的,连接是一对端点(本地和远程IP地址和端口),因此如果1000个连接连接到服务器上的同一端口,并不重要,因为连接仍然是唯一的,因为另一端是不同的。

要注意的另一个限制是一台机器只能建立约64K个出站连接,或者连接的内核限制,以较小的值为准。因为端口是一个无符号的16位数字(0-65535),每个出站连接都使用其中的一个端口。

您可以通过给机器提供附加的IP地址来扩展此功能。每个IP地址都是另一个64K地址空间。


另一个需要提到的是客户端临时端口范围。 - Nikolai Fetissov
在继续我的搜索时,我发现了以下关于BSD的链接,其中提供了一些关于kern.maxfiles的好建议。每个打开的文件、套接字或FIFO使用一个文件描述符,大规模生产服务器可能需要许多数千个文件描述符,具体取决于同时运行的服务的种类和数量 - http://www.freebsd.org/doc/handbook/configtuning-kernel-limits.html 快速链接难道不起作用吗?我认为这也在这里扮演着重要的角色。 - Karthik Balaguru
因此,文件描述符似乎是决定Linux服务器上特定端口上并发连接数量的主要因素之一。下面的链接似乎传达了在Linux中增加最大文件描述符数量的方法 - http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html - Karthik Balaguru
1
TCP/UDP 缓冲区大小是另一个不容忽视的因素,对于性能来说非常重要。 - Robin Hsu

5

比你所关心的要多。或更确切地说。

  • 比你的代码实际处理能力更强(出于其他原因)
  • 比你的客户实际使用要少
  • 对于性能原因,单台服务器无法承载如此多的负载
  • 由于可用性原因,你不需要在单个服务器上使用这么多资源,因为你的负载均衡器会在多个服务器间进行分配

我可以保证这个数字远远超过以上所有情况。当涉及到大量socket时,存在可扩展性限制,但是这可以通过一些方法来解决(搜索C10k问题)。在Linux下,单个进程可用处理超过10,000个socket的情况。如果一个服务器有多个进程,则可再次增加这个数量。

不必使用单个端口,因为专门的负载均衡器可以轮流使用多个端口。

如果你运行的服务有数万个客户端进程,那么保持服务的正常运行可能非常重要,因此你必须具备多台服务器以保证冗余。因此,部署更多的服务器不应该成为问题。


1
有趣的是,负载均衡器将对多个端口进行轮询! - Karthik Balaguru
一个系统(Linux)可以轻松地使用数十万个(如果有的话)套接字。肯定是所有可用的。你正在做出错误的假设。 - lucian303

-1

我在Windows上进行了测试,向单个套接字执行多个环回连接。在16372标记之后,Windows拒绝分配任何内容。


6
环回连接有其自身的局限性。 首先,客户端操作系统通常只使用一定范围内的临时端口(因此,只创建给定数量的端口)。 其次,与127.0.0.1(环回地址)的连接通常将为所有连接使用相同的源地址(即127.0.0.1)。 你需要显式地绑定本地端点到不同的地址来解决这些限制。 - cHao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接