【问题标题】:Why can servers support more than 65,536 clients? [duplicate]为什么服务器可以支持超过 65,536 个客户端? [复制]
【发布时间】:2015-09-05 13:12:11
【问题描述】:

让我就我的要求提供一些背景信息,以便清楚地说明:
在 Internet 上的服务器-客户端 TCP 通信的上下文中,当服务器进程运行时,客户端进程可以启动到服务器的 TCP 连接。它通过启动三次握手来实现。
在握手阶段结束时,accept() 函数(在服务器端的 welcoming socket 上调用)将建立一个 new 套接字 - 一个 连接套接字 - 专用于新的传入客户端连接。
从现在开始,直到此连接终止,服务器将通过连接套接字与客户端通信。

由于每个客户端都得到一个连接套接字,而服务器上的 TCP-socket 由一个四元组(src IP 地址,src 端口号,dest IP 地址,dest 端口号)唯一标识,端口号是一个16 位数,那么服务器如何支持超过 65,536 个客户端(嗯,65,536 减去保留的客户端)?

【问题讨论】:

标签: sockets tcp


【解决方案1】:

元组除了客户端端口外还有其他三个成员。如果其中之一发生变化,则可能会发生连接。通常,客户端的端口和 IP 会发生很大变化,以允许服务器使用一个 IP 和一个端口。如果需要,服务器可以使用多个 IP 和多个端口,这很困难。

【讨论】:

  • 所以...服务器上的两个“连接套接字”可以具有相同的本地端口,只要该四元组中的某些其他因素不同?
  • 是的。如果 Web 服务器在端口 80 上接受某些内容,则连接将在端口 80 上。不仅仅是监听。
  • @so.very.tired:如果服务器监听单个 IP/端口,所有连接的客户端将具有相同的服务器端 IP/端口,并通过客户端 IP 进行区分/港口。如果服务器正在侦听多个 IP/端口,则来自同一台机器的两个连接的客户端可以使用相同的客户端 IP 端口,只要它们各自连接到不同的服务器端 IP /港口。这并不常见,但有可能。客户端端口通常是随机选择的,但也可以通过bind() 静态选择。
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2021-11-05
  • 2014-11-23
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多