给定的目标端口是否可以与多个 TCP 连接相关联?

Can a given destination port be associated with more than one TCP connection?

经过一番搜索,我了解了几点

  1. 我们不能为 TCP 多路复用一个端口。
  2. 如果两个连接使用相同的协议并且具有相同的目标端口,则它们必须具有相同的连接。
  3. 我很困惑,有些网站说 TCP 一次只能让一个应用程序侦听同一个端口,而其他网站说多个侦听 TCP 套接字,都绑定到同一个端口,可以共存,前提是它们都绑定到不同的本地 IP 地址。

阅读以上内容让我比以往更加困惑。一个目标端口是否可以关联多个 TCP 连接?

We cannot multiplex a port for TCP.

这是错误的。您可以可以 运行 同一端口上的多个 TCP 连接,只要它们是唯一连接即可。并且在同一进程内编写多路复用 I/O 多个 TCP 套接字的代码也不是很难。

If two connections use the same protocol and have the same destination ports, they must have the same connection.

这是错误的。 TCP 连接由协议 + 本地 IP/port + 和远程 IP/port.

的组合唯一标识

使用相同协议和相同目标的两个连接 IP/port 如果它们使用不同的源 IP/port 进行连接,则它们仍然是唯一的。例如,如果同一台机器上的多个客户端 运行ning 使用不同的本地端口进行连接,则它们可以连接到同一台服务器。这是典型的情况,因为大多数客户端使用由 OS 选择的随机可用本地端口用于出站连接。

同样,使用相同协议和相同源的两个连接 IP/port 如果连接到不同的目的地 IP/port,则它们仍然是唯一的。例如,同一台机器上的多个客户端 运行 如果连接到不同的服务器,则可以使用相同的本地 IP/port 进行连接。

some sites say that TCP can only have one application listening on the same port at one time

这是正确的,但前提是所有听众都试图同时使用同一个本地 IP/port。它只允许 1 个侦听器。

others say multiple listening TCP sockets, all bound to the same port, can co-exist, provided they are all bound to different local IP addresses.

这是正确的。

Can a destination port be associated with more than one TCP connection?

是的。即使该端口上只有 1 个侦听器,它接受的每个连接都将使用服务器端的相同本地端口,但来自客户端的不同来源 IP/port。这允许来自不同远程机器的多个客户端同时连接到同一台服务器。