【发布时间】:2011-01-21 22:42:50
【问题描述】:
可以在同一端口(单套接字)上与服务器通信的并发客户端(使用不同端口号)的最大数量是多少?有哪些因素会影响这个计数?我正在 Linux 环境中寻找此信息 w.r.t telnet。
【问题讨论】:
标签: linux sockets network-programming client-server telnet
可以在同一端口(单套接字)上与服务器通信的并发客户端(使用不同端口号)的最大数量是多少?有哪些因素会影响这个计数?我正在 Linux 环境中寻找此信息 w.r.t telnet。
【问题讨论】:
标签: linux sockets network-programming client-server telnet
这部分取决于您的操作系统。
但对特定端口没有限制。然而,并发连接的数量是有限制的,通常受内核支持的文件描述符数量的限制(例如 2048)。
要记住的是,TCP 连接是唯一的,并且连接是一对端点(本地和远程 IP 地址和端口),因此 1000 个连接是否连接到服务器上的同一端口并不重要,因为连接仍然是唯一的,因为另一端不同。
另一个需要注意的限制是,一台机器只能建立大约 64K 的出站连接或内核对连接的限制,以较低者为准。这是因为端口是一个无符号的 16 位数字 (0-65535),每个出站连接都使用其中一个端口。
您可以通过为机器提供额外的 IP 地址来扩展此功能。每个 IP 地址是另一个 64K 地址的地址空间。
【讨论】:
比你关心的更多。或者更确切地说。
我可以保证它不仅仅是所有这些。大量套接字存在可扩展性限制,可以解决(谷歌解决 c10k 问题)。在实践中,Linux 下单个进程可以使用超过 10,000 个套接字。如果每台服务器有多个进程,则可以再次增加。
没有必要使用单个端口,因为您的专用负载平衡器将能够在需要时轮询多个端口。
如果您正在为 1000 多个客户端进程中的 10 多个运行服务,那么它继续工作可能相当重要,因此无论如何您都需要多台服务器来实现冗余。因此,部署更多服务器不会有问题。
【讨论】:
我在 Windows 上进行了测试,在单个套接字上进行了多个环回连接。 Windows 拒绝在 16372 标记之后分配任何内容。
【讨论】: