关于单个 TCP 端口

网络工程 tcp
2022-02-15 12:57:08

在编写 Java 程序时,我注意到一个 TCP 端口(ServerSocket)可以连接到许多连接(套接字)。这是否意味着单个 TCP 端口理论上可以处理无限连接?

2个回答

TCP 元组由以下部分组成:

  • 源IP
  • 源端口
  • 目的IP
  • 目的端口

由于您的服务器套接字正在侦听一个端口,并且我假设一个 IP 地址(尽管可能更多),其余因素是远程端的 IP 地址和端口,即客户端。

IPv4 有 2^32 个地址,其中大约 35 亿个可用。有 2^16 个端口,其中大部分不会被客户端使用,因为大多数 TCP 堆栈只使用一个高范围,但是假设我们正在处理一个可以使用任何端口的客户端,这样就可以为您提供潜在的连接数量大约 3.5*65000 = 229*10^12。这比您希望在单个服务器上实际处理的要多。

仅存在 65536 个端口(从 0 到 65535),其中一个由 IANA 定位到众所周知的端口(低于 1024)、注册端口(从 1024 到 49151,可以被任何应用程序使用)和私有或动态端口(从 49152 到 65535 动态分配给发起连接的客户)。从理论上讲,如果您的设备上有很多 CPU 和 RAM,则从一个端口,您只能启用 65536 个插槽。