全球单播地址住在 2000::/3 里,只占整个空间的八分之一。 分配是三级:IANA 给 RIR,RIR 给运营商,运营商给用户。
4.3.9 讲了 IPv4 的分配机构,IPv6 是同一套机构、不同的分法。 4.6.4 的地址结构是它的基础,这里讲「地址从哪儿来」。
一、2000::/3 这个范围
全球可路由的地址只用了一小块:前三位是 001,也就是 2000:: 到 3fff:ffff:...。 这个范围占整个 128 位空间的八分之一,但已经是 2 的 125 次方个地址——多到用不完。
| 项 | 数值 | 说明 |
|---|---|---|
| 前缀 | 2000::/3 | 前三位 001 |
| 地址数 | 4.25e37 | 2 的 125 次方 |
| 占全部空间 | 1/8 | 其余留给别的用途 |
第三行那个「其余 7/8」不是浪费: 它们分给了「链路本地」「唯一本地」「多播」和「还没定义的未来用途」。 地址空间大到可以「按用途划片」,这是 IPv6 才有的奢侈。
二、三级分配
和 IPv4 一样的机构,不一样的块大小:
| 层级 | 给谁 | 典型块 |
|---|---|---|
| IANA | 五个 RIR | /12 一段 |
| RIR | 各国运营商 | /32 |
| 运营商 | 企业、家庭 | /48 或 /56 |
| 企业 | 内部部门 | /64 |
第二行「一个运营商一个 /32」是关键:一个 /32 能切出 42.9 亿个 /64, 所以「给每个用户一个 /56」对运营商来说几乎不要成本。 这就是为什么 IPv6 的家庭宽带「给的就是一大段」,不像 IPv4 只给一个地址。 第三行那个 /48 和 /56 的差别:/48 能切 65536 个 /64,/56 只能切 256 个。 家庭给 /56 够用,企业给 /48 更宽松。
三、现在谁在用哪段
实际分配出去的几段 /12:
| 前缀 | 大致归属 | 备注 |
|---|---|---|
| 2001::/16 | 早期分配 | 含特殊用途的子段 |
| 2400::/12 | 亚太(APNIC) | 中国在这段里 |
| 2600::/12 | 北美(ARIN) | |
| 2800::/12 | 拉美(LACNIC) | |
| 2a00::/12 | 欧洲中东(RIPE) | |
| 2c00::/12 | 非洲(AFRINIC) |
第二行「中国在这段里」值得记一下:国内的 IPv6 地址大多以 240e、2408、2409 开头, 它们都在 2400::/12 之内。 看到 240 开头,基本可以判断是亚太的地址。 第一行那个「含特殊用途的子段」是历史: 2001:0000::/23 里有一部分给了 Teredo 之类的过渡技术, 所以真正分给运营商的从 2001:0200::/23 开始。
四、文档专用段
2001:db8::/32 是 IANA 专门留给文档的:写书、写教程、写配置示例,都用这一段。 它永远不会被分配给真实网络,所以「照着抄也不会出事」。
| 地址 | 用途 | 能不能配到设备上 |
|---|---|---|
| 2001:db8::/32 | 文档示例 | 能配,但不该用于生产 |
| fe80::/10 | 链路本地 | 自动生成 |
| fd00::/8 | 唯一本地 | 内网可用 |
第一行那句「能配但不该用于生产」是个实践提醒: 技术上不拦你,但一旦有人真用了,就会和文档里的例子混淆—— 排查故障时看到 2001:db8,第一反应应该是「这是示例,不是真地址」。
五、动手 Demo:全局单播地址从 2000 开头
先看 2000::/3 覆盖多大,再看现在实际分出去的几段 /12。 注意第四列:一个 /12 能切 4.50e15 个 /64。
import ipaddress
n = ipaddress.IPv6Network('2000::/3')
print('%.3e' % n.num_addresses, 2 ** 3)
for c in ('2001::/16', '2400::/12', '2a00::/12'):
net = ipaddress.IPv6Network(c)
print(c, 2 ** (64 - net.prefixlen))
实跑输出:
--------------------------------------------------------------------
全局单播地址从 2000 开头
--------------------------------------------------------------------
**全球可路由的地址只用了整个空间的一小块**:**2000::/3,也就是前三位是 001。**
**剩下的大部分还留着没分配。**
**这一段的范围是 2000:: 到 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff**
**地址数 4.254e+37 个,占全部空间的 1/8。**
**现在实际在用的是几段 /12**:
类别 前缀 地址数 含几个 /64
---------------------------------------------------------
早期分配 2001::/16 5.19e+33 281474976710656
亚太 2400::/12 8.31e+34 4503599627370496
北美 2600::/12 8.31e+34 4503599627370496
欧洲中东 2a00::/12 8.31e+34 4503599627370496
其他 2800::/12 8.31e+34 4503599627370496
预留 2c00::/12 8.31e+34 4503599627370496
**第四列是「这一段能切多少张网」**:
**一个 /12 能切 4.50e+15 个 /64**——**这就是「地址多到不用数」的具体样子。**
**「2001::/16 是早期分配」这一行值得注意**:**2001:0000::/23 里有一部分给了特殊用途**
**(Teredo、测试等),不全是给运营商的。**
**真正分给运营商的是 2001:0200::/23 之后的一段。**
**而文档里的例子统一用 2001:db8::/32**——**它专门留给示例,不会和真实网络撞车。**
「1/8」这个比例容易让人误以为「很小」: 但 2000::/3 里有 4.25e37 个地址,是 IPv4 总量的 1e28 倍。 「只用了八分之一」和「用不完」在这里并不矛盾。 第四列的 4.50e15 是「一个 /12 能切多少个 /64」: 这个数比全世界的设备总数还大几个数量级——所以「按网段分」在 IPv6 里是理所当然的做法。 2001:db8::/32 的存在说明一件事:地址多到可以「专门留一段给写文档的人用」。 这在 IPv4 时代是不可想象的—— IPv4 里连「示例地址」都要从私网段借(192.0.2.0/24 是少数例外)。
30 秒实验
- 算一下:一个 /12 里有多少个 /32?
- 想一下:为什么家庭宽带给 /56 而不是 /64?
- 想一下:240 开头的地址属于哪个大区?
常见误区
- 以为「IPv6 已经开始紧张了」。 远远没有,2000::/3 只用了极小一部分。
- 以为「一个用户只给一个地址」。 给的是一段,家庭常见 /56,企业 /48。
- 以为「2001:db8 是真地址段」。 是文档专用,不该用于生产环境。
自测三问(点开对答案)
1. 全球单播地址在哪个前缀里? —— **2000::/3**,占整个空间的八分之一。 2. IPv6 的三级分配是哪三级? —— **IANA 给 RIR,RIR 给运营商(/32),运营商给用户(/48 或 /56)。** 3. 2001:db8::/32 是干什么的? —— **文档和示例专用**,永远不会分配给真实网络。下一节讲「不出门也能通信」的地址:链路本地。
- ☐ (本节完,下一节 4.6.6 链路本地单播地址)