初识 IPv6
2019 年 11 月 25 日已分配完公网 IPv4 地址,以后就没有多余地址可以分配了。短期内可以使用 NAT 技术进行缓解。长期来看,还是要用 128 位的 IPv6 地址替代 32 位的 IPv4 地址,IPv6 有 3.4×10^38 个可用地址,多得不得了,可以满足未来 IP 地址的需求。
IPv6 地址
IPv6 地址不但比 IPv4 的地址长度长,还其它方面的不同。
1、IPv6 地址表示
32 位的 IPv4 地址,分隔成 4 个 8 位段,每 8 位段的值在 0 ~ 255 之间,每个 8 位段之间用 “ . ” 分开,这就是 “ 点分十进制表示法 ” 。举个栗子:
192.168.0.1
而 128 位的 IPv6 地址,是 IPv4 地址的 4 倍,如果用点分十进制表示法,那么会有 16 个八位组,地址过于冗长。为了使用方便, 使用十六进制表示法,分隔成 8 个 16 位段,每 16 位段的值在 0000 ~ FFFF 的十六进制数之间,每个 16 位段之间用 “ : ” 分开。举个栗子:
2001:1111:0100:000a:0000:00bc:2500:0a0b
为了方便理解,可以查看下面的进制转换表。
但是 IPv6 地址还是太长,不方便记忆,看着都头晕,也不方便书写,毫无规律可言。于是就有了两条简化规则。第一条规则是:
- 每组十六进制数中开头的 0 可以省略。
上面的 IPv6 地址可以写成: 2001:1111:100:a:0:bc:2500:a0b
这里需要注意,开头的 0 才能省略,末尾的 0 是不能省略的,因为这样会引起歧义,无法确定省略的 0 是在数字前还是数字后。
如果有个 IPv6 地址有一串的 0 ,比如:
2001:0000:0000:0000:0000:0000:0000:0003
可以简写成:
2001:0:0:0:0:0:0:3
这时,还可以使用第二个规则进行简化,第二条规则是:
- 由全 0 组成的连续的 16 位段可以用一对冒号 “ :: ” 表示。
上面的地址还可以简化成:
2001::3
这里需要注意,一个 IPv6 地址内,只能使用一次 “ :: ” 表示。如果使用两次及以上,也会产生歧义。举个栗子:
2001:0a0c:0000:0000:0021:0000:0000:0077
正确的写法有是:
2001:a0c::21:0:0:77
2001:a0c:0:0:21::77
如果使用了两次 “ :: ” ,那么就是错误的:
2001:a0c::21::77
有两个全 0 字符串,就无法确定它们的长度,上面错误的地址会有几种可能:
2001:0a0c:0000:0021:0000:0000:0000:0077
2001:0a0c:0000:0000:0021:0000:0000:0077
2001:0a0c:0000:0000:0000:0021:0000:0077
IPv4 的网段地址可以用子网掩码表示,还可以用斜线法表示。IPv6 只能用斜线法表示网段地址,即在 IPv6 地址后面加上一个斜线 “ / ” ,后面加上一个十进制的数字,来表示前面多少位是网络位。网络位是 64 位的 IPv6 地址表示如下:
3001:2222:333:aa:bc::707:9900/64
对应的网段地址是:
3001:2222:333:aa::/64
全是 0 的 IPv6 地址可以写成一对冒号。当网络位是 0 位时,表示默认地址。
::/0
当网络位是 128 位时,表示未指定地址( unspecified address )。设备未分配 IPv6 地址时,就用未指定地址作为标识进行报文交互。
::/128
2、IPv6 地址类型
IPv6 地址根据使用范围和功能,分为三种类型:
- 单播( Unicast )
- 任意播( Anycast )
- 组播( Multicast )
对比 IPv4 ,IPv6 地址中没有广播地址,但是有一个包含全部节点的组播地址,跟 IPv4 中的广播地址功能相同。
其中单播地址又细分为全球单播地址、