IP 地址:从 IPv4 到 IPv6
IPv4
IPv4的表示方法
IPv4 规定 IP 地址长度为 32 位(二进制),用 4 个字节就能存储。
一个字节可以存储 8 个二进制位,也就是 11111111[^解释],它在内存中就占一个字节(byte),4 个字节就是 4 个 8 位二进制的数。假设 IP 地址从 0 开始分配,一直分配到最大的那个数字:
1
2
3
4
# 二进制能表示的第一个地址
00000000 00000000 00000000 00000000
# 二进制能表示的最后一个地址
11111111 11111111 11111111 11111111
然后再用.来分隔每个字节
1
2
3
4
# 二进制能表示的第一个地址
00000000.00000000.00000000.00000000
# 二进制能表示的最后一个地址
11111111.11111111.11111111.11111111
但是二进制太难记了,再将二进制转换成十进制
1
2
3
4
# 二进制能表示的第一个地址
0.0.0.0
# 二进制能表示的最后一个地址
255.255.255.255
IPv4 可以分配给多少台设备
假设不考虑广播地址等其他情况,假设每个地址都是一台设备,那么:
固定前三位 255,最后一位从 0 分配到 255,可以分配给 256 台设备:
255.255.255.0 ~ 255.255.255.255 → 256 台设备
固定前两位 255,最后两位从 0.0 分配到 255.255,可以分配给 65,536 台设备:
255.255.0.0 ~ 255.255.255.255 → 256² = 65,536 台设备
固定前一位 255,后面三位从 0.0.0 分配到 255.255.255,可以分配给 16,777,216 台设备:
255.0.0.0 ~ 255.255.255.255 → 256³ = 16,777,216 台设备(约一千六百万)
不固定任何位,直接从 0.0.0.0 分配到 255.255.255.255,可以分配给 4,294,967,296 台设备:
0.0.0.0 ~ 255.255.255.255 → 256⁴ = 4,294,967,296 台设备(约四十三亿)
全球人口有 77 亿之多,43 亿根本不够分!
IPv4 地址分类
A 类地址:范围 1.0.0.0 ~ 127.255.255.255,主要分配给有大量主机的大型网络。第一段范围 1~127(127 个),后三段各 256 个值,共 127 × 256³ = 2,130,706,432 个 IP 地址。
B 类地址:范围 128.0.0.0 ~ 191.255.255.255,一般用于国际性大公司和政府机构。第一段范围 128~191(64 个),共 64 × 256³ = 1,073,741,824 个 IP 地址。
C 类地址:范围 192.0.0.0 ~ 223.255.255.255,用于一般小公司、校园网、研究机构等。第一段范围 192~223(32 个),共 32 × 256³ = 536,870,912 个 IP 地址。
D 类地址:范围 224.0.0.0 ~ 239.255.255.255,用于特殊用途,又称组播地址。第一段范围 224~239(16 个),共 16 × 256³ = 268,435,456 个 IP 地址。
E 类地址:范围 240.0.0.0 ~ 255.255.255.255,暂时保留。第一段范围 240~255(16 个),共 16 × 256³ = 268,435,456 个 IP 地址。
五类地址合计约 42.9 亿个 IP,减去 E 类保留地址后约 40.3 亿个可用。
中国租用了多少 IP 地址
IPv4 地址由国际互联网络信息中心(ICANN)统一分配,机构主体在美国。我国接入国际网络需要向 ICANN 租用 IP 网段,租到之后由工信部管理(无线电频率、卫星轨道、手机号码网段、MAC 地址、在中国注册的域名都归工信部负责),再分配给各大网络服务运营商:中国电信、中国联通、中国移动、中国教育和科研计算机网、中国科技网、中国国际经济贸易互联网。
中国具体租用了多少地址,官方数据不太好找,但从 chnroutes2 项目可以找到一份中国大陆路由表,更新还算及时。从中筛选出约 3184 条中国大陆路由信息(不含中国台湾、中国香港、中国澳门),可以算个大概。
路由信息由 IP 网段和子网掩码位数组成,比如 1.1.8.0/24,用 2^(32 - 子网掩码位数) 就能算出这条路由下包含多少个 IP:
1
2
3
4
1.1.8.0/24 # 2^(32-24) = 256
1.24.0.0/13 # 2^(32-13) = 524,288
1.45.0.0/16 # 2^(32-16) = 65,536
……
把这 3184 条数据的子网掩码位数分别计算再相加,得出中国大陆路由下的 IP 总数:
约 298,987,008 个(约 3 亿个 IP)。
私有 IP 地址
私有 IP 地址不会在公网上路由,只能在局域网内部使用,这样可以大幅缓解 IPv4 地址不足的问题:
- A 类私有地址:
10.0.0.0~10.255.255.255,即10.0.0.0/8,共约 1677 万个地址 - B 类私有地址:
172.16.0.0~172.31.255.255,即172.16.0.0/12,共约 104 万个地址 - C 类私有地址:
192.168.0.0~192.168.255.255,即192.168.0.0/16,共约 6.5 万个地址
还能无动于衷吗?
从上面的数据可以看出,IPv4 的地址数量明显不够用。实际上在 2011 年,IPv4 地址就已经分配完毕。由于 IPv4 地址分类等原因,全球一共分配了约 36 亿个 IP 地址,其中中国分配了约 3.36 亿个,占全部的 9.28%。
2019 年中国网民已达 8.5 亿,尽管私有 IP 和 NAT 技术缓解了大部分设备的上网需求,但 3.3 亿个公网 IP 在中国的确不够用。为此,工信部在 2020 年 3 月 23 日发布了《工业和信息化部关于开展 2020 年 IPv6 端到端贯通能力提升专项行动的通知》(工信部通信函〔2020〕57 号),全面推进 IPv6 部署。
IPv6
IPv6 是 IPv4 的下一代协议,最根本的变化就是把地址长度从 32 位扩展到了 128 位,从根本上解决了地址枯竭的问题。
IPv6 的表示方法
IPv6 地址长度为 128 位,用 16 个字节存储。为了便于书写和阅读,IPv6 采用十六进制表示法,每 16 位(2 个字节)为一组,用冒号 : 分隔,共 8 组:
1
2
0000:0000:0000:0000:0000:0000:0000:0000 (最小地址)
FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF (最大地址)
每组 FFFF 对应的二进制是 1111111111111111,共 16 位。8 组 × 16 位 = 128 位。
IPv6 的地址空间
IPv6 的地址总量是 2^128,也就是:
1
(65535 + 1)^8 = 2^128 ≈ 3.4 × 10^38
写成完整数字就是:
1
340,282,366,920,938,463,463,374,607,431,768,211,456
这个数字大到什么程度?有人形象地说过:IPv6 可以让地球上的每一粒沙子都分配到一个 IP 地址。相比 IPv4 的 43 亿,IPv6 的地址空间几乎可以说是无限的。
IPv6 地址的简写规则
由于 IPv6 地址很长,RFC 定义了两种简写方式:
前导零省略:每组中前导的 0 可以省略
1
2
2001:0db8:0000:0000:0000:0000:0000:0001
→ 2001:db8:0:0:0:0:0:1
连续零压缩:连续的多个全零组可以用 :: 代替,但一个地址中只能使用一次
1
2
2001:db8:0:0:0:0:0:1
→ 2001:db8::1
再看几个例子:
1
2
3
0000:0000:0000:0000:0000:0000:0000:0001 → ::1(本地回环地址,类似 IPv4 的 127.0.0.1)
0000:0000:0000:0000:0000:0000:0000:0000 → ::(未指定地址,类似 IPv4 的 0.0.0.0)
2001:0db8:0000:0000:0000:0000:0000:0001 → 2001:db8::1
IPv4 和 IPv6 的对比
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位(4 字节) | 128 位(16 字节) |
| 地址数量 | 约 43 亿 | 约 3.4 × 10³⁸ |
| 表示方式 | 点分十进制(如 192.168.1.1) | 冒号分隔十六进制(如 2001:db8::1) |
| 地址分配 | 手动配置或 DHCP | 支持无状态自动配置(SLAAC) |
| NAT 依赖 | 大量依赖 NAT 缓解地址不足 | 理论上不再需要 NAT |