Skip to content

IPv4 与 IPv6 对比

2019 年 11 月 25 日,欧洲 RIPE NCC 宣布 IPv4 地址耗尽。

这意味着:从此以后,新入网的设备,再也分不到公网 IPv4 地址了。

你可能觉得无所谓——我又不是新设备。但你有没有想过:为什么家里要用 NAT?为什么手机流量这么贵?为什么物联网设备越来越多却用得好好的?

答案都和 IPv4 vs IPv6 有关。

IPv4 的困境

IPv4 地址是 32 位,理论上只有 2^32 ≈ 42 亿个地址。

但实际上:

  • 每个网络要预留两个地址(网络地址和广播地址)
  • 私有地址不能用于公网
  • 一些地址段被保留或用于特殊用途

实际可分配的公网 IPv4 地址只有约 37 亿个,而全球人口 80 亿——远远不够。

应对措施

为了延缓 IPv4 耗尽的速度,业界采取了一系列「续命」手段:

  1. NAT(网络地址转换):让多个私有 IP 共享一个公网 IP
  2. DHCP 动态分配:用完就回收,让地址复用
  3. 地址回收:把早年的浪费地址收回
  4. CIDR(无类别域间路由):更灵活地分配地址

但这些只是延缓,无法从根本上解决问题。

IPv6:地址问题的终极答案

IPv6 把地址长度从 32 位扩展到 128 位。

这个数字有多大?给你个直观感受:

IPv4:     2^32  ≈ 43 亿
IPv6:     2^128 ≈ 340 润(3.4 × 10^38)

340 润是什么概念?比宇宙中的原子数还多。理论上,IPv6 可以为地球上的每一粒沙子分配一个 IP 地址。

IPv6 地址格式

IPv6 地址用冒号分隔的 8 组 16 进制数:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

简化规则

1. 每组的前导零可省略:
   0000 → 0
   00db → db

2. 连续的全零组可用 :: 替代(只能出现一次):
   2001:0db8:85a3:0000:0000:8a2e:0370:7334
   → 2001:db8:85a3::8a2e:370:7334

3. 示例:
   完整:2001:0db8:0000:0000:0000:0000:0000:0001
   简化:2001:db8::1                       ← 本地回环地址

IPv6 地址类型

单播(Unicast)    → 一对一,包发给一个接口
  ├─ 全球单播      → 类似公网 IP,全网唯一
  │   2000::/3     (2000-3fff)
  ├─ 链路本地单播  → 仅本地链路有效
  │   fe80::/10
  └─ 唯一本地单播  → 私有地址,类似 10.x.x.x
      fc00::/7
组播(Multicast)  → 一对多,包发给一组接口
  ff00::/8        (ff00-ffff)
任播(Anycast)    → 一对最近的一个
  从路由角度看是单播,从投递角度看是最近的

IPv6 没有广播!

IPv6 用组播替代了广播。广播在 IPv4 中用于 ARP、DHCP 等,但容易引发广播风暴和安全性问题。

IPv6 中:

  • ARP → 替代为邻居发现协议(NDP)
  • DHCP → 有状态 DHCPv6 或无状态的 SLAAC
  • 广播地址 → 组播地址 ff02::1(所有节点)

核心对比

特性IPv4IPv6
地址长度32 位(4 字节)128 位(16 字节)
地址数量≈ 43 亿≈ 340 润
表示方法点分十进制冒号十六进制
子网掩码支持(CIRD)前缀长度固定
分片处理端系统和路由器都可分片仅发送端分片,路径 MTU 发现
首部字段可变长度(20-60 字节)固定 40 字节
安全依赖 IPsec(可选扩展)内置 IPsec
NAT必须(地址不够)可选(地址够用)
组播支持支持(更强大)
广播支持不支持
移动性支持但复杂原生支持
头部校验和无(依赖上层校验)

IPv6 的优势

1. 地址近乎无限

地球上的沙子都能分到 IP 地址,更别说物联网设备了。

2. 简化头部

