29

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

4

3 回答 3

38

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

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

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

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

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

于 2010-02-28T04:25:39.200 回答
5

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

  • 超出您的代码实际可以处理的范围(出于其他原因)
  • 比你的客户实际赚的多
  • 出于性能原因,您无法在单个盒子上处理更多内容
  • 超过你在一个盒子上的需要,因为你的负载均衡器无论如何都会出于可用性原因将它们分配给几个

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

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

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

于 2010-02-28T21:59:14.113 回答
-1

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

于 2011-05-07T17:41:23.830 回答