mountaintime

IPv6学习笔记【整理】

IPv6地址表示方法  

  IPv6的地址空间,首先IPv6长达128位的地址空间长度,这个是IPv4的4倍之多,IPv4只有32位地址。用指数表示就是2^128,可以容纳 3.4*10^38个可能的IPv6地址。更加形象一点的说法是地球上每平方米都可以有6.65*10^23个IPv6地址。那么为什么要那么多的 IPv6地址呢?现在IPv4地址是32位的,勉强还能支持的话,我们采用64位的地址应该完全够用了的呀?首先是设计者怕了,当初设计IPv4的时候觉 得那么多就够用了,哪知道,很快就远远不够用了,需要采用私有地址转换等手段来应急。其实这个128的地址是为了更好的划分路由层次,减少路由表项,这个 以后再讲。

  原来我们熟悉的IPv4的地址是按照点分十进制的方法来表示的,例如202.101.172.35.这串数字去除点号,转换成2进制数就是 10111100001110001010110010011101000011,正好是32位。这种表示方法在IPv4上是简单易行的,但是要用到 IPv6就不行了。比如202.101.172.35.202.101.172.35.202.101.172.35.202.101.172.35,这 个地址一长串的数字记起来仍然比较困难。所以IPv6采用了另外一种办法来记录,叫做冒号十六进制表示法(colon hexadecimal).先来看一个用冒号十六进制表示的IPv6地址 FE80:0000:0000:0000:AAAA:0000:00C2:0002,看起来比较简洁吧。这个地址是这么来的:原来的128位地址 1111111010000000 0000000000000000 0000000000000000 0000000000000000 1010101010101010 0000000000000000 0000000011000010 0000000000000010,这么长一个个敲出来不容易啊,更不用说拿来手工输入上网用了。上面已经将128位的地址按照16位用空格隔开分成一 段,然后将每个16位都转换成十六进制再把空格用冒号代替,就完成转换了。

  要是嫌这个FE80:0000:0000:0000:AAAA:0000:00C2:0002地址看起来还是太长,这里还有种办法来缩减其长度,叫做零压 缩法。如果几个连续段位的值都是0,那么这些0就可以简单的以::来表示,上述地址就可以写成FE80::AAAA:0000:00C2:0002。这里 要注意的是只能简化连续的段位的0,其前后的0都要保留,比如FE80的最后的这个0,不能被简化。还有这个只能用一次,在上例中的AAAA后面的 0000就不能再次使用。当然也可以在AAAA后面使用::,这样的话前面的12个0就不能压缩了。这个限制的目的是为了能准确还原被压缩的0.不然就无 法确定每个::代表了多少个0.如FE80:0000:0000:0000:AAAA:0000:00C2:0002可以压缩为FE80::AAAA:0:C2:2

 

IPv6的地址分配  

  前面说到IPv6采用128位的地址空间,其中一个主要的原因就是提供多层次的地址结构,使得路由和寻址更加灵活方便。这个128位的地址被分成两个部分,前面的64位表示网络地址,也叫子网标识符,后面的64位叫接口标识符。

  先来介绍一下IPv6的地址的分类。IPv6的地址有三种类型:单播地址、多播地址、泛播地址。单播地址标识了这种类型地址的作用域内的单个接口。这个有 点像IPv4中的单播地址,指的同样是一定区域内唯一确认的地址。多播地址可以标识零个或者多个接口,这个类似于IPv4里面的广播地址。泛播地址用于标 识多个接口,这是IPv6新提出来的一个概念。主要用于一对多中之一的通信,也就是只有唯一一个接口可以收到报文。

  下面这张图表示的是IPv6地址的分类和分配情况(最后面按个组播地址就是多播地址)。

 

单播IPv6地址结构  

    单播IPv6地址包括以下几种类型:

  • 可集聚全球单播地址
  • 链路本地地址
  • 站点本地地址
  • 特殊地址
  • 兼容地址
  • NSAP地址

    先来讲讲可聚集全球单播地址,这个名字有点长,其实这个就相当于IPv4的公网地址。从名字上来看这种地址有两个特点,一是可聚集的,二是全球单播的。第 二个很容易理解,就是指这类地址在整个Internet是唯一寻址的。这个就好比新浪或者网易的IP地址,你在中国或者美国都可以通过这个唯一的地址访问 到。可聚集是一个路由上的概念,是指可以将一类IP地址汇总起来,从而减少有效路由的条数。

单播IPv6地址结构 - analylx - analylx的IPv6博客

 

上图就是可集聚全球单播地址的结构图。前三位是固定的001表示这是一个全球单播地址。

TLA ID 顶级集聚标识符。这个字段的长度是13位。TLA ID标识了路由层次结构的最高层,由Internet地址授权机构IANA来分配和管理。一般来说是分配给顶级的Internet服务提供商(ISP)的。

