| IPV6 >> 02 IPV6基础 >> 04 IPv6地址分类 >> |
l IPv6定义了三种不同类型的地址:单播地址、多播地址、任播地址。
l 多播地址:前8比特为FF,其它地址都是单播地址,任播地址和单播地址语法完全相同。
l IPv6协议取消了广播地址,这是因为广播地址给IPv4网络带来了问题:同一网段的所有主机都要接收,实际上很多主机不感兴趣,丢掉了广播报文,IPv6协议的解决办法是:定义一些多播地址代替广播地址,如本地链路所有节点组播地址FF02::1就相当于IPv4广播地址255.255.255.255。通过这种方法,感兴趣的主机可以加入组播地址接收该组播,避免影响不感兴趣的主机。
未指定地址是0:0:0:0:0:0:0:0,通常简写为::,常见的两个用途是:
1) 若主机启动时没有单播地址,则以未指定地址作为源地址,发送路由器请求,从网关获取前缀信息,结合自己的接口id,自动生成单播地址。
2) 给主机配置IPv6地址时,检测地址是否和同网段其它主机的地址冲突,则以未指定地址作为源地址发送邻居请求(相当于免费ARP)。
环回地址是0:0:0:0:0:0:0:1,通常简写为::1,相当于IPv4地址127.0.0.1,一般在节点给自身发报文时使用。
特征是:前10比特是FE80,接下来的54比特都是0,只在一条链路上有效。
和IPv4网络相比,IPv6网络有一个优势:“主机启动时可以自动生成链路本地地址,用户不需要配置地址,就可以在局域网内通信”。链路本地地址只要保证在一条链路上唯一就行了,不同链路上主机的链路本地地址可以相同。

注意,中间54比特都是0,很多人常常忽视这个特征!
特征是:前10比特是FEC0,站点可以理解为一个公司的局域网,这种地址类似于IPv4的私有地址,如192.168.0.0/16

RFC3879已经废除了站点本地地址(由于rfc3879反对(编程的人发现的很多不便),所以私有地址一般用FD00::/8)。对于新的实现,不再支持该前缀,统一视为全球单播地址;对于已经实现和部署的,可以继续用这个前缀。
全球单播地址格式如下所示:

接口标识符有以下三种方式生成:
Ø 由IEEE EUI-64规范自动生成,将48比特的MAC地址转化为64比特的接口ID
l mac是唯一的,用它来做接口id保证了唯一性
l 设备自动生成,不需人为干预
1) mac地址是48bit,转换成64bit的接口id少了16位,正中间加上fffe,就是128位ipv6地址
2) 然后第七位反转
3) 最后组合成接口id
比如
我的电脑mac是F859.7154.EBC9
第一步加fffe,变成F859:71ff:fe54:EBC9
第二步第七位是在8的二进制上(F8=1111 1000),就是1000,第七位是0,反转下变成1,就是1010=10也就是a
那么生成的接口id就是Fa59:71ff:fe54:EBC9
win7或者xp都支持随机的接口id加上fe80+接口id,就变成了link-local的地址
比如路由器

Ø 手工配置
建议在服务器和重要网络设备上配置
如果是手动配置的全局单播地址的话,就是2000::到3fff::加上接口id Fa59:71ff:fe54:EBC9
如2000::1:Fa59:71ff:fe54:EBC9
Ø 设备随机生成(RFC3041)-比较少用,可以查询下RFC3041
保护主机的私密性
如下所示,IPv6多播地址的前8比特是1111 1111,即16进制的FF。

