IPv6地址结构RFC 35131.前言本文描述了ipv6的地址结构,ipv6 地址的文本表示,IPv6的单播地址、任播地址,多播地址以及IPv6结点所必须的地址的定义。
IPv6的不同的地址的基本格式(单播,任播,以及多播)。
2.IPv6选址IPv6地址是对接口或接口集合的128-bit的标识符。
有三种类型的地址:单播(Unicast):针对一个接口的标识符。
一个发向单播地址的数据包被送往该地址所确定的接口。
任播(Anycast):接口的一个集合的标识符(代表性的属于不同结点)。
一个发向任播地址的数据包被发送到为该地址所标识的一集接口之一(即,按照路由协议的测量距离的“最近的”接口)。
多播(Multcast):接口的一个集合的标识符。
一个发向多播地址的数据包被发往所有以该地址做标识的接口。
在IPv6中,没有广播地址,广播地址的功能被多播地址的能力所取代。
本文中,给地址字段一个种名,如“子网(subnet)”。
当一个做标识符用的“ID”跟在种名后面一起使用(如“subset ID”),则表示种名字段的内容。
当它和一个“prefix”的术语一起使用时(如“subset prefix”),它指所有的从左一直到并包含本字段的所有地址。
在IPv6中,除非明确声明排除,则所有全0或全1的字段值是合法的。
特定的,前缀可能包含,或以全0字段值结束。
2.1地址模型所有类型的IPv6地址分配给接口,而不是分配给结点。
一个IPv6单播地址与单个接口相关。
由于每个接口只属于一个结点,故任何一个结点的单播地址可用来做为结点的标识。
所有接口必须至少有一个单播link-local地址(见2.8结点必需的地址)。
一个接口也可能有多个任意类型的或任意范围的IPv6地址(单播,任播和多播)。
不做为来自或发送到非邻居的IPv6包的源或目的的接口不需要用超出链路范围的单播地址。
这对于点到点的连接的接口有时是非常方便的。
这个地址模型有一个例外:在执行中,如果将多个物理接口视为一个接口,当它出现在网络层时,一个单播地址或一个单播地址集可能被分配到多个物理接口上。
这有利于在多个物理接口上进行负载分担。
当前,IPv6沿用IPv4模型中的子网前缀关联一条链路。
多个子网前缀可分配到同一条链路上。
2.2地址的文本表示有三种惯用方式用文本字符串表示IPv6地址:1.首选方式x:x:x:x:x:x:x:x,x是16进制数组成的一块,用以表示一个16bit 的二进制数。
8个块组成一个地址。
例如:FEDC:BA98:7654:3210:FEDC:BA98:7654:32101080:0:0:0:8:800:200C:417A注意:在每个单独的字段,没有必要写前面的0,但是每个字段至少有一个数值。
2.由于分配某些风格的IPv6地址的方法不同,地址中包含一长串0是很平常的。
为了易于书写包含多个0bit的地址,可用一种简单语法来压缩这些0。
用“::”来表示一组或多组0。
“::”只可在地址中出现一次。
“::”也可用来压缩地址中打头和末尾的0。
例如:1080:0:0:0:8:800:200C:417A 一个单播地址FF01:0:0:0:0:0:0:101 一个多播地址0:0:0:0:0:0:0:1 loopback地址0:0:0:0:0:0:0:0 未指明地址可表示如下:1080::8:800:200C:417A 一个单播地址FF01::101 一个多播地址::1 loopback地址:: 未指明地址3.当处理IPv4和IPv6结点都存在的混合环境时,使用一种可替代的形式即:x:x:x:x:x:x:d.d.d.d有时要更方便些。
X 表示处于6个地址高位的16-bit的16进制数;d表示处于地址低4位的8-bit的10进制数(标准IPv4表示式)。
例如:0:0:0:0:0:0:13.1.68.30:0:0:0:0:FFFF:129.144.52.38或者为压缩表达式:::13.1.68.3::FFFF:129.144.52.382.3地址前缀的文本表达式IPv6的地址前缀表达式与IPv4的地址前缀CIDR记法【CIDR】相仿。
IPv6的地址前缀记法:Ipv6-address/prefix-length其中:IPv6-address 是2.2所列出的任何一种IPv6的地址记法。
Prefix-length 一个十进制数值,指出地址包含前缀的最左连续bit数。
例如:下面是的60-bit的12AB00000000CD3(16进制) 前缀的合法表示:12AB:0000:0000:CD30:0000:0000:0000:0000/6012AB::CD30:0:0:0:0/6012AB:0:0:CD30::/60下面是该前缀不合法的表示:12AB:0:0:CD3/60 可以丢掉地址中16-bit块中打头的0,但是末尾的0不可省12AB::CD30:/60 /左侧的地址展开后为:12AB:0000:0000:0000:0000:0000:0000:CD3012AB::CD3/60 /左侧的地址展开后为:12AB:0000:0000:0000:0000:0000:0000:0CD3 当同时写结点的地址和它的地址前缀(如结点的子网前缀)时,可以组合的写为:结点地址:12AB:0:0:CD30:123:4567:89AB:CDEF它的子网号:12AB:0:0:CD30::/60简写为:12AB:0:0:CD30:123:4567:89AB:CDEF/602.4地址类型的标识址进行区分。
全球单播地址的通用格式在2.5.4节中有述。
全球单播地址的某些特殊用途的子类型,包含了一个内嵌的IPv4地址(用于IPv4-IPv6互操作)在2.5.5节中有述。
未来的规范可能会为其他用途而重新定义一个或多个“子域”的全球单播空间,但是除非直到发生,实践中必须将所有的不以上表所列前缀为开头的地址视为全球单播地址。
2.5单播地址IPv6单播地址可以以前缀的任意bit 长度做聚合,这一点与IPv4的无类域间路由(CIDR )相似。
有几种类型的IPv6单播地址,详细地,有全球单播(global unicast ),站点本地单播(site-local unicast) 和链路本地单播(link-local unicast )。
也有一些全球单播特殊之用的子类型,如内嵌IPv4的IPv6地址,或者是编了码的NSAP (网络服务接入点)的IPv6地址。
另外的地址类型或子类型在将来会有所定义。
IPv6结点可能会对IPv6地址的内部结构知道的很多或很少,这要看结点所充当的角色(例如,路由器还是主机)。
最小的情况,结点认为单播地址(包括结点自身的)没有内部结构:一个稍稍复杂的主机(但仍是相当简单)可能又会知道它所连接链路的子网前缀,此时,不同的地址可能有不同的n 值:尽管一个非常简单的路由器可能不清楚IPv6单播地址的内部结构,但是路由器通常更熟知一级或多级路由协议的操作的层次边界。
了解的边界因路由器而异,主要是取决于路由器所处的路由层次的位置。
2.5.1接口标识符IPv6单播地址的接口标识被用于标识一个链路上的接口。
要求在子网前缀中唯一。
建议不要将同一个标识符分配给同一链路上的不同接口。
它们也可能在更广范围内唯一。
在某些情况下,接口标识符源于接口链路层地址。
同一个接口标识符可以用于同一个结点的不同接口上,只要这些接口与不同的子网相连。
注意到接口标识符的唯一性不依赖IPv6地址的唯一性。
例如:以一个非全球范围的接口标识符可以生成一个全球单播地址,而一个站点本地地址可由一个全球范围的接口标识符生成。
对于所有的单播地址,除了那些以二进制数000开始的地址,要求接口ID 必须是64bit 长并以改进EUI-64的格式创建。
基于接口标识符的改进EUI-64格式当源于一个全球令牌(如:IEEE 802 48-bit MAC 或IEEE EUI-64 标识符[EUI64])时,可能有全球范围;或是当获得不到(例如,串行链路,隧道末端等等)全球令牌时,或是全球令牌不合需要(如,私用[PRIV]临时令牌)时,有本地范围。
改进EUI-64格式接口标识符是当从IEEE EUI-64标识符形成接口标识符时通过颠倒“u ”比特(在IEEE EUI-64术语中称 universal/local 比特)形成的。
在做为结果的改进EUI-64格式中,“u ”比特设值为1表示全球范围,设置成0表示本地范围。
IEEE EUI-64标识符最前面的3个字节的二进制表示如下:以因特网标准比特顺序书写,“u ”表示universal/local 位,“g ”表示个人/团体位,“c ”是表示company-id 的比特位。
附录A :“生成改进EUT-64格式的接口标识符”提供了例子,说明如何生成基于接口标识符的改进EUI-64格式。
将“u ”比特翻转的动机是更易于系统管理员在硬件令牌不可用的情况下手工配置非全球标识符。
可以想象用在在像串口链路,隧道末端等这样的情形。
该替代方式的格式是0200:0:0:1,0200:0:0:2,等,并不是更简单的1,2等。
在改进EUI-64 格式标识符中的universal/local 比特的使用允许未来技术的发展能够以全球范围利用接口标识符。
形成接口标识符的细节在适当的“IPv6 over <link>”规范中有定义。
如“IPv6 over Ethernet ”[ETHER],“IPv6 over FDDI ”[FDDI]。
2.5.2未指明地址地址:0:0:0:0:0:0:0:0被称作未指明地址。
这一地址不能分派给任何结点。
它指示一个地址的缺乏。
一个使用的例子就是一个初始化主机不知道自身的地址之前,发送IPv6数据包中包含的源地址字段值。
未指明地址不能用于IPv6数据包及IPv6路由包头的目的地址字段。
一个源地址为未指明地址的IPv6数据包不允许被IPv6路由器转发。
2.5.3环回地址单播地址0:0:0:0:0:0:0:1被称作环回地址。
用于结点可能向自己发送cccc ccug cccc cccc cccc cccc0 0 0 7 0 1 8 5 1 16 3IPv6报文。
它也许从不分配给一个物理接口。
被认为具有一个本地链路范围的地址,也可被认为是一个不到任何地方的虚链路上的虚接口的链路本地单播地址。
(代表性的称为“环回接口”)。
环回地址不允许用于从单一结点发出去的IPv6数据报的源地址字段。
一个目的地为环回地址的IPv6数据包不允许发送到本结点之外,也绝不能被IPv6路由器转发。
丢弃从一个接口上收到的目的地为环回地址的报文。
2.5.4全球单播地址IPv6全球单播地址的通用格式如下:n bits m bits 128-n-m bits全球路由前缀子网ID 接口ID其中:全球路由前缀(Global routing prefix)分配给一个站点(子网或链路的一个集群)的(典型地,为分级结构的)值;子网ID(subset ID)是站点内部的一个链路的标识符;接口ID(Interface ID)同2.5.1中定义。