IPv6地址、单播、多播/组播介绍
1. IPv6地址介绍
这里主要介绍IPv6地址,什么是IP地址就不介绍了。
IPv6地址主要是为了解决IPv4地址枯竭的问题。
1.1 IPv6地址的格式
IPv6地址有128位,通常使用16进制表示,一个16进制数可以表示4位二进制,因此128位可以使用32个16进制数表示,而把4个16进制数又分成一组,因此128位可以表示成8组。
如下图所示,一个X表示一组(4个)16进制字符串,也就是一组包含了16个二进制。一共有8组。
图片来源:《IPv6 Fundamentals A Straightforward》
1.2 IPv6地址简写方式
一个完整的IPv6地址有32个十六进制字符串表示,太长了,可以简写,简写规则有两种:
- 省略每一组开头的0
- 省略连续的若干个0,使用两个冒号
::
表示省略的0。
1.2.1 省略开头的0
使用第一种简写规则,省略开头的0,如下图所示:
1.2.2 使用双冒号代替连续的0
如果使用第二种规则,省略连续的0,使用两个冒号表示::
,如下图:
1.2.3 两种方式结合
如果把两种规则结合起来,也是最常见的写法,如下图:
1.2.4 简写时注意事项
- 双冒号
::
只能在IPv6地址中出现一次
比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001
,就不能写成:ffff::ffff::0001
,因为这样写根本不知道原来的地址是什么样的。 - 使用双冒号
::
代替连续0最多的
比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001
,后面有连续的三组都是0,因此应该使用双冒号::
代替这里,因此标准简写应该是ffff:0000:0000:ffff::00001
。 - 连续的0出现位置一样多,双冒号代替先出现的(最左边的)。
比如地址:ffff:0000:0000:ffff:ffff:0000:0000:ffff
,第一二组是连续的0,第六七组也是连续的0,标准写法应该是只能使用双冒号::
代替先出现的,也就是第一二组,标准写法为:ffff::ffff:ffff:0000:0000:ffff
1.3 IPv6地址分类
IPv6地址分类基本可以如下图所示:
IPv6地址可以分为三种类型:单播地址、多播地址、任播地址。
2. 单播地址unicast
如上图,单播地址可以分为6种:
- Global Unicast
- Link-Local Unicast
- Loopback
- Unspecified
- Unique Local
- Embedded IPv4
2.1 Global Unicast Address
全局单播地址Global Unicast Address前缀是2000::/3
,/3
表示子网掩码,表示前面3位是固定的,跟IPv4掩码一样的。
全局单播地址全局唯一,不会重复,全局单播地址Global Unicast Address就像我们IPv4的公网IP地址。
2.2 Link-Local Unicast
Link-Local Unicast 前缀是fe80::/10
,用于一个局域网内,不同的局域网的Link-Local地址可以重复。
类似IPv4的私网IP,比如IPv4的192.168.0.1
2.3 Loopback
回环地址Loopback前缀是::1/128
,使用回环地址的数据包不会经过网卡,回环地址用于本地测试。
跟IPv4的回环地址127.0.0.1
是一样的。
2.4 Unspecified
unspecified未指定的,这个地址固定就是全0,表示没有IPv6地址。
2.5 Unique Local
看名字,有个单词local,这个地址也是用于局域网,但是不同局域网的Unique Local Address不会重复。
那么不同的局域网如何保证产生的地址不重复呢?这涉及到一个算法,这里就不介绍了,这个地址的生成就类似UUID的生成。
2.6 Embeded IPv4
这个地址就是把IPv4地址包含在IPv6地址中,把IPv6地址的高80位全部设置为0, 然后中间16位设置为1, 低32位设置为IPv4地址。如下图:
3. 多播地址multicast
还是这个图,怕看到这里忘了,再放一次:
多播地址有很多种,重要的有三种:
- Well-Known
- Transient
- Solicited-Node
3.1 多播地址格式介绍
如下图:

每个字段的意思图上都有解释,主要说说Scope字段,这个字段表示了多播的范围,按照字面意思可能不好理解,如下图:

3.1 Well-Known
Well-Known 多播地址前缀是ff00::/12
,也就是最常见的多播地址。
注意:
IPv6没有广播地址,Well-Known多播地址包含了广播地址,比如上图中第一条地址,多播给多有设备,就是广播。
3.2 Transient
这个,,先不讲了
3.3 Solicited-Node
这个,,有点没看懂,简单说说。。。
Solicited-Node多播地址前缀是ff02:0:0:0:0:1:ff00::/104
。
书上说Solicited-Node多播地址用于主要用于NDP(Neighbor Discovery Protocol)协议,NDP协议的功能有两个:
- Address resolution
- Duplicate Address Detection (DAD)
NDP协议的Address resolution功能就类似IPv4的ARP协议,名字都一样,就是根据IP地址请求MAC地址。
DAD功能是用来检测局域网中的所有设备的单播地址都是不同的。
3.3.1 单播地址到Solicited-Node多播地址的映射
Solicited-Node多播地址前104位是固定的,还剩下的24位则是来自单播地址,这剩下24位和单播地址是相同的。
如下图,把单播地址的低24位拷贝过来,作为Solicited-Node多播地址的低24位。
如上图,这个单播地址可以是全局单播地址,也可以是Link-Local单播地址。
3.3.2 Solicited-Node多播地址到MAC地址的映射
这个映射提现了多播地址比广播地址好的地方。。。。
Solicited-Node多播地址要映射到MAC地址上,就是Mac地址的高12位不变,低32位改为Solicited-Node多播地址的低32位。如图所示:


我之前以为MAC地址是固定不变了,原来可以改变。
这里我有个疑惑,每个设备有个公网地址Global Unicast Address,也有一个私网地址Link-Local Unicast Address,那这样不是会产生两个Mac地址吗????
这样映射有什么好处?
多播地址只能用于目的地址,因此这样的数据包发出去后,目标设备接收时,只看Mac地址就可以知道,是不是发给自己的,就不用拆包查看IP地址了。
4. IPv6地址查看
查看了自己电脑的IP,如下图:
可以确定的是有一个回环地址:::1/128
,还有个Link-Local地址:fe80::b105:a91f:85a5:e1ef/64
。
参考资料
《IPv6 Fundamentals A Straightforward》