TCP 连接打开后会移动到另一个端口吗? [复制]

Posted

技术标签:

【中文标题】TCP 连接打开后会移动到另一个端口吗? [复制]【英文标题】:Do TCP connections get moved to another port after they are opened? [duplicate] 【发布时间】:2011-04-08 00:37:48 【问题描述】:

如果 TCP 套接字服务器在端口 28081 上侦听传入连接,然后接受连接并开始接收数据。数据进入的端口是否仍然是 28081 或端口是否已更改。

例如,在下面的伪代码中,传入的数据来自哪个端口?还是28081还是操作系统分配了新端口?:

bind
listen (on port 28081)

while 1
  fd = accept
  fork
  if child process incoming data 

【问题讨论】:

另见this question。 【参考方案1】:

一个 TCP 连接由两个 (IP address, TCP port) 元组唯一标识(每个端点一个)。因此,根据定义,不能移动连接的端口或 IP 地址,而只能打开不同的端口或 IP 地址。

如果服务器绑定到端口 28081,所有接受的连接都将在服务器端使用此端口(尽管它们很可能在客户端具有不同的端口号)。

例如,如果来自同一客户端计算机的两个进程将连接到同一台服务器,则服务器端的IP addressTCP port 对于这两个连接将是相同的。然而,在客户端,它们将有两个不同的端口号,允许双方的操作系统唯一地识别接收到的 TCP 数据包应该分配给哪个进程和文件描述符。

【讨论】:

谁处理客户端上的端口指定?操作系统层是否识别现有连接的精确匹配并将新连接动态映射到新端口? 杰西,我不确定我是否完全理解这个问题。当客户端打开到服务器端口 28081 的新连接时,它会确保它使用尚未用于同一服务器主机和端口的源端口地址。 IE。如果您有客户端源端口 40'000 到服务器端口 28081 的连接,则下一个连接可以使用源端口 40'001 到端口 28081 上的同一服务器。这样可以确保客户端和服务器都知道这是一个新连接,因为 (client IP address, client TCP port, server IP address, server TCP port) 的四个数量中至少有一个不同。 "一个 TCP 连接由一个两个(IP 地址,TCP 端口)唯一标识" 它由 两个 定义。在两台机器上。如果不是服务器,则无法在同一端口和 IP 上打开多个连接。 是的,我应该删除 'two' 之前的 'a',这样它就变成了 two ... tuples【参考方案2】:

可以有多个客户端连接到一个端口,因为连接由服务器和客户端 IP 地址和端口标识。因此,接受来自一个客户端的连接不会阻止其他客户端的连接。您甚至可以从同一个客户端再次连接(使用另一个客户端端口)。

【讨论】:

【参考方案3】:

是的,它保留在该端口上,尽管某些协议 (FTP) 可能会在另一个端口上打开第二个连接。不要将端口视为物理路径或插头,就像 USB 端口只能插入一个东西。而是将其视为所请求服务的标识符。

不过,新的套接字连接通常会传递给另一个线程,该线程处理该特定连接的读/写操作。

【讨论】:

以上是关于TCP 连接打开后会移动到另一个端口吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

一个端口可以接收多个不同的 tcp 连接吗? [复制]

我可以从一个接口端口转发到另一个接口端口吗?

将视图控制器从一个故事板移动或复制到另一个故事板

如何验证两个 unix 主机之间的端口连接? [复制]

如何使用 Git / IntelliJ 将整个文件从一个分支移动/复制到另一个分支? [复制]

当服务器接受 TCP 连接时端口会改变吗?