Res 保留字段,长度位8位。保留作为以后扩展使用。

NLA ID 下一级集聚标识符。这个字段长度24位。NLA ID允许ISP在自己的网络中建立多级的寻址结构,以使这些ISP既可以为其下级的ISP组织寻址和路由,也可以识别其下属的机构站点。

SLA ID 站点级集聚标识符。这个字段长度16位。SLA ID被一个单独的机构用于标识自己站点中的子网。一个机构可以利用这个16位的字段在自己的站点内创建65536(2^16)个子网,或者建立多级的寻址 结构和有效的路由结构。这样的子网规模相当于IPv4中的一个A类地址的大小。

Interface ID 标识特定子网上的接口。这部分就是前面说的IPv6地址结构中的接口部分,这个字段的长度是64位。一般就是用来标识网络上的一台主机或者一个设备的IPv6接口。

    这里的前48位地址组合在一起一般称为公共拓扑,用来表示提供介入服务的大大小小的ISP的集合。后面的16+64位就是具体到了某个机构或者站点的某个具体的接口和主机。

 

 

多播IPv6地址  

 

 

任意位置上的IPv6节点可以侦听任意IPv6多播地址上的多播通信流,IPv6节点可以同时侦听多个多播地址,节点可以随时加入或者离开一个多播组。

IPv6多播地址的前缀是1111 1111(FF),IPv6地址不能用做源地址或者是路由报头中的中间目标地址。

1111 1111(8)+标记(4)+范围(4)+组ID(112)=128位

  • 标记 目前在RFC2373中顶一顶唯一一个标记是标记字段中的最低位--暂时态(T)。当设置为0时表示当前多播地址是一个由IANA分配的永久多播地址,当置为1是,表示是一个临时多播地址。
  • 范围 表示多播流准备在IPv6网络中发送的范围。以下是RFC2373中的定义值

 

 0  保留
 1  节点本地范围
 2  链路本地范围
 5 站点本地范围 
 8 机构本地范围 
 E  全球范围
 F  保留
   

例如多播地址FF02::2这个多播地址具有链路本地范围,IPv6的路由器就不会把这个多播流转发到本地范围之外。

  • 组ID 用以表示标识多播组,并且在当前范围内是唯一的。永久分配的组ID不受当前范围的限制。临时组ID只与特定的范围相关。从FF01::到FF0F::的多播地址是保留的。

以下列出几个特殊的多播地址

  • FF01::1 节点本地范围内所有节点的多播地址
  • FF02::1 链路本地范围内所有节点的多播地址
  • FF01::2 节点本地范围内所有路由器的多播地址
  • FF02::2 链路本地范围内所有路由器的多播地址
  • FF05::2 站点本地范围内所有路由器的多播地址

IPv6多播地址代替了所有形式的IPv4广播地址,也就是说IPv6不存在广播地址类型。

RFC2373中建议把IPv6多播地址中的低32位分配给组ID,然后吧剩余的字段置0,。这个样每一个组ID都映射到一个唯一的以太网多播MAC地址。

请求节点多播地址FF02::1::FF00/104+单播IPv6地址的最后24位构成。具体作用以后再说。

 

泛播IPv6地址 

泛播地址 (anycast address)被分配给多个接口。发往泛播地址的数据包被路由结构转发给分配了泛播地址的接口中距离最近的一个。为了便于转发路由结构必须知道哪些接口 拥有泛播地址,并且他们和自己的相对距离。这些信息是通过一部分网络的的路由结构上的主机路由广播来获得的,这部分网络不能用路由前缀来汇总泛播地址。在 IPv6的路由结构中,并不需要使用将IPv6数据包转发到机构的内部网络中最近的泛播组成员的主机路由。

直到RFC2373,泛播地址仅仅用做目标地址,并且只分配给路由器。泛播地址位于单播地址空间之外,并且泛播地址的范围就是指泛播地址时所依据的单播地址的范围。一个给定的单播地址是否是一个泛播地址是无法确定的。只有路由器和泛播组成员自己知道。

子网-路由器(subnet-Router)泛播地址在RFC2373中定义,并且是必须的。它是由一个给定接口的子网来创建的。在创建子网-路由 器泛播地址时,地址中的子网前缀部分就设为子网前缀的值,地址中的其余位都设位0。所有连接到一个子网的路由器接口,都具有这个子网的子网-路由器泛播地 址。子网-路由器泛播地址用于同连接到特定子网的最近的路由器进行通信。

 

主机的IPv6地址 

一般的IPv4主机会给单块网卡分配单个IPv4地址,但是IPv6主机往往会给每块网卡分配多个IPv6地址。典型的IPv6主机接口地址有如下几种:

  • 每个接口的链路本地地址
  • 每个接口的附加单播地址(可能是站点本地地址和一个或多个全球地址)
  • 环回接口的地址(::1)

