一、IPv6编址概述
IPv6地址一共128位,因此地址空间是相当庞大的,可提供给PC、无线IP电话、机顶盒、视频设备、安保监控设备等等。IPv6地址不再像V4那样使用“点分十进制”的格式来表现,而是使用“冒号分隔十六进制”格式表示:
2001:0da8:0207:0000:0000:0000:0000:8207
乍一看这地址确实很长,书写起来有诸多不便,IPv6定义了地址简写方式:
二、IPv6报文头部
1. IPv4存在的问题
IPv6单播地址就是标识一个节点,或者网络设备的一个接口的地址,目的地址为单播地址的报文会被送到被标识的网卡或设备接口。
2. 组播地址(Multicast Address)
组播地址用于标识多个接收者,目的地址为组播地址的报文会被送到加入该组播组的所有用户,这与IPv4中的组播概念是完全一样的。
3. 任播地址(Anycast Address)
单播地址只能被配置在网络中单一的节点上,不能同时配置给多个节点。而任播地址则可,它标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,这里所谓的“最近”是通过路由协议的开销来判断的。任播地址没有独立定义的地址空间,他使用单播的地址空间。
4.IPv6没有定义广播地址
2.1 单播地址
1.可聚合全局单播地址 Aggregatable Global Unicast Address
相当于IPv4中的公网地址。目前已经分配的可聚合全局单播地址前缀都是以001开头的,(2000::到 3FFF:FFFF:….FFFF)
以下是这个区间地址的分配情况:
一般从运营商处申请到的IPv6地址空间为/48,再由自己根据需要进一步规划:
如下图,分配给终端的IPv6地址可能是这样的结构:
2.站点本地地址 Site-local address
类似IPv4中的私有地址。该地址以FEC0::/10为前缀。也就是说最高10 bits固定为1111111011,紧跟在后面的是连续38 bits 的0。因此,对于站点本地地址来说,前48bits 总是固定的。在接口ID和高位48bits特定前缀之间有16bits 子网ID字段,供机构在内部构建子网。站点本地地址不是自动生成的,是手工配置的。
站点本地地址只能够在本地或者私有环境中使用,不能访问公网。
RFC 1884 定义了fec0::/10 地址块用于site-local地址,这些地址只能够在私有的IPv6“站点”内使用,但是草案对Site描述不清楚导致路由规则的混乱,因此RFC3879弃用了该地址块。
3.唯一本地地址 Unique Local Address
ULA,唯一本地地址,概念上相当于私有IP,仅能够在本地网络使用,在IPv6 Internet上不可被路由。上面提到的站点本地地址由于起初的标准定义模糊而被弃用,而后RFC又重新定义了唯一本地地址以满足本地环境中私有IPv6地址的使用。
在RFC4193中标准化了一种用来在本地通信中取代站点本地单播地址的类型。ULA拥有固定前缀FC00::/7,分为两块:FC00::/8暂未定义,FD00::/8定义如下:
4.链路本地地址(Link-local address)
链路本地地址是一类非常重要的地址,它的有效范围仅仅在所处链路上。
以FE80::/10为前缀,11-64位为0,外加一个64bits的接口标识(一般是EUI-64)。
IPv6主机的网卡,或者网络设备的接口可以有多个可聚合全局单播地址,但是这些接口要能够正常工作,必须有一个链路范围内唯一的Link-Local地址,该地址由于其稳定性、链路唯一性,被用于自动地址配置、邻居发现、路由器发现等机制中。
当一个接口启动IPv6协议栈时,接口会自动配置一个链路本地地址。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信(使用Link-Local地址)。缺省网关建议使用链路本地地址,因为这个地址是最稳定的。
Link-Local地址非常重要,设备接口要正常工作就必须具备Link-Local地址,而且勿随意变更。
如果设备接口上并未配置全局单播IPv6地址,则需使用ipv6 address auto link-local命令手工使设备自动产生一个Link-Local地址,在我司防火墙、交换机等设备上,该自动生成的Link-Local地址采用EUI64规范的接口ID生成。如果设备接口上配置了全局单播IPv6地址,则无需使用上述命令让设备自动生成Link-Local地址,一旦接口获得IPv6全局单播地址,会自动产生Link-Local地址。
Link-Local地址仅在链路范围内有效,因此原则上保持链路范围内唯一即可,但是如果要手工配置链路本地地址,尽量保证该地址的唯一性 。
5.特殊的地址
未指定地址,也就是全0地址“::/128”或者“0:0:0:0:0:0/128”
该地址作为某些报文的源IP地址,比如作为重复地址检测时DAD时发送的邻居请求报文的源地址,或者DHCPv6初始化过程中客户端所发送报文的源IP。
回环地址 0:0:0:0:0:1/128 或者::1/128
指代本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈回环测试。
IPv4兼容地址
在过渡技术中会使用到一些包含IPv4地址的IPv6地址,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。内嵌IPv4地址格式是过渡机制中使用的一种特殊表示方法。在这种表示方法中,IPv6地址的部分使用十六进制表示,IPv4地址部分可用十进制格式。
0:0:0:0:0:0:192.168.1.2或者::192.168.1.2(96个0)
IPv4兼容地址用于过渡机制,如自动IPv4兼容隧道 及NAT-PT。
2.2 接口ID
1.接口ID的概念
接口ID为64bits,用于标识链路上的接口,在每条链路上接口ID必须唯一。接口ID有许多用途,最常见的用于就是黏贴在链路本地地址的前缀后面,形成128bits的接口链路本地地址。或者在无状态自动配置中,黏贴在获取到的IPv6全局单播前缀后面,构成接口的全局单播地址。
2.接口ID的设置
接口ID的设置方式主要有:
1 ) 根据IEEE的EUI-64规范将接口的48比特MAC地址转化为64比特的接口ID。
2 ) 手工为接口配置接口ID
3 ) 某些系统支持自动生成随机接口ID(例如Windows7)
3.通过EUI-64规范从MAC地址转换到接口ID
每个以太网网卡或者接口都有一个唯一的MAC地址,如果能将接口的MAC地址衍生出接口ID自然是极好的,但是MAC地址48比特,而接口ID则是64比特,怎么衍生?EUI64规范定义了如何使用MAC地址产生64位的接口ID。
将48bits的MAC对半劈开,插入“FFFE”,然后对从左数起的第7位,也就是U/L位取反。该比特位确定48bits的MAC地址的唯一性与否。一个以太网地址可以有两种含义,地址可被全球管理或本地管理。全球管理指全球唯一的例如厂商MAC,本地管理指使用自己的值临时写的MAC地址,在这种情况下,这个特殊的位=1表示本地管理;为0表示全球管理。但是在EUI-64格式中,U/L的含义正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的地址IPv6地址,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是这里为什么要取反的原因。
2.5 组播地址
1.地址结构
组播地址最高位前8位固定为全1,也就是“FFXX::/8”
2.知名的组播地址
FF01::1节点本地范围所有节点组播地址
FF01 ::2节点本地范围所有路由器组播地址
FF02::1链路本地范围所有节点组播地址
FF02::2链路本地范围所有路由器组播地址
……
3.IPv6组播地址的MAC地址映射
4.被请求节点组播地址Solicited-node
在IPv6组播地址中,有一种特别的组播地址,叫做Solicited-node地址(被请求节点组播地址)。
Solicited-node地址是一种特殊用途的地址.主要用于重复地址检测(DAD)和替代IPv4中的ARP。
Solicited-node地址由前缀FF02::1:FF00:0 / 104和ipv6单播地址的最后24位组成。
一个IPv6单播地址对应一个Solicited-node地址。Solicited-node地址有效范围为本地链路范围。
地址格式: FF02:0:0:0:0:1:FFXX:XXXX,具体的对应关系如下:
2.6 节点及路由器必须具备的IPv6地址