预定义的一些多播地址:
Node-local(站点本地地址)
所有节点的组播地址: FF01:0:0:0:0:0:0:1
所有路由器的组播地址:FF01:0:0:0:0:0:0:2
Link-local(链路本地地址)
所有节点的组播地址: FF02:0:0:0:0:0:0:1
所有路由器的组播地址:FF02:0:0:0:0:0:0:2
Solicited-Node组播地址:
FF02:0:0:0:0:1:FFXX:XXXX
所有OSPF路由器组播地址: FF02:0:0:0:0:0:0:5
所有OSPF的DR路由器组播地址: FF02:0:0:0:0:0:0:6
所有RIP路由器组播地址: FF02:0:0:0:0:0:0:9
所有PIM路由器组播地址: FF02:0:0:0:0:0:0:13
实际应用中常用的多播地址有:
a) 被请求节点的组播地址(Solicited-Node组播地址): 每个节点必须分配给它的每个单播地址和任播地址加入一个组播的地址
l 生成方法是前缀FF02:0:0:0:0:1:FF加上单播地址的低24位,如单播地址1000::1234:5678对应的被请求节点组播地址是FF02::1:FF34:5678。
l 用于解析邻居的链路层地址时发送邻居请求(相当于IPv4的ARP请求)。
生成过程
1. 接口id的后24位xx:xxxx
2. 前缀ff02::1:ff
3. 这个接口生成的组播地址就是ff02::1:ffxx:xxxx
举例
比如我的电脑的
u Ip地址是:2000::1:Fa59:71ff:fe54:EBC9
我电脑会把这个ip加入到请求节点组播地址中(取前面的104位固定的,还有24位做接口id)
ff02::1:ff54:EBC9
u mac地址是:前16位固定是3333
后面32位从请求节点的组播ip中抄下来ff54:ebc9
那么组播mac就是3333:ff54:ebc9
如果其他人要学习我的mac地址的话,发一个组播请求,ipv6地址是ff02::1:ff54:EBC9 mac地址是3333:ff54:ebc9的一个组播报文,我的电脑收到就会回应他,当然如果其他电脑的后缀比如也是54:EBC9他们收到也会回应这个组播报文
b) 链路本地所有节点组播地址FF02::1。常用的场合是当链路层地址改变时向局域网发送免费的邻居公告(相当于IPv4的免费ARP),和路由器主动对外发送路由器公告,公布用于自动配置地址的前缀信息。
c) 链路本地所有路由器组播地址FF02::2,用于主机发送路由器请求获取自动配置地址的前缀信息。
l 任播地址被分配给多个网络接口(可以在同一个节点上,也可以在不同的节点上),这一点和多播地址相似
l 和多播地址的区别是:发给多播地址的报文,将被转发给加入这个多播组的每一个网络接口;而发送给任播地址的报文,只要转发给拥有这个任播地址的任意一个网络接口就行了。
l 任播地址是从单播地址空间分配的,在语法上和单播地址没有区别。当管理员把一个单播地址分配给多个网络接口,并且指明是任播地址时,这个单播地址就成为任播地址。向任播地址发送报文,将转发到最近的网络接口,哪个网络接口最近是根据路由协议测量出的距离确定的。
l RFC
4291定义的任播地址是子网路由器任播地址(Subnet-Router anycast address),格式如下所示:

其中子网前缀就是给网络接口配置的单播地址的前缀,即把单播地址的接口标识符设置成0,就是子网路由器任播地址。
子网路由器任播地址用于节点和某个子网中所有路由器中的任意一台通信时使用。要求所有路由器必须支持子网路由器任播地址。
|
地址类型 |
地址作用 |
应用 |
获取方法 |
|
|
单播地址 |
未指定地址 |
1.请求前缀 2.获取邻居信息 |
设备没有地址情况,以这个地址为源发包,相当于IPv4中的0.0.0.0 |
:: 固定 |
|
环回口地址 |
给设备自身发报文 |
暂无实际应用,相当于127.0.0.1 |
::1 固定 |
|
|
链路本地地址 |
同一个网段中交互信息 |
设备在开启IPv6功能之后就会自动生成这个地址,会使用这个地址为源向外发送请求报文,来获取全球单播地址前缀。此地址仅同一条链路上有效。 |
FE80: 自动生成 |
|
|
站点本地地址 |
(废弃)同一个局域网内部使用 |
局域网内部通信时使用,相当于IPv4的私网地址 |
FEC0: 自动生成 |
|
|
全球单播地址 |
全球唯一,互联网数据转发 |
全球寻址,建立点到点的网络通信。相当于IPv4的公网地址 |
自动生成/随机/手动配置 |
|
|
多播地址 |
向网络中多台设备发送数据 |
和IPv4中组播地址作用一致,用作特殊协议报文交互的地址。 |
FF打头 预定义 |
|
|
任播地址 |
向多台配置相同地址的设备发送报文 |
IPv6中特有的,将一个地址定为任播地址,可以将这个地址同时配置在多台设备上。可以实现自动选择最优路径到达对应地址的设备。 |
自动生成/随机/手动配置 |
|