如何通过 IP 地址识别 TCP 套接字?

网络工程 通讯协议
2021-07-06 20:43:09

这来自这本书:“计算机网络 - 自上而下的方法”:

TCP 套接字和 UDP 套接字之间的一个细微差别是 TCP 套接字由四元组标识:(源 IP 地址、源端口号、目标 IP 地址、目标端口号)。因此,当 TCP 段从网络到达主机时,主机使用所有四个值将段定向(多路分解)到适当的套接字。1

因此,当我查看 TCP 标头时,例如下面的标头,我在标头中看不到任何 IP 部分。

TCP报头

TCP 在将数据传递到正确的套接字时如何使用 IP 信息?


1黑濑、JF 和罗斯 KW(2013 年)。计算机网络:自上而下的方法。马萨诸塞州波士顿:皮尔逊。

3个回答

TCP 标头位于 IP 标头之后,因此 TCP/IP 堆栈知道所有四个(以及更多)值。

这四个值用于形成唯一的连接 ID(“套接字”),用于从远程主机接收和发送数据包。

在 IPv4 中,协议相互添加。因此,您链接的 IP 数据报头仅包含(除了与本讨论无关的其他内容)发送方和接收方的 IP 地址。TCP 和 UDP 通过在 IP 标头之后添加更多标头信息来“建立在”IP 之上;在该额外信息中包含两个端点的端口号(以及更多)。

快速搜索“tcp packet header”将显示 TCP 层在 IP 标头之后添加的内容。

(对您的简短回答是“如何通过 IP 地址识别 TCP 套接字?”,它不能。)

除了数据之外,还必须在层之间传递一些元数据。

当数据包进入 Internet 层时,需要确定该数据包是否以本地机器为目的地,如果是,则将其传递给适当的传输层协议。当它将它传递给传输层时,除了数据包内容之外,它还需要传递源地址和目标地址。

类似地,当数据包发出时,传输层必须告诉互联网层要使用的源地址和目标地址。

这个元数据的确切传递方式是一个实现细节。从 Internet 上其他系统的角度来看,是否使用单独的元数据结构或传输协议实现是否直接使用 IP 标头都无关紧要。


TCP 套接字和 UDP 套接字之间的一个细微区别是 TCP 套接字由四元组标识:

这有点误导,TCP 和 UDP 套接字在有和没有远程 IP/端口的情况下都可以存在,尽管只有 UDP 套接字可以在没有一个的情况下传递数据。