📚 第五章 IP协议相关技术
📄 一句话概括

Mobile IP 要解决「地址既是身份又是位置」这个矛盾:换网络 IP 就变,连接就断。 它的办法是「留一个永远不变的家乡地址」,代价是三角路由。

📝 本节和前面几节的关系

4.2.1 讲了 IP 地址是「网络层地址」,这一节讲「它同时还是身份」。 5.7 的隧道是它的实现手段,家乡代理转发靠的就是隧道。

一、矛盾在哪

IP 地址身兼两职:一半是「你是谁」(身份),一半是「你在哪」(位置)。 平时这两件事不冲突,因为「你」就在「那儿」。 可一旦你移动了,冲突就来了:地址跟着位置变,对方就找不到「你」了。 具体会怎么断:TCP 用「源地址、源端口、目的地址、目的端口」四元组标识一条连接, 你换了网段,源地址一变,四元组就不是原来那条了, 对方回过来的包会被当成「新连接」或者直接丢掉。 所以问题的本质不是「找不到」,而是「找到了也不是同一条连接」。 这一点很重要——它决定了「改地址」这件事必须对上层透明。

二、三个角色

Mobile IP 的思路是「把身份和位置拆开」:

概念 作用 位置
家乡地址 永远不变,当身份用 对端只认这个
转交地址 当前在哪儿 实际收包的
家乡代理 替它收包再转发 在家乡网段

第一行是「身份」:对端始终往家乡地址发,所以它的「眼里」你从来没动过。 第二行是「位置」:这是你到了外地之后拿到的地址,它会变,但对端看不见。 第三行是关键的那台设备:它守在家乡网段,替移动主机「收信」,收到了再用隧道转给外地。 所以 5.7 讲的隧道在这里不是可选项,是必需品。

三、三角路由的代价

问题出在「对端不知道你在外地」:它按家乡地址发,包先到家乡代理,家乡代理再隧道转发到外地。 于是路径变成「对端 → 家乡 → 外地」,绕了一个三角。 绕的代价按距离放大:同城多 20 毫秒还能忍,跨洋就多 8000 毫秒——延迟直接翻倍, 而 TCP 的吞吐和延迟成反比,等于带宽也砍半。 所以后来加了「路由优化」:让对端直接知道转交地址,不再绕回家乡代理。 但这样又要求「对端也支持」,而且「告诉对端我在哪」本身有安全问题(位置泄露)。 所以优化版反而更难部署。

四、为什么用得少

最根本的原因是「上层已经解决了」: TCP 会重连、应用会重试、QUIC 干脆把「连接迁移」做进了协议—— 换个网络,连接标识不变,业务无感。 而这些办法不需要改网络,只需要改两端。 第二个原因是「它要改的东西太多」:主机要装移动 IP 栈,网络要有家乡代理,对端最好也支持。 三样凑齐才能用,而任何一样不齐就退化成「不能用」。 所以它更像一个「思路正确但时机不对」的协议:「把身份和位置分开」这个洞察是对的, 今天叫「身份与位置分离」,有一整类研究在做。但「用隧道绕回家乡」这个做法,被上层替代了。 和 RARP、NAT-PT 一样——值得知道,不必深究。

五、动手 Demo:Mobile IP 的三角路由

算三种距离下,三角路由比直连多出多少延迟。 重点看最后一行「多出来」和「直连」的比值。

for name, direct, tri in (('同城', 10, 30), ('跨省', 800, 1600), ('跨洋', 8000, 16000)):
    print('%-4s 直连 %5d ms  三角 %6d ms  多出 %5d ms'
          % (name, direct, tri, tri - direct))

实跑输出:

--------------------------------------------------------------------
Mobile IP 的三角路由
--------------------------------------------------------------------
**Mobile IP 要解决的是「地址既是身份又是位置」这个矛盾**:**换了网络 IP 就变,连接就断。**
**它的办法是「保留一个永远不变的家乡地址」。**

  概念             作用                   位置
  -------------------------------------------------------
  **家乡地址**     **永远不变**           **对端看到的**
  **转交地址**     **当前在哪儿**         **实际收包的**
  **家乡代理**     **替它收包再转发**     **在家乡网段**

**代价是「三角路由」**:**对端发给家乡代理,家乡代理再隧道给外地**——**绕了一圈。**

**算一下多绕多少**:
  场景     直连延迟     三角路由延迟     多出来
  -----------------------------------------------
  同城     10 ms        30 ms            20 ms
  跨省     800 ms       1600 ms          800 ms
  跨洋     8000 ms      16000 ms         8000 ms

**第三行跨洋的例子最刺眼**:**延迟翻了一倍**。
**所以 Mobile IP 后来加了「路由优化」**——**让对端直接知道转交地址,不再绕回家乡代理。**
**但这样又要求「对端也支持」,部署就更难了。**

**现实中 Mobile IP 用得很少**,**因为「换网络不断连接」这件事被上层解决了**:
**TCP 有重连、应用有断线重传、QUIC 有连接迁移。**
**所以它更像一个「思路正确但时机不对」的协议**——**和 RARP、NAT-PT 一样,值得知道,不必深究。**

「多出来」这一列最说明问题:同城只多 20 毫秒(还算能忍),跨洋多 8000 毫秒(等于翻倍)。 所以「三角路由的代价随距离线性放大」,而「移动」恰恰经常是「跨远距离」。 注意这张表里的数是为了看清趋势取的示意值,真实的跨洋往返延迟取决于光缆路径和中转, 不能当成「跨洋一定是 8000 毫秒」来用。 最后一个观察: 「延迟翻倍」对 TCP 的影响比听起来严重——因为 TCP 的吞吐上限约等于「窗口除以往返时间」, 往返翻倍,同样的窗口就只能跑一半的速度。 所以三角路由不是「慢一点」,是「带宽也砍半」。

30 秒实验

  1. 算一下:往返 100 毫秒、窗口 64 KB,吞吐上限大约多少?
  2. 想一下:为什么 Mobile IP 必须靠隧道?
  3. 想一下:QUIC 的「连接迁移」绕开了 Mobile IP 的哪个难点?

常见误区

  1. 以为「Mobile IP 是给手机上网用的」。 它解决的是「换网络不断连接」, 和蜂窝网切换是两回事。
  2. 以为「有了家乡代理就没有延迟问题」。 三角路由会让延迟翻倍,跨洋尤其明显。
  3. 以为「路由优化是纯好处」。 它要求对端支持,而且会暴露位置。
自测三问(点开对答案) 1. Mobile IP 要解决什么矛盾? —— **IP 地址同时是「身份」和「位置」**:一移动位置就变,连接就断。 2. 三角路由是怎么形成的? —— **对端按家乡地址发,家乡代理再隧道转给外地**,路径绕成「对端 → 家乡 → 外地」。 3. 为什么它用得少? —— **上层已经解决了**:TCP 重连、QUIC 连接迁移都不用改网络,而 Mobile IP 要主机、网络、 对端三样都支持。

第五章到这里结束。下一章进入传输层:TCP 与 UDP。

相关笔记