在编写 Java 程序时,我注意到一个 TCP 端口(ServerSocket)可以连接到许多连接(套接字)。这是否意味着单个 TCP 端口理论上可以处理无限连接?
关于单个 TCP 端口
网络工程
tcp
2022-02-15 12:57:08
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 个插槽。