RPC系列协议--rfc2373--IP Version 6 Addressing Architecture
1.摘要
该规范定义了IP版本6协议的寻址体系结构。该文档包括IPv6寻址模型、IPv6地址的文本表示、IPv6单播地址的定义、anycast地址和多播地址,以及一个IPv6节点所需的地址。
2.IPv6地址
IPv6地址是接口和接口集的128位标识符。地址有三种:
定义 | 说明 |
---|---|
Unicast | 单个接口的标识符。发送到单播地址的数据包被发送到由该地址标识的接口。 |
Anycast | 一组接口(通常属于不同的节点)的标识符。发送到anycast地址的数据包被发送到由该地址(根据路由协议的距离度量,“最近的”一个)标识的接口之一。 |
Multicast | 一组接口(通常属于不同的节点)的标识符。发送到多播地址的数据包被发送到由该地址标识的所有接口。 |
在IPv6中没有广播地址,他们的功能被多播地址取代。
2.1 寻址模式
所有类型的IPv6地址都被分配给接口,而不是节点。IPv6单播地址指的是一个接口。由于每个接口属于单个节点,该节点的任何接口的单播地址都可以用作节点的标识符。
所有接口都要求至少有一个链路-本地单播地址(关于额外的必需地址,请参阅2.8节)。一个单一接口也可以分配任意类型(单播、任意cast和多播)或范围的多个IPv6地址。对于不用作与非邻居之间的任何IPv6数据包的起点或目的地的接口,不需要作用域大于链接作用域的单播地址。
2.2 地址的文字表示
用文本字符串表示IPv6地址有三种传统形式:
a.首选形式为xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx是地址的8个16位元的十六进制值。
例如:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 或 1080:0:0:0:8:800:200C:417A
b.由于分配特定风格的IPv6地址的一些方法,地址通常包含0位的长字符串。为了使写入包含零位的地址更容易,可以使用特殊的语法来压缩零位。使用“::”表示有多组16位的零。“::”只能在一个地址中出现一次。"::"也可以用来压缩地址的前导和/或后零。
例如以下的表达方式:
全称 | 缩写 | 定义 |
---|---|---|
1080:0:0:0:8:800:200C:417A | 1080::8:800:200C:417A | a unicast address |
FF01:0:0:0:0:0:0:101 | FF01::101 | a multicast address |
0:0:0:0:0:0:0:1 | ::1 | the loopback address |
0:0:0:0:0:0:0:0 | :: | the unspecified addresses |
c.在处理IPv4和IPv6节点的混合环境时,另一种有时更方便的形式是x❌x❌x:d.d.d。d,其中’x’是地址的6个16位高段的十六进制值,'d是地址的4个8位低段的十进制值(标准IPv4表示)。
全称 | 缩写 |
---|---|
0:0:0:0:0:0:13.1.68.3 | ::13.1.68.3 |
0:0:0:0:0:FFFF:129.144.52.38 | ::FFFF:129.144.52.38 |
2.3 地址前缀的文本表示
IPv6地址前缀的文本表示类似于用CIDR符号编写IPv4地址前缀的方式。IPv6地址前缀由表示法表示:ipv6-address/prefix-length
2.4 地址类型表示
IPv6地址的特定类型由地址中的前导位表示。由这些前导位组成的可变长度字段称为格式前缀(FP)。这些前缀的初步分配如下:
分配 | Prefix(binary) | 地址空间的分数 |
---|---|---|
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 |
除了多播地址(1111 1111)之外,格式前缀001到111都需要具有EUI-64格式的64位接口标识符。单播地址通过地址的高阶八位组的值区别于多播地址:FF值(11111111)标识一个地址为多播地址;任何其他值将地址标识为单播地址。Anycast地址取自单播地址空间,在语法上无法与单播地址区分。
2.5 单播地址
在IPv6中有几种单播地址分配形式,包括全局聚合全局单播地址、NSAP地址、IPX分级地址、站点本地地址、链路本地地址和支持ipv4的主机地址。
2.5.1 接口标识符
IPv6单播地址中的接口标识符用于标识链接上的接口。它们必须在该链接上是唯一的。它们在更广泛的范围内也可能是独一无二的。在许多情况下,接口的标识符将与接口的链接层地址相同。同一个接口标识符可以在单个节点的多个接口上使用。在单个节点的多个接口上使用相同的接口标识符并不影响接口标识符的全局唯一性,或者每个IPv6地址使用该接口标识符创建的全局唯一性。在一些格式前缀中,接口ID要求为64位长,并以IEEE EUI-64格式构造。基于EUI-64的接口标识符在全局令牌可用时可能具有全局作用域(如IEEE 48位MAC),或者在全局令牌不可用时具有局部作用域(如串行链路、隧道端点等)。当从EUI-64形成接口标识符时,需要“u”位(IEEE EUI-64术语中的全局/本地位)反转。“u”位被设置为1(1)表示全局作用域,被设置为0(0)表示局部作用域。EUI-64标识符二进制的前三个八进制数如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8-23 |
---|---|---|---|---|---|---|---|---|
c | c | c | c | c | c | u | g | c |
以Internet标准位顺序编写,其中“u”是全局/本地位,“g”是个人/组位,“c”是company_id的位。
2.5.2 未指明的地址
地址0:0:0:0:0:0:0称为未指定地址。绝不能将它分配给任何节点。它表示没有地址。它使用的一个例子是在任何IPv6数据包的源地址字段的初始化主机之前,它已经知道自己的地址。不能将未指定的地址用作IPv6数据包或IPv6路由标头中的目标地址。
2.5.3 环回地址
单播地址0:0:0:0:0:0:1称为环回地址。它可以被一个节点用来发送IPv6数据包到自己。它可能永远不会被分配给任何物理接口。它可以被认为与一个虚拟接口相关联(例如,环回接口)。环回地址不能用作发送到单个节点外部的IPv6数据包的源地址。一个目的地地址环回的IPv6数据包绝不能被发送到单个节点之外,也绝不能被IPv6路由器转发。
2.5.4 嵌入IPv4地址的IPv6地址
IPv6转换机制包括一种主机和路由器在IPv4路由基础设施上动态隧道IPv6数据包的技术。利用这种技术的IPv6节点被分配特殊的IPv6单播地址,该地址以低阶32位的方式携带IPv4地址。这种类型的地址被称为“ipv4兼容IPv6地址”,其格式如下:
80 bits | 16 | 32 bits |
---|---|---|
0000 | 0000 | IPv4 address |
第二种类型的IPv6地址也被定义,它包含一个嵌入的IPv4地址。此地址用于表示仅支持ipv4的节点(那些不支持IPv6的节点)的地址为IPv6地址。这种类型的地址被称为“ipv4映射IPv6地址”,其格式如下:
80 bits | 16 | 32 bits |
---|---|---|
0000 | FFFF | IPv4 address |
2.5.5 可聚合的全局单播地址
允许直接连接到提供商和连接到交换端的站点进行有效的路由聚合。站点可以选择连接到任何一种聚合点。IPv6聚合全局单播地址格式如下:
类型 | 位数 | 含义 |
---|---|---|
FP | 3 | 001 Prefix |
TLA ID | 13 | Top-Level Aggregation Identifier |
RES | 8 | Reserved for future use |
NLA ID | 24 | Next-Level Aggregation Identifier |
SLA ID | 16 | Site-Level Aggregation Identifier |
Interface ID | 64 | Interface Identifier |
2.5.6 本地使用IPv6单播地址
定义了两种类型的本地使用单播地址。它们是Link-Local和Site-Local。Link-Local用于单个链接,Site-Local用于单个站点。链接Link-Local地址的格式如下:
10bits | 54 bits | 64 bits |
---|---|---|
1111111010 | 0 | interface ID |
Link-Local地址被设计用于寻址单个链路,用于自动地址配置、邻居发现或当没有路由器时。路由器不能转发任何具有链路本地源地址或目的地地址的数据包到其他链路。
Site-Local地址的格式如下:
10bits | 38 bits | 16 bits | 64 bits |
---|---|---|---|
1111111011 | 0 | subnet ID | interface ID |
Site-Local地址被设计用于不需要全局前缀的站点内部寻址。路由器不能转发任何包与地点-本地的来源或目的地地址以外的地点。
2.6 Anycast地址
IPv6 anycast地址是分配给多个接口的地址(通常属于不同的节点),根据路由协议的距离度量,发送到anycast地址的数据包被路由到拥有该地址的“最近的”接口。Anycast地址使用任意定义的单播地址格式从单播地址空间分配。因此,anycast地址在语法上与单播地址是不可区分的。当将单播地址分配给多个接口,从而将其转换为anycast地址时,必须显式地配置该地址分配给的节点,以知道它是anycast地址。
2.7 组播地址
IPv6多播地址是一组节点的标识符。一个节点可以属于任意数量的多播组。多播地址的格式如下:
8bits | 4bits | 4bits | 112bits |
---|---|---|---|
11111111 | flgs | scop | group ID |
地址开头的11111111表示该地址是一个多播地址。flgs有4位,前三位保留初始化为0,最后一位T设置为0表示由全球internet编号机构分配的永久分配(“well-known”)多播地址。设置为1表示一个非永久分配的(“transient”)多播地址。scop是一个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标识给定范围内的多播组(永久的或临时的)。永久分配的多播地址的“意义”与作用域值无关。例如,如果给“NTP服务器组”分配了一个永久多播地址,组ID为101(十六进制),则:
地址 | 含义 |
---|---|
FF01:0:0:0:0:0:0:101 | 所有NTP服务器位于与发送方相同的节点上 |
FF02:0:0:0:0:0:0:101 | 所有NTP服务器都位于与发送方相同的链接上 |
FF05:0:0:0:0:0:0:101 | 所有NTP服务器与发送方位于同一站点 |
FF0E:0:0:0:0:0:0:101 | 所有NTP服务器在internet上 |
非永久分配的多播地址只在给定的范围内有意义。例如,一组由非永久性标识,本地站点多播地址FF15:0:0:0:0:0:0:101在一个站点群没有什么关系,使用相同的地址在一个不同的站点,也非永久性组使用相同的组ID与不同的范围,也不是一个永久的组相同的组ID。
2.7.1 预定义的多播地址
以下well-known的多播地址是预先定义的:
保留的多播地址,不能分配给任何多播组:
FF00:0:0:0:0:0:0:0
FF01:0:0:0:0:0:0:0
FF02:0:0:0:0:0:0:0
FF03:0:0:0:0:0:0:0
FF04:0:0:0:0:0:0:0
FF05:0:0:0:0:0:0:0
FF06:0:0:0:0:0:0:0
FF07:0:0:0:0:0:0:0
FF08:0:0:0:0:0:0:0
FF09:0:0:0:0:0:0:0
FF0A:0:0:0:0:0:0:0
FF0B:0:0:0:0:0:0:0
FF0C:0:0:0:0:0:0:0
FF0D:0:0:0:0:0:0:0
FF0E:0:0:0:0:0:0:0
FF0F:0:0:0:0:0:0:0
所有节点地址,范围1(node-local)或范围2(link-local)内所有IPv6节点的组:
FF01:0:0:0:0:0:0:1
FF02:0:0:0:0:0:0:1
所有路由器地址,范围1(node-local)、2(link-local)或5(site-local)内所有IPv6路由器的组:
FF01:0:0:0:0:0:0:2
FF02:0:0:0:0:0:0:2
FF05:0:0:0:0:0:0:2
Solicited-Node地址,指定节点多播地址是通过将地址的低阶24位(单播或Anycast)附加到前缀而形成:
FF02:0:0:0:0:1:FFXX:XXXX
2.7.2 分配新的IPv6多播地址
当前将IPv6多播地址映射到IEEE 802 MAC地址的方法采用IPv6低阶32位的多播地址,并使用它创建一个MAC地址。由于这个新的IPv6多播地址应该分配,使组标识符总是在低顺序32位如下所示:
8bits | 4bits | 4bits | 80bits | 32bits |
---|---|---|---|---|
11111111 | flgs | scop | reserved must be zero | group ID |
2.8 节点的必需地址
一个主机需要识别下列地址作为识别自己:
a.每个接口的链路本地地址
b.单播地址分配
c.环回地址
d.所有节点多播地址
e.对其分配的单播和任意播地址的指定节点多播地址
f.主机所属的所有其他组的多播地址。
一个路由器需要识别主机需要识别的所有地址,加上以下地址作为自身的标识:
a.子网路由器anycast地址的接口,它被配置作为一个路由器上。
b.路由器已配置的所有其他任意cast地址。
c.所有的路由器都多播地址
d.路由器所属的所有其他组的多播地址。
唯一的地址前缀,应该在一个实现预定义是:
a.未指明的地址
b.环回地址
c.组播前缀
d.本地使用前缀(Link-Local和Site-Local)
e.预定义的多播地址
f.IPv4兼容的前缀
3.创建基于EUI-64的接口标识符
根据特定链接或节点的特征,有许多方法可以创建基于EUI-64的接口标识符。
3.1 带有EUI-64标识符的链接或节点
将EUI-64标识符转换为接口标识符所需的惟一更改是反转“u”(全局/本地)位。例如,表单的全局唯一EUI-64标识符:
0-7 | 8-23 | 24-63 |
---|---|---|
cccccc0g | cccccccc… | mmmmmmmm… |
其中“c”是分配的company_id的位,“0”是表示全局作用域的全局/本地位的值,“g”是单个/组位,“m”是制造商选择的扩展标识符的位。
0-7 | 8-23 | 24-63 |
---|---|---|
cccccc1g | cccccccc… | mmmmmmmm… |
唯一的变化是颠倒了全局/本地位的值。
3.2 具有IEEE 802 48位MAC的链路或节点
定义了一种从IEEE 48位MAC标识符创建EUI-64标识符的方法。这是在48位MAC的中间(在company_id和供应商提供的id之间)插入两个八进制的值0xFF和0xFE。例如48位MAC的全局作用域:
0-7 | 8-23 | 24-63 |
---|---|---|
cccccc0g | cccccccc… | mmmmmmmm… |
其中“c”是分配的company_id的位,“0”是表示全局作用域的全局/本地位的值,“g”是单个/组位,“m”是制造商选择的扩展标识符的位。
0-7 | 8-23 | 24-31 | 32-63 |
---|---|---|---|
cccccc1g | cccccccc… | 1111111111111110 | mmmmmmmm… |
当IEEE 802 48位MAC地址可用时(在接口或节点上),实现应该使用它们创建接口标识符,因为它们的可用性和唯一性属性。
温馨提示:
以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!