IPv6最显著的特征就在于它的巨量的地址空间,我们知道IPv6采用128位的地址长度,是IPv4的四倍。
在IPv4时最多就可有2^32或4,294,967,296(40多亿)个可能的IP地址,但由于对这些IP进行分类,实际上可利用的IP地址就少许多。
而当IPv6地址长度为128位时,则将有2^128或340,282,366,920,938,463,463,374,607,431,768,211,456个可能的IP地址,这个天文数字足以使全球每一个人均可分配1.8×1019个IPv6地址。
IPv6地址是独立接口的标识符,所有的IPv6地址都被分配到接口,而非节点。
由于每个接口都属于某个特定节点,因此节点的任意一个接口地址都可用来标识一个节点。
在IPv6地址中也作了相应分类,但它与IPv4的分类方法不一样,它主要是通过其地址前缀来划分其传输类型的,共分为3种:
·单播地址(Unicast Address):用来标识单一网络接口。目标地址是单播地址的数据包将发送给以这个地址标识的网络接口。
·任播地址(Anycast Address):用来标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。适合于“One-to-One-of-Many”(一对组中的一个)的通讯场合。接收方只需要是一组接口中的一个即可,如移动用户上网就需要因地理位置的不同,而接入离用户最近的一个接收站,这样才可以使移动用户在地理位置上不受太多的限制。
·多播地址(Multicast Address):用来标识一组网络接口的标识(通常属于不同的节点)。发送到多播地址的数据包发送给本组中所有的网络接口。在IPv6中没有IPv4中的广播地址(Broadcast Address),用多播地址取代。这种IP地址类型适合于“One-to –Many(一对多(组)”)的通讯场合。
在具体介绍这些地址类型之前,我还是先来介绍决定这些IP地址类型的“地址前缀”(Format Prefix ,FP)。顾名思义,地址前缀就是在地址的最前面那段数字。当然也属于128位地址空间范围之中,通过不同的地址前缀来代表不同的地址类型。下表1就是在IPv6标准中规定的地址前缀所代表的意义。
注意:在IPv4中除了IP地址外,还有子网掩码之说,但在IPv6中已不再使用,IPv6仅支持前缀长度表示法。
地址前缀 | 前缀分配状况及意义 | 地址前缀 | 前缀分配状况及意义 |
001 | 可聚集全球单播传送地址 | 0000 001 | 预留给NSAP分配 |
010 | 基于运营商地址 | 0000 010 | 未分配 |
011 | 未分配 | 0000 011 | 未分配 |
100 | 基于地理位置的地址 | 1111 110 | 未分配 |
101 | 未分配 | 1111 1111 | 多播传送地址 |
110 | 未分配 | 0000 0000 | 保留 |
0001 | 未分配 | 0000 0001 | 未分配 |
1110 | 未分配 | 1111 1110 0 | 未分配 |
0000 1 | 未分配 | 1111 1110 10 | 本地链路地址 |
1111 0 | 未分配 | 1111 1110 11 | 本地地区单播传送地址 |
1111 10 | 未分配 |
1、 单播地址
一个IPv6单播地址与单个接口相关联,发给单播地址的包传送到由该地址标识的单接口上。但是为了满足负载平衡系统,在RFC 2373中允许多个接口使用同一地址,只要在实现中这些接口看起来形同一个接口。IPv6单播地址在使用连续的位掩码后是可聚集的,这一点类似于IPv4下的无类型域间寻经(CIDR:Classless Inter-Domain Routing)。
单播地址按照地址的传输范围分为:可聚集全球单播传送地址(Aggregatable Global Unicast Addresses)、NSAP地址、IPX层次地址、站点本地地址(Site-Local address)和链路本地地址(link-Local address)等。所有的网络接口至少要有一个链路本地地址,同时还可以拥有多个地址(包括单播地址,任播地址和多播地址)。目前进行分配使用的主要是单播地址中的可聚集全局单播地址。
·可聚集全球单播传送地址:顾名思义是可以在全球范围内进行路由转发的地址,从表1可以看出,这类地址的格式前缀为“001”,相当于IPv4公共地址。全球地址的设计有助于构架一个基于层次的路由基础设施。与目前IPv4所采用的平面与层次混合型路由机制不同,IPv6支持更高效的层次寻址和路由机制。可聚集全球单点传送地址结构如图1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/8847c7238bac9eaf504f09351f99b35f.png)
图1
“FP”是就是地址前缀(也称为“格式前缀”),用于区别其它地址类型,在这里它为“001”。随后分别是13位的TLA ID(顶级聚集体ID号)、8位的Res(保留位,以备将来TLA或NLA扩充之用。)、24位的NLA ID(次级聚集体ID号)、16位SLA ID(节点ID号)和64位Interface ID(主机接口ID号)。TLA、NLA、SLA三者构成了自顶向下排列的三个网络层次,并且依次向上一级申请ID号。TLA是与长途服务供应商和电话公司相互连接的公共骨干网络接入点,其ID的分配由国际Internet注册机构IANA严格管理。NLA通常是大型ISP,它从TLA处申请获得地址,并为SLA分配地址。SLA也可称为订户(subscriber),它可以是一个机构或一个小型 ISP。SLA负责为属于它的订户分配地址。SLA通常为其订户分配由连续地址组成的地址块,以便这些机构可以建立自己的地址层次结构以识别不同的子网。分层结构的最底层是网络主机。
·NSAP(Network Service Access Point,NSAP)地址:称为网络服务访问点地址,这也是用于保留的地址,它的地址前缀FP=0000 001。
·IPX(FP=0000 010):这也是用于保留下来的IP地址,它的地址前缀为FP=0000 010。
·站点本地地址:这类格式前缀FP=1111 1110 11。相当于10.0.0.0/8、172.16.0.0/12和 192.168.0.0/16等IPv4私用地址空间。例如企业专用Intranet,如果没有连接到IPv6 Internet上,那么在企业站点内部可以使用站点本地地址,其有效域限于一个站点内部,站点本地地址不可被其他站点访问,同时含此类地址的包也不会被路由器转发到站外。一个站点通常是位于同一地理位置的机构网络或子网。与链路本地地址不同的是,站点本地地址不是自动配置的,而必须使用无状态或全状态地址配置服务。
站点本地地址允许和Internet不相连的企业构造企业专用网络,而不需要申请一个全球地址空间的地址前缀。如果该企业日后要连入Internet,它可以用它的子网ID和接口ID与一个全球前缀组合成一个全球地址。IPv6自动进行重编号。
·链路本地地址:格式前缀FP=1111 1110 10。用于同一链路的相邻节点间通信,如单条链路上没有路由器时主机间的通信。链路本地地址相当于当前在Windows下使用169.254.0.0/16前缀的APIPA IPv4地址,其有效域仅限于本地链路。链路本地地址可用于邻居发现,且总是自动配置的,包含链路本地地址的包永远也不会被IPv6路由器转发。
其实除了以上介绍的几种单播传送地址外,在IPv6标准中还规定了以下类兼容IPv4标准的单播传送地址类型,这主要是用于在IPv4向IPv6的迁移过渡期,一般有“IPv4兼容地址”、“IPv4映射地址”、“6to4地址”三类。
·IPv4兼容地址:可表示为0:0:0:0:0:0:w.x.y.z或::w.x.y.z(w.x.y.z是以点分十进制表示的IPv4地址),用于具有IPv4和IPv6两种协议的节点使用IPv6进行通信。
·IPv4映射地址:是又一种内嵌IPv4地址的IPv6地址,可表示为0:0:0:0:0:FFFF:w.x.y.z或::FFFF:w.x.y.z。这种地址被用来表示仅支持IPv4地址的节点。
·6to4地址:用于具有IPv4和IPv6两种协议的节点在IPv4路由架构中进行通信。6to4是通过IPv4路由方式在主机和路由器之间传递IPv6分组的动态隧道技术。
2、任播地址
IPv6任播地址是分配给多于一个接口(通常属于不同的节点)的地址,任播地址从单播地址空间中进行分配,使用单播地址的任何格式。因而,从语法上,任播地址与单播地址没有区别。当一个单播地址被分配给多于一个的接口时,就将其转化为任播地址。被分配具有任播地址的接点必须得到明确的配置,从而知道它是一个任播地址。目前,任意点传送地址仅被用做目标地址,且仅分配给路由器。任意点传送地址是从单点传送地址空间中分配的,使用了单点传送地址格式中的一种。地址结构如图2所示。
![](https://i-blog.csdnimg.cn/blog_migrate/1ca3baf450c426e32e8c540dfad19f8f.png)
图2
子网-路由器任意点传送地址必须经过预定义,该地址从子网前缀中产生。为构造一个子网-路由器任意点传送地址,子网前缀必须固定,余下的位数置为全“0”。一个子网内的所有路由器接口均被分配该子网的子网-路由器任意点传送地址。子网-路由器任意点传送地址用于一组路由器中的一个与远程子网的通信。
对任意的任播地址,都有最长的地址前缀P,它限定了一个拓扑区域,所有属于该任播地址的接口都处在这个区域中。在P所限定的这个区域中,属于该任播地址集合的每一个成员都必须作为寻经系统中的单独入口而被广告;在该区域之外,该任播地址也许会聚集到对该前缀P的寻经广告中。
3、多播地址
IPv6多点传送地址格式前缀为1111 1111,此外还包括标志(Flags)、范围域和组ID等字段,如图3所示。
![](https://i-blog.csdnimg.cn/blog_migrate/60c12273a0597fa6cc516d3e71ac40e4.png)
图3
在图3中的4位“Flags”可表示为:000T。其中高三位保留,必须初始化成0。T=0 表示一个被IANA永久分配的多点传送地址;T=1表示一个临时的多点传送地址。4位Scope是一个多点传送范围域,用来限制多点传送的范围。表2列出了在RFC 2373中定义的Scope字段值。
表2 IPv6多播地址Scope分配情况
值 | 范围域 | 值 | 范围域 |
0 | 保留 | 8 | 机构本地范围 |
1 | 节点本地范围 | 9 | 未分配 |
2 | 链路本地范围 | A | 未分配 |
3 | 未分配 | B | 未分配 |
4 | 未分配 | C | 未分配 |
5 | 站点本地范围 | D | 未分配 |
6 | 未分配 | E | 全球范围 |
7 | 未分配 | F | 保留 |
图3中的“Group ID”是用来标识一个给定范围内的多点传送组。用于确定组播组,在给定的区域范围内,可以是永久的,也可以是暂时的。永久分配的组ID独立于范围域,临时组ID仅与某个特定范围域相关。
对于永久分配的组播地址,其“意义”独立于其区域值。例如:假设一台服务器组被分配了一个group ID为111(十六进制)的永久组播地址,则:
·FF01:0:0:0:0:0:0:111 是指与发送者在同一节点的所有服务器,因为这个服务器的前8位为多播IP地址规定的“1111 1111”(16进制为“FF”),而“Flags”段中,因是指定的为永久的,所以为“0000”,而“Scope”中“0001”为节点本地范围域,所以这个IP地址中的前16位为“FF01”,最后的“111”为组号,中间的那些“0”是补充的(因为IPv6地址为128位的,没有规定的以“0”补足),这样就得出“FF01:0:0:0:0:0:0:111”,按IPv6对地址表示方法规定也可以写成“FF01::111”,具体参见下节介绍。下面各种IP地址同样理解。
·FF02:0:0:0:0:0:0:111 是指与发送者在同一链路的所有服务器;
·FF05:0:0:0:0:0:0:111 是指与发送者在同一场所的所有服务器;
·FF0E:0:0:0:0:0:0:111 是指internet中的所有NTP服务器。
对于非永久分配的组播地址,只有在给定的区域范围内才有意义。例如:一个场所的非永久场所局部组播地址为FF15:0:0:0:0:0:0:111,则该组与不同场所的相同地址的组无关,与不同区域中有相同group ID的非永久组无关,与使用相同group ID的永久组无关。多播地址绝不可以用作IPv6的信源地址,或用作任何寻经头标。
5.IPv 6主机及路由器可以获得的IP地址
在IPv4中,如果一台主机安装一张网卡,那么典型的情况是该主机有一个分配给网卡的IPv4地址。但IPv6则不同,通常一台IPv6主机有多个IPv6地址,即使该主机只有一个单接口。一台IPv6主机可同时拥有以下几种单点传送地址:
·每个接口的链路本地地址
·每个接口的单点传送地址(接口的单点传送地址可以是一个站点本地地址和一个或多个可聚集全球地址)
·环路(loopback)接口的环路地址(::1)
一台典型的IPv6主机至少有两个地址:(1).接收本地链路信息的链路本地地址 (2).可路由的站点本地地址或全球地址。此外,每台主机还需要时刻保持收听以下多点传送地址上的信息流:
·节点本地范围内所有节点组播地址(FF01::1)
·链路本地范围内所有节点组播地址(FF02::1)
·请求节点(solicited-node)组播地址(如果主机的某个接口加入请求节点组)
·组播组多点传送地址(如果主机的某个接口加入任何组播组)
而一台IPv6路由器可被分配为以下几种单播地址:
·每个接口的链路本地地址
·每个接口的单点传送地址(接口的单点传送地址可以是一个站点本地地址和一个或多个可聚集全球地址)
·子网-路由器任意点传送地址
·其他任意点传送地址(可选)
·环路接口的环路地址(::1)
同样,除以上这些地址外,路由器需要时刻保持收听以下多点传送地址上的信息流:
·节点本地范围内的所有节点组播地址(FF01::1)
·节点本地范围内的所有路由器组播地址(FF01::2)
·链路本地范围内的所有节点组播地址(FF02::1)
·链路本地范围内的所有路由器组播地址(FF02::2)
·站点本地范围内的所有路由器组播地址(FF05::2)
·请求节点(solicited-node)组播地址(如果路由器的某个接口加入请求节点组)
·组播组多点传送地址(如果路由器的某个接口加入任何组播组)
这一部分就讲到这里。下一部分里,我们将介绍IPv6的地址表示方法,数据报格式以及域名解析原理。