2019 年 11 月 25 日已分配完公网 IPv4 地址,短期内可以使用 NAT 技术进行缓解。长期来看,还是要用 128 位的 IPv6 地址替代 32 位的 IPv4 地址。
- IPv4 地址长度为 32 位,使用「点分十进制表示法」,共有 4 个 8 位段,每段范围为 0 - 255。
- IPv6 地址长度为 128 位,使用冒号分隔 8 个 16 位段,每段使用十六进制表示,范围为 0000 - ffff。
- IPv6 地址有两条简化规则:
- 每段十六进制数中开头的 0 可以省略。例如,
2001:0db8:0042:0001:0000:0000:0000:d74c
可以表示为2001:db8:42:1:0:0:0:d74c
。 - 由全 0 组成的连续的 16 进制数字段可以用一对冒号
::
表示,但只可以使用一次。例如2001:0db8:0042:0001:0000:0000:0000:d74c
可以表示为2001:db8:42:1::d74c
。
- 每段十六进制数中开头的 0 可以省略。例如,
- 网段:
- IPv4:
192.168.0.0/16
或 子网掩码255.255.0.0
- IPv6:
2001:db8:42:1::/112
- IPv4:
- Unspecified Address: IPv4 未指定地址
0.0.0.0
, IPv6 未指定地址:::
。从 DHCP 服务器获得 IP 地址前,使用未指定地址配置主机。如果主机监听未指定地址,则会监听主机所有的网口。 - IPv4 回环地址:
127.0.0.1/8
, IPv6 回环地址:::1/128
IPv6 类型:
- 单播 Unicast
- 全球单播地址 Global Unicast Address
- 唯一本地地址 Unique Local Address
- 链路本地地址 LLA, Link Local Address
- 任意播 Anycast
- 组播 Multicast
相比 IPv4,IPv6 没有广播地址。包含全部节点的组播地址,与 IPv4 中的广播地址功能相同。
地址类型 | 二进制格式前缀 | IPv6 前缀 |
---|---|---|
未指定地址 | 00...0 | ::/128 |
回环地址 | 00..1 | ::1/128 |
全球单播地址 | 001 | 2000::/3 |
唯一本地地址 | 11111101 | fd00::/8 |
链路本地地址 | 1111111010 | fe80::/10 |
全球单播地址类似 IPv4 中的公网 IP 地址,由 Internet 地址授权委员会(IANA, Internet Address Numbers Authority)分配给地区 Internet 注册机构( RIR, Regional Internet Registry),再由 RIR 分配给 Internet 服务提供商(ISP, Internet Service Provider)。
IPv6 单播格式
- 全球单播 IPv6 地址的前 3 位固定为 001。
- 全球路由前缀由地址分配机构分配。
- 主机位称为接口 ID (一台主机可以有多个接口,因此 IPv6 地址表示主机的一个接口更准确)。一个接口可以有一个 IPv4 地址和多个 IPv6 地址(如全球单播地址、链路本地地址等等)。
- 全球单播地址前缀为
2000::/3
,开头 4 位为 0010 或 0011,即为十进制的 2 或 3。 - 对于十分庞大的网络,地址分配机构可以分配长度小于 /48 的前缀。对于只有一个子网可以分配长度是 /64 的前缀。对于一台设备,可以分配长度是 /128 的前缀。
3 bit 45 bit 16 bit 64 bit
↑ ↑ ↑ ↑
+-----+-----------------------+-----------+------------------+
| 001 | Global Routing Prefix | Subnet ID | Interface ID |
+-----+-----------------------+-----------+------------------+
- 唯一本地地址
- 链路本地地址
- 未指定地址
- 回环地址
类似 IPv4 的私有 IP 地址,只可以在私有网络使用。
唯一本地地址的前 7 位固定是 1111110 ,即 fc00::/7。第 8 位为 0 时未定义,即 fc00::/8 地址前缀属于保留的地址空间。目前私有网络使用的以 11111101 开头,即前缀为 fd00::/8 的 IPv6 地址。
链路本地地址是只在一个网段内或者一个广播域内有效的地址。路由器不会转发源地址或目的地址是 LLA 的数据包。
IPv4 LLA 地址段为 169.254.0.0/16 (169.254.0.0 - 169.254.255.255)。
IPv6 LLA 地址段为 fe80::/10。启动 IPv6 时,网络接口会自动配置一个 IPv6 LLA 地址。
IPv6 LLA 前缀为 1111111010,其余 global routing prefix 为 0,对网络接口 MAC 地址进行转换获得接口 ID。
MAC-to-EUI64 转换法是将 MAC 地址中 U/L 位设置为 1,并在 OUI 后面插入固定数 0xfffe
MAC 00:16:3e:0a:c5:d3
0000 0000
↓
0000 0010
↓
02:16:3e:0a:c5:d3
↓
216:3eff:fe0a:c5d3
↓
fe80::216:3eff:fe0a:c5d3
未指定地址(::/128)不能分配给接口使用,只有当 IPv6 设备还没获取到地址时,才将未指定地址作为数据包的源 IPv6 地址。
回环地址(::1/128)
组播地址标识一个组播组 Multicast Group。
组播地址前 8 位为 1 ,后面跟着 4 位标记位,再后面是 4 位地址范围,最后 112 位为组 ID (Group ID)。组 ID 前 80 位为 0 ,使用后面 32 位。各个协议使用的组播组以 ff0 开头的 IPv6 地址,而自定义的组播组以 ff1 开头。
范围位取值:
范围位值 | 表示范围 |
---|---|
1 | 接口本地 |
2 | 链路本地 |
3 | 子网本地 |
4 | 管理范围本地 |
5 | 站点本地 |
8 | 组织机构本地 |
E | 全局 |
常见的 IPv6 组播地址标记位值为 0 ,范围位值为 2 ,即前缀为 ff02。
地址 | 组播组 |
---|---|
ff02::1 | 所有节点 |
ff02::2 | 所有路由器 |
ff02::5 | OSPFv3 路由器 |
ff02::6 | OSPFv3 指定路由器 |
ff02::9 | RIP 路由器 |
ff02::c | DHCP 服务器/中继代理 |
目的节点的组播地址的前 104 位固定为 ff02::1:ff ,后 24 位使用目的单播 IPv6 地址接口 ID 的后 24 位。
当接口获取一个单播或任意播 IPv6 地址时,会同时监听该单播地址对应的目的节点组播地址。
将 IPv6 组播地址的后 32 位取出,填充到固定前缀是 3333 的 MAC 地址中来生成数据链路层地址。