为什么 TCP 需要目的 IP 地址来执行多路分解?
Why does TCP need a destination IP address to perform demultiplexing?
根据一些书籍,TCP 使用 4 个元组 (src ip, src port , dest ip, dest port) 来执行 multiplexing/demultiplexing 但我没有了解为什么 TCP 需要 dst IP 地址来执行多路分解?
我可以理解,解复用需要源IP和端口,因为它需要识别客户端应用程序,而目标端口用于识别目标应用程序。但是 dst IP 是做什么用的?
我认为底层 IP 层已经执行了某种基于 IP 的 "demultiplexing" 并且提交给 TCP 的每个 IP 数据包都是属于该主机的 IP 数据包,那么为什么我们还需要目标 IP 地址?
可能有多个进程侦听同一个端口,所有进程都绑定到不同的本地 IP 地址。需要目标地址来消除这种情况的歧义。
从技术上讲,它是网络级别的 5 元组:协议、src ip、src 端口、dst ip、dst 端口。但是由于您将问题限制在 TCP,因此只有最后 4 个是可变的。
出于显而易见的原因,在源计算机上需要目标 ip/port,因为它定义了数据包的去向。您可以关闭一个 TCP 连接并从同一本地端口打开一个新的出站连接,但到不同的目的地,因此能够区分它们很重要。
至于目标机器,请记住它可以有多个网络接口。每个接口的 IP 地址不同,即使 "port space" 可能相同。到一个接口的连接与到另一个接口的连接是不同的,即使它们访问相同的端口也是如此。
从有状态会话的 TCP 角度来看,存在一些冗余。您可能会从元组中省略目标 IP,并且仍然唯一标识已建立的会话。但是,元组用于网络层的路由,不能保证其他协议不需要添加歧义。
根据一些书籍,TCP 使用 4 个元组 (src ip, src port , dest ip, dest port) 来执行 multiplexing/demultiplexing 但我没有了解为什么 TCP 需要 dst IP 地址来执行多路分解?
我可以理解,解复用需要源IP和端口,因为它需要识别客户端应用程序,而目标端口用于识别目标应用程序。但是 dst IP 是做什么用的?
我认为底层 IP 层已经执行了某种基于 IP 的 "demultiplexing" 并且提交给 TCP 的每个 IP 数据包都是属于该主机的 IP 数据包,那么为什么我们还需要目标 IP 地址?
可能有多个进程侦听同一个端口,所有进程都绑定到不同的本地 IP 地址。需要目标地址来消除这种情况的歧义。
从技术上讲,它是网络级别的 5 元组:协议、src ip、src 端口、dst ip、dst 端口。但是由于您将问题限制在 TCP,因此只有最后 4 个是可变的。
出于显而易见的原因,在源计算机上需要目标 ip/port,因为它定义了数据包的去向。您可以关闭一个 TCP 连接并从同一本地端口打开一个新的出站连接,但到不同的目的地,因此能够区分它们很重要。
至于目标机器,请记住它可以有多个网络接口。每个接口的 IP 地址不同,即使 "port space" 可能相同。到一个接口的连接与到另一个接口的连接是不同的,即使它们访问相同的端口也是如此。
从有状态会话的 TCP 角度来看,存在一些冗余。您可能会从元组中省略目标 IP,并且仍然唯一标识已建立的会话。但是,元组用于网络层的路由,不能保证其他协议不需要添加歧义。