另外IPv6主机上的每个接口随时侦听以下多播地址上的数据:

  • 节点本地范围内所有节点的多播地址(FF01::1)
  • 链路本地范围内所有节点多播地址(FF02::1)
  • 每个单播地址的请求节点地址
  • 同组的多播地址

路由器的IPv6地址  

IPv6路由器具有以下单播地址:

  • 每个接口的链路本地地址
  • 每个接口的附加单播地址(可能是站点本地地址和一个或多个全球地址)
  • 环回接口的地址(::1)

另外,IPv6路由器还具有以下泛播地址:

  • 每个子网的子网-路由器泛播地址
  • 附加泛播地址(可选)

IPv6路由器的接口还可以随时侦听以下多播地址上的数据:

  • 节点本地范围内所有节点的多播地址(FF01::1)
  • 节点本地范围内所有路由器多播地址(FF01::2)
  • 链路本地范围内所有节点多播地址(FF02::1)
  • 链路本地范围内所有路由器多播地址(FF02::2)
  • 站点本地范围内所有路由器多播地址(FF05::2)
  • 每个单播地址的请求节点地址
  • 同组的多播地址

IPv6接口标识符  

当前定义的IPv6单播地址的后64位是主机位,也就是接口标识符。这个接口ID的长度是固定的,这是为了便于与48位的MAC地址进行映射,以及与IEEE1394(FireWire火线)和今后局域网所使用的64位的MAC(EUI-64)地址进行映射。

确定接口标识符的方法如下:

  • 根据RFC2373的定义,所有使用从001到111前缀的单播地址,都必须使用出自扩展唯一标识符(EUI-64)地址的64位接口标识符。64位的EUI-64地址由IEEE定义。EUI-64地址或者是分配给一块网卡,或者是来自于IEEE802地址。
  • 根据RFC3041的定义,为提供一定程度的匿名性,存在临时分配和随机产生的接口标识符。
  • 在有状态地址自动分配的过程中分配——例如通过动态主机配置协议(DHCPv6)。
  • 根据RFC2472定义,一个接口标识符可以是基于链路层地址或者序列号,或者在配置点对点协议(PPP)接口时,或者在没有EUI-64地址时随机产生。
  • 可以在手工配置地址时分配。

基于EUI-64地址的接口标识符

获得Ipv6接口标识符最常用的方法是使用EUI-64地址--一种用于网卡的新型MAC地址。与之相对应的当前的48位的MAC地址也叫做IEEE802地址。

IEEE802地址分成24位的制造商ID(Vender ID)和24位的扩展ID。唯一分配给每个制造商的ID和在制造时唯一分配给板卡的ID联合产生了一个48位的全球唯一地址。在48位地址中的第一个字节 (前8位)中的次低位(第7位),用于表示此地址是全球管理的还是本地管理的,称为U/L位。若U/L位为1则这个地址是本地管理的,所以一般的网卡这位 都是0。第一个字节中的最低位用来表示这个地址是单播还是多播,称作I/G位。若此位为1则是多播地址。一般网卡地址这个位是0,表示单播地址。

IEEE EUI-64共有64位,前24位仍然是制造商ID,但是后面的扩展位增加到了48位。EUI-64地址中的U/L和I/G位的用法和IEEE802地址是一样的。

为将IEEE802地址映射位IEEE EUI-64地址的方法是在IEEE802地址前24位的制作商ID后插入16位的1111111111111110(0xFFFE)。

 

IPv6多播地址映射位以太网地址  

在以太网链路上发送IPv6多播数据包时,对应的MAC地址是0x3333-A-A-A-A,其中A-A-A-A是IPv6多播地址的后32位的直接映射。对于正在被主机侦听的任何一个多播地址,关注的MAC表中会有相应的项。

例如,一台具有以太网MAC地址00-AA-00-3F-2A-1C(链路本地地址FE80::2AA:FF:FE3F:2A1C)的主机,会把以下多播MAC地址添加到它的以太网卡的关注的目标MAC地址表中:

  • 地址33-33-00-00-00-01,对应于链路本地范围所有节点多播地址FF02::1。
  • 地址33-33-FF-3F-2A-1C,对应于请求节点地址FF02::1:FF3F:2A1C。请求节点地址是由前缀FF02::1:FF00:0/104和单播IPv6地址的后24位构成。

 

发表于 2013-05-16 10:39  high大山  阅读(1149)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2022-01-17
  • 2021-10-26
  • 2022-12-23
  • 2022-01-17
  • 2021-08-23
  • 2021-06-21
  • 2021-05-08
猜你喜欢
  • 2021-09-27
  • 2021-09-17
  • 2021-09-17
  • 2021-09-17
  • 2021-09-17
  • 2021-09-17
  • 2022-12-23
相关资源
相似解决方案