一、IPv6地址结构定义
1 IPv6地址表示
IPv6地址包括128比特,由使用由冒号分隔的16比特的十六进制数表示。16比特的十六进制数对大小写不敏感。如:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210。
另外,对于中间比特连续为0的情况,还提供了简易表示方法―――把连续出现的0省略掉,用::代替(注意::只能出现一次,否则不能确定到底有多少省略的0),如下所示:
1080:0:0:0:8:800:200C:417A 等价于 1080::8:800:200C:417A
FF01:0:0:0:0:0:0:101 等价于 FF01::101
0:0:0:0:0:0:0:1 等价于 ::1
0:0:0:0:0:0:0:0 等价于 ::
2 IPv6地址前缀表示
和IPv4类似,IPv6的子网前缀和链路关联。多个子网前缀可分配给同一链路。IPv6地址前缀表示如下:
ipv6-address/prefix-length
其中,ipv6-address为16进制表示的128比特地址;prefix-length为10进制表示的地址前缀长度。
3 IPv6地址分类
RFC2373中定义了多种IPv6地址类型:
Allocation Prefix Fraction of
(binary) Address Space
—————————— ———————- ————
Reserved 0000 0000 1/256
Unassigned 0000 0001 1/256
Reserved for
NSAP Allocation 0000 001 1/128
Reserved for
IPX Allocation 0000 010 1/128
Unassigned 0000 011 1/128
Unassigned 0000 1 1/32
Unassigned 0001 1/16
Aggregatable Global
Unicast Addresses 001 1/8
Unassigned 010 1/8
Unassigned 011 1/8
Unassigned 100 1/8
Unassigned 101 1/8
Unassigned 110 1/8
Unassigned 1110 1/16
Unassigned 1111 0 1/32
Unassigned 1111 10 1/64
Unassigned 1111 110 1/128
Unassigned 1111 1110 0 1/512
Link-Local
Unicast Addresses 1111 1110 10 1/1024
Site-Local
Unicast Addresses 1111 1110 11 1/1024
Multicast Addresses 1111 1111 1/256
注:
(1) “未指定的地址”(全0)、环回地址(::1)和嵌入IPv4地址的IPv6地址(“嵌入IPv4地址的IPv6地址”见2.3.4节说明)从0000 0000格式前缀中分配。
(2) 除多播地址(格式前缀1111 1111)外,格式前缀从001到111的地址都必须有64比特的EUI-64格式的接口标识符。
IPv6地址分为单播地址、泛播地址、多播地址。和IPv4相比,取消了广播地址类型,以更丰富的多播地址代替,同时增加了泛播地址类型。
4 IPv6单播地址
IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往发往单播地址的报文,由此地址标识的接口接收。每个接口上至少要有一个链路本地单播地址,另外还可分配任何类型(单播、泛播和多播)或范围的IPv6地址。
所有格式前缀不是多播格式前缀(1111 1111)的IPv6地址都是IPv6单播格式(泛播和IPv6单播格式相同)。IPv6单播地址和IPv4单播地址一样可聚合。目前定义了多种IPv6单播地址格式,包括可聚合全球单播地址、NSAP地址、IPX层次地址、站点本地地址、链路本地地址和具有IPv4能力的主机地址(嵌入IPv4地址的IPv6地址)。目前广泛使用的是可聚合全球单播地址、站点本地地址和链路本地地址。
图1 IPv6单播地址格式
IPv6单播地址由子网前缀和接口ID两部分组成。子网前缀由IANA、ISP和各组织分配。
接口标识符目前定义为64比特,可以由本地链路标识生成或采用随机算法生成以保证唯一性。
5 IPv6泛播地址
IPv6泛播地址格式和IPv6单播地址相同,用来标识一组接口的地址。一般这些接口属于不同的节点。发往泛播地址的报文被送到这组接口中与其最近的接口(由使用的路由协议判断哪个是最近的)。
IPv6泛播地址的用途之一是用来标识属于同一提供因特网服务的组织的一组路由器。这些地址可在IPv6路由头中作为中间转发路由器,以使报文能够通过特定一组路由器进行转发。另一个用途就是标识特定子网的一组路由器,报文只要被其中一个路由器接收即可。
其中有些泛播地址是已经定义好的,如子网路由器泛播地址。
图1 子网路由器泛播地址格式
子网路由器器泛播地址中“subnet prefix”域用来标识特定链路。发送到子网路由器泛播地址的报文会被送到子网中的一个路由器。所有路由器都必须支持子网泛播地址
子网路由器泛播地址用于节点需要和远端子网上所有路由器中的一个(不关心具体是哪一个)通信时使用。例如,一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。
6 IPv6多播地址
1. IPv6多播地址格式定义
IPv6多播地址用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个多播组。发往多播地址的报文被多播地址标识的所有接口接收。
注意:IPv6多播中不使用Hop Limiit域(相当于IPv4的TTL)
图3 IPv6多播地址格式
其中:
- 11111111
8比特。标识此地址为多播地址 - flags
4比特。flag域中定义如下:图4 IPv6多播地址中的flag域格式
最高的3比特标记为保留域,必须为0
T = 0表示为永久分配(“公认”)多播地址(由IANA分配)
T = 1表示为多播
T = 0 indicates a permanently-assigned (“well-known”) multicast address, assigned by the global internet numbering authority.
T = 1 indicates a non-permanently-assigned (“transient”) multicast address. - scope
4比特。用来标记此多播组的应用范围。可能的值有
0 reserved
1 node-local scope //只在节点范围内有效
2 link-local scope //只在链路范围有效
3 (unassigned)
4 (unassigned)
5 site-local scope //只在一个网络内有效
6 (unassigned)
7 (unassigned)
8 organization-local scope //只在组织内有效
9 (unassigned)
A (unassigned)
B (unassigned)
C (unassigned)
D (unassigned)
E global scope //全局有效
F reserved - group ID
标识多播组(可能是永久的,也可能是临时的,范围由scope定义)
2. IPv6永久分配的多播地址
目前的永久分配(“周知”)多播组如下:
- 保留的多播地址:
FF00::—FF0F::(共16个地址) - 所有节点的地址
FF01:0:0:0:0:0:0:1 (节点本地)
FF02:0:0:0:0:0:0:1 (链路本地) - 所有路由器地址
FF01:0:0:0:0:0:0:2 (节点本地)
FF02:0:0:0:0:0:0:2 (链路本地)
FF05:0:0:0:0:0:0:2 (站点本地) - 被请求节点的地址
FF02:0:0:0:0:1:FFXX:XXXX
上述地址由被请求节点的单播或泛播地址形成:取被请求节点单播或泛播地址的低24比特,在前面增加前缀FF02:0:0:0:0:1:FF00::/104构成。例如,和IPv6地址4037::01:800:200E:8C6C对应的被请求节点多播地址是FF02::1:FF0E:8C6C。
此地址用在IPv6邻居发现协议中,用在邻居请求报文中,由于只有后24比特单播地址相同的节点才会接收目的地址为此地址的报文,因此减少了通信流量(和IPv4 ARP相比)。
7 嵌入IPv4地址的IPv6地址
1. IPv4兼容的IPv6地址
图5 IPv4兼容的的IPv6地址格式
这种地址在低32比特携带IPv4地址,前96比特全0,主要用在一种自动隧道技术,目的地址为这种地址的报文会被自动IPv4隧道封装(隧道的端点为自IPv6报文中的IPv4地址),由于这种技术不能解决地址耗尽问题,已经逐渐被废弃。
2. IPv4映射的IPv6地址
图6 IPv4映射的IPv6地址
这种地址最前80比特为全0,中间16比特为全1,最后32比特为IPv4地址。这种地址用来把只支持IPv4的节点用IPv6地址表示。在支持双栈的IPv6节点上,IPv6应用发送目的报文是这种地址时,实际上发出的报文为IPv4报文(目的地址是“IPv4映射的IPv6地址”中的IPv4地址)。
8 IPv6中特殊的地址
IPv6中还规定了以下几种特殊的IPv6地址
- 1. 未指定的IPv6地址
格式0::0。未指定的IPv6地址不能分配给任何接口,被未分配到IPv6地址的节点表示其没有IPv6地址。例如,一个节点启动后没有IPv6地址,发送报文时填充源地址全0表示自身没有IP地址。未指定的IPv6地址不能在IPv6报文头或路由头中作为目的地址出现。 - 2. IPv6环回地址
格式::1。此地址与IPv4中的127.0.0.1类似,一般在节点发报文给自身时使用,不能分配给物理接口。IPv6环回地址不能作为源地址使用,目的地址为IPv6环回地址的报文不能发送到源节点外,也不能被IPv6路由器转发。
9 节点和路由器必须支持的IPv6地址
- 1. 节点必须支持的IPv6地址
每个主机必须把下列地址作为自身的地址
自身接口的链路本地地址
分配的单播地址
环回地址
所有节点多播地址
每个分配的单播或多播地址对应的被请求节点多播地址
此主机所属的其它多播组地址 - 2. 路由器必须支持的IPv6地址
节点必须支持的IPv6地址(2.3.5第1节)
接口配置为路由器接口的子网路由器泛播地址
任何其它路由器配置的泛播地址
所有路由器多播地址
此路由器所属的其它多播组地址
二、IPv6地址分配
1 全球单播地址空间分配
因特网分配地址权威机构(IANA)负责IPv6地址空间的分配。目前IANA从整个可聚合全球单播地址空间(格式前缀为001)中取2001::/16进行分配。
RFC2450中描述了推荐的地址分配策略。
图7 可聚合全球单播的推荐分配方式
其中:
- FP
格式前缀,对于可聚合全局单播固定为001。 - TLA ID
顶级聚合标识符。此域由IANA分配给指定的注册机构。 - Sub-TLA
次顶级聚合标识符。此域由向IANA注册的机构为满足一定条件的组织分配。这些组织一般是具有一定规模的ISP。 - NLA ID
下一级聚合标识符。此域由地址注册机构或其下分配了Sub-TLA的组织分配。 - SLA ID
站点级聚合标识符。此域一般为组织或企业内部进行子网划分使用。
IANA指定的注册机构则从地址空间2001::/16分配/23前缀,具体如下:
2001:0200::/23 到 2001:0C00::/23分配给亚太地区(APNIC)
2001:0400::/23分配给美国(ARIN)
2001:0600::/23到2001:0800::/23分配给欧洲和中东(RIPE NCC)
这些注册机构再从IANA得到的地址空间分配/32前缀给IPv6 ISP,IPv6 ISP再从/32前缀中分配/48前缀给每个客户。/48前缀的地址空间还可以进一步分为/64前缀的子网。这样每个客户最大可以有65535个子网。
为了限制IPv4地址分配初期的不合理分配方案,每个ISP必须同时满足下列条件才能获得/32前缀:
- 部署外部路由协议
- 至少与3个ISP相连
- 至少有40个客户或至少在12个月内显示有意提供IPv6服务。
2 IPv6实验网络地址分配(6BONE)
6BONE网络是全球范围的IPv6实验网络,使用网络前缀3ffe:0000::/16。每个伪顶级聚合分配3ffe:0800::/28范围内的/28前缀,最多支持2048个伪顶级聚合。处于末端的站点从上游提供者得到/48前缀,每个站点内还可细分为多个/64前缀。
6BONE网络按层次化结构分配地址,地址空间由IANA定义配,分配策略在RFC2921(6BONE伪顶级聚合和网络层聚合格式)中定义。
原创文章,作者:满天星,如若转载,请注明出处:https://www.ipv6s.com/basis/20100815132.html