IPv6 头部固定 40 字节,字段从 12 个减到 8 个,路由器处理更快。

IPv4 头部(至少 20 字节):
┌─────────┬─────────┬───────────┬──────────────────┬─────────────┐
│ 版本 4   │ IHL     │ TOS       │ 总长度             │             │
├─────────┼─────────┼───────────┼──────────────────┼─────────────┤
│ 标识     │ 标志    │ 片偏移    │ TTL               │ 协议        │
├─────────┼─────────┼───────────┼──────────────────┼─────────────┤
│ 头部校验和│ 源地址(32位)                           │             │
├────────────────────────────────────────────────────┤
│ 目的地址(32位)                                     │             │
└────────────────────────────────────────────────────┘

IPv6 头部(固定 40 字节):
┌─────────┬─────────┬───────────────────────────────┐
│ 版本 6   │ 流量类别│ 流标签                          │
├─────────┼─────────┼───────────────────────────────┤
│ 负载长度 │ 下一头部│ 跳数限制                         │
├────────────────────────────────────────────────────┤
│                    源地址(128位)                   │
├────────────────────────────────────────────────────┤
│                    目的地址(128位)                 │
└────────────────────────────────────────────────────┘

3. 即插即用(无状态地址自动配置 SLAAC)

设备接入 IPv6 网络后,能自动获得 IP 地址,无需 DHCP 服务器。

1. 主机生成链路本地地址(fe80::/10 + EUI-64)
2. 发送邻居请求(Neighbor Solicitation)验证地址唯一性
3. 通过路由器发现获取网络前缀
4. 组合前缀 + 接口标识 = 全球单播地址

4. 内置 IPsec

IPv6 可以强制使用 IPsec 加密通信。虽然 IPv4 也能用 IPsec,但 IPv6 是强制支持,相当于 HTTPS 成为默认。

5. 更好的移动性

IPv6 的「路由头」和「目的选项头」让移动设备在网络间切换时,能保持连接不中断。

6. 路径 MTU 发现

IPv6 要求发送端先发现路径中的最小 MTU,再发送合适大小的数据包,避免分片带来的性能损失。

IPv6 的挑战

1. 兼容性

IPv6 和 IPv4 不兼容。需要双栈(同时运行两套协议)、隧道(IPv6 over IPv4)或转换(NAT64)来过渡。

2. 地址太长了

2001:db8::1 还算好记,但 2001:0db8:85a3:0000:0000:8a2e:0370:7334 根本没法手打。实际使用中需要依赖 DNS。

3. 私有地址变成「奢侈品」

IPv4 中 NAT 提供了天然的网络隔离。IPv6 地址太多,公网直连反而增加了被扫描攻击的风险——需要在防火墙上手动限制。

4. 过渡期漫长

全球 IPv6 普及率(约 30-40%)仍然不高,互联网骨干网的升级需要时间。

实际应用

查看本机 IPv6 地址

bash
# Linux/Mac
ip addr show
# 或
ifconfig

# Windows
ipconfig

# 示例输出:
# eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
#     inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
#     inet6 fe80::a00:27ff:fe3b:59d3  prefixlen 64  scopeid 0x20<link>
#     inet6 2001:db8::1  prefixlen 128  scopeid 0x0<global>

IPv6 测试

bash
# 测试本机是否支持 IPv6
ping6 ipv6.google.com

# 测试 IPv6 连通性
curl -6 https://ipv6.google.com

# 查看网站的 IPv6 地址
dig AAAA www.example.com

面试追问方向

  • IPv4 地址为什么不够用了?有哪些应对措施?
  • IPv6 地址有多长?理论上有多少个?
  • IPv6 有哪几种地址类型?和 IPv4 有什么区别?
  • IPv6 为什么移除了广播?替代方案是什么?
  • IPv6 的头部和 IPv4 相比有什么变化?
  • 什么是 SLAAC?IPv6 主机如何自动获得地址?
  • IPv4 到 IPv6 的过渡方案有哪些?

基于 VitePress 构建