📚 第四章 IP协议
📄 一句话概括

IPv6 的动机不只是「地址不够」,还有「NAT 破坏了端到端」和「路由表太碎」。 地址空间只是最容易讲的那一条,真正的动力是「把互联网还原成端到端」。

📝 本节和前面几节的关系

4.3.8 讲了私有地址和 NAT,这一节讲它们带来的长期代价。 4.6.2 会讲 IPv6 的具体特点,先在这里把「为什么要换」说清。

一、地址确实不够

先算一笔最简单的账:全球 80 亿人,每人 10 台设备,需要 800 亿个地址;IPv4 只有 42.9 亿个。 缺口 18.6 倍,靠「节约」是补不回来的。

项 数量 说明
全球人口 约 80 亿 还在增长
人均设备 10 台以上 手机、电脑、家电、车
IPv4 地址 42.9 亿 2011 年已分完

第三行那句「已分完」要说准确:是「IANA 的池子分完了」,不是「一个都不剩」。 现在的地址来自「回收」和「转让」,价格从几十到上百美元一个 /24 每月。

二、NAT 破坏了端到端

这是比「地址不够」更根本的问题。 NAT 让「外面主动连进来」变成了一件需要额外配置的事。

场景 有公网地址 在 NAT 后面
别人访问你的服务 直接连 要端口映射
P2P 下载 能连 要打洞或中转
视频通话 能连 要 STUN/TURN
游戏联机 能连 常报「NAT 类型严格」

第四行那句「NAT 类型严格」很多人都见过: 它不是游戏的问题,是「你的地址不在公网上」的必然结果。 打洞能解决一部分,但对称型 NAT 打不通,只能中转——延迟立刻上一个台阶。 更隐蔽的代价是「协议被改写」:NAT 要改 IP 地址和端口,就得理解上层协议。 所以每出现一个新协议(比如 FTP 的主动模式、SIP),NAT 设备都要跟着升级—— 这是「中间盒子干预」的固有麻烦。

三、路由表被切碎

IPv4 的分配是「先到先得、按需给块」,结果是地址碎片化。 碎片化的直接后果是「聚合不起来」,路由表只能一条条记。 IPv6 从一开始就按「大块」分: 一个运营商一个 /32,一个站点一个 /48——块大、边界整齐,聚合天然成立。

项 IPv4 IPv6
分配单位 /24 到 /8 都有 /32、/48、/56 固定档
碎片程度 高 低
聚合难度 难 容易

第二行「碎片程度」是历史造成的:1980 年代一个大学能拿一整个 /8,后来的机构只能拿 /24。 这种「大小混杂」的分配,让聚合永远做不干净。

四、还有一个需求:自动配置

IPv4 的地址要么手工配,要么靠 DHCP。 DHCP 要一台服务器,还要维护租约——对「几亿台物联网设备」来说,这套太重了。 IPv6 设计了 SLAAC:路由器在链路上广播前缀,主机自己拼出完整地址。 没有服务器、没有租约,插上就能用。 所以「IPv6 的必要性」其实是四条:地址多、端到端、聚合好、能自动配。 只盯着第一条,会低估这次换代的幅度。

五、动手 Demo:IPv4 到底缺多少地址

把「人口乘设备」和「IPv4 地址数」摆在一起除一下,再看 NAT 能撑多少连接。 注意最后那个「够 2.81 万亿台设备用」——它说明了 NAT 为什么能续命这么久。

v4 = 2 ** 32
need = 80 * 10 ** 8 * 10
print(v4 / 1e8, need / v4)
print(v4 * 65535 / 1e12)

实跑输出:

--------------------------------------------------------------------
IPv4 到底缺多少地址
--------------------------------------------------------------------
**IPv4 的地址总数是 2 的 32 次方**,**把「人」和「设备」两个数一除,缺口就出来了。**

**全球约 80 亿人,每人 10 台设备,需要 800 亿个地址。**
**IPv4 只有 42.9 亿个**(不到 43 亿)。
**缺口是 18.6 倍。**

**NAT 是怎么把这个缺口填上的**:**一个公网地址后面挂很多私网地址,靠「端口号」区分是谁。**
**理论上能撑的连接数 = 42.9 亿地址 × 65535 端口 = 2.81e+14 个。**
**按每台设备同时 100 个连接算,够 2.81 万亿台设备用。**

**所以「IPv4 不够用」这句不准确**:**准确说法是「地址不够分,但连接够用」——**
**NAT 把「地址不够」转化成了「端口够、但端到端断了」。**

**代价有三条,都要记住**:
**一是外部无法主动连进来**(没有端口映射就没有入口);**二是每台 NAT 设备都要维护一张表**;
**三是「同一个地址后面是谁」对外不可见**。
**这三条就是 IPv6 想解决的问题,不是「地址变多了」这么简单。**

「18.6 倍」这个缺口说明「节约」这条路走不通:就算把每个地址用到极致,也差一个数量级。 所以 IPv4 的延续不是靠节约,是靠「复用」。 「2.81 万亿台设备」这个数要小心解读: 它是「理论上限」,前提是「每个连接都能被端口号唯一标识」。 现实中一台家用路由器的 NAT 表只有几千到几万条,所以「理论够」不等于「实际够」。 这台机器的实测数据可以对照:本机在 NAT 后面,只有 192.168.3.152 这一个私网地址, 出口是运营商分配的一个公网地址——「一个公网地址后面一整个家庭」就是 NAT 的日常。

30 秒实验

  1. 算一下:如果人均 20 台设备,缺口变成多少倍?
  2. 想一下:为什么「打洞」对某些 NAT 无效?
  3. 想一下:IPv6 的「大块分配」为什么有利于聚合?

常见误区

  1. 以为「IPv6 只是为了地址多」。 还有端到端、聚合、自动配置,地址多只是最容易讲的一条。
  2. 以为「NAT 只是省地址」。 它改变了互联网的形状,让「主动连进来」变成了特权。
  3. 以为「IPv4 已经彻底不能用了」。 还在跑,只是新申请基本拿不到。
自测三问(点开对答案) 1. IPv6 的四个动机是什么? —— **地址不够、NAT 破坏端到端、路由表碎片化、需要自动配置。** 2. NAT 带来的三个代价是什么? —— **外部不能主动连进来、设备要维护映射表、地址与身份脱钩**,排查问题时看不出「后面是谁」。 3. 为什么说「NAT 要理解上层协议」是个麻烦? —— **每出现一个新协议就要升级设备**,因为改地址和端口必须先看懂报文结构。

下一节看 IPv6 到底改了什么:首部、地址、配置方式。

相关笔记