【问题标题】:Maximum number of concurrent connections on a single port (socket) of ServerServer单端口(socket)最大并发连接数
【发布时间】:2011-01-21 22:42:50
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 另外需要提及的是客户端临时端口的范围。
  • 在继续搜索时,我在下面的链接 wrt BSD 中找到了一些关于 kern.maxfiles 的优点,因为每个打开的文件、套接字或 fifo 都使用一个文件描述符和大规模生产服务器可能很容易需要数千个文件描述符,具体取决于同时运行的服务的种类和数量 - freebsd.org/doc/handbook/configtuning-kernel-limits.html 快速链接没有发挥作用吗?我认为,这在这里也起着重要作用。
  • 因此,文件描述符似乎是决定 Linux 服务器特定端口上的并发连接数的主要因素之一。下面的链接似乎传达了增加 Linux 中文件描述符最大数量的方法 - cyberciti.biz/faq/… cs.uwaterloo.ca/~brecht/servers/openfiles.html
  • TCP/UDP 缓冲区大小是另一个不可忽视的因素,出于性能原因。
【解决方案2】:

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

  • 超出您的代码实际可以处理的范围(出于其他原因)
  • 比您的客户实际赚的多
  • 出于性能原因,您无法在单个盒子上处理更多内容
  • 由于可用性原因,您的负载均衡器会将它们分布在多个盒子中

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

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

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

【讨论】:

  • 很高兴知道负载平衡器会循环使用多个端口!
  • 一个人可以轻松地在单个系统 (Linux) 上使用数十万个(如果它们可用)套接字。绝对是所有可用的。你的假设是不正确的。
【解决方案3】:

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

【讨论】:

  • 环回连接有其自身的局限性。一方面,客户端的操作系统通常只会使用特定范围内的临时端口(因此,只会创建给定数量的临时端口)。另一方面,到 127.0.0.1(环回地址)的连接通常会使用相同的源地址(即 127.0.0.1)。您必须将本地端显式绑定到不同的地址才能解决这些限制。
猜你喜欢
  • 1970-01-01
  • 2013-03-30
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多