【问题标题】:Why does TCP need a destination IP address to perform demultiplexing?为什么 TCP 需要目标 IP 地址来执行解复用?
【发布时间】:2015-05-31 12:46:55
【问题描述】:

根据一些书籍,TCP 使用 4 个元组 (src ip, src port , dest ip, dest port) 来执行多路复用/多路分解,但我不明白为什么 TCP 需要 dst IP解复用的地址?

我可以理解解复用将需要src IP和端口,因为它需要识别客户端应用程序,而dest端口用于识别目标应用程序。但是 dst IP 是干什么用的?

我认为底层 IP 层已经进行了一种基于 IP 的“解复用”,并且每个提交给 TCP 的 IP 数据包都是属于该主机的,为什么我们仍然需要目标 IP 地址?

【问题讨论】:

    标签: tcp


    【解决方案1】:

    从技术上讲,它是网络级别的 5 元组:协议、src ip、src 端口、dst ip、dst 端口。但由于您将问题限制在 TCP 上,因此只有最后 4 个是可变的。

    源机器上显然需要目标 ip/端口,因为它定义了数据包的去向。您可以关闭一个 TCP 连接并从同一个本地端口打开一个新的出站连接,但要连接到不同的目的地,因此能够区分它们很重要。

    至于目标机器,记住它可以有多个网络接口。即使“端口空间”可能相同,每个接口的 IP 地址也不同。到一个接口的连接不同于到另一个接口的连接,即使它们访问同一个端口。

    从 TCP 的有状态会话的角度来看,存在一些冗余。您可能会从元组中省略目标 IP,但仍然唯一标识已建立的会话。但是,元组用于网络层的路由,不能保证其他协议不需要添加的消歧。

    【讨论】:

      【解决方案2】:

      可能有多个进程监听同一个端口,都绑定到不同的本地 IP 地址。需要目标地址来消除这种情况的歧义。

      【讨论】:

      • 我不太明白为什么这些进程绑定到不同的本地IP地址?能举个例子吗?
      • 即使在同一个进程中,也可能有多个连接在同一个(local-ip,local-port)上。
      • 我不明白你要什么样的例子。这对我来说似乎已经足够清楚了。 @usr您的评论与我的答案或问题无关。他在询问目的地地址。您提到的情况已通过 source 地址和端口消除歧义。
      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2023-03-05
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      相关资源
      最近更新 更多