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

时间:2010-02-28 04:21:10

标签: linux sockets network-programming client-server telnet

可以在同一端口(单个套接字)上与服务器通信的最大并发客户端数(使用不同的端口号)是多少?有什么因素会影响这个数量?我正在Linux环境中查找w.r.t telnet的这些信息。

3 个答案:

答案 0 :(得分:30)

这部分取决于您的操作系统。

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

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

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

您可以通过为计算机提供额外的IP地址来扩展此功能。每个IP地址是另一个64K地址的地址空间。

答案 1 :(得分:5)

比你更关心。或者更确切地说。

  • 超过您的代码实际可以处理(出于其他原因)
  • 比你的客户更多
  • 出于性能原因,您可以在单个方框上处理
  • 您需要的不仅仅是一个盒子,因为负载均衡器会因为可用性原因将它们分配到几个盒子中

我可以保证它不仅仅是所有这些。大量套接字存在可扩展性限制,可以解决(Google针对c10k问题)。实际上,Linux下的单个进程可以使用超过10,000个套接字。如果每台服务器有多个进程,则可以再次增加该进程。

没有必要使用单个端口,因为您的专用负载平衡器将能够在需要时循环使用多个端口。

如果您为1000多个客户端进程运行服务,那么它继续工作可能相当重要,因此无论如何您将需要多个服务器来实现冗余。因此,部署更多服务器时不会遇到问题。

答案 2 :(得分:-1)

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