本节书摘来自异步社区《IPv6精髓(第2版)》一书中的第3章,第3.7节,作者: 【美】Silvia Hagen 更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.7 特殊地址
本节将讨论一些重要的特殊地址。IPv6地址空间的第一块前缀为0000 0000的地址被保留,该前缀之外的特殊地址定义情况如下。
未指定地址(unspecified address)
未指定地址为0:0:0:0:0:0:0:0,因而也被称为全0地址(all-zeros address)它与IPv4中的0.0.0.0相似,表示无有效地址。例如,处于启动阶段的主机可以将该地址用作源地址,此时主机需要向外发送请求地址配置信息的消息。如果采用本章前面所讨论的记法习惯,未指定地址也可以缩写为::。请注意,永远也不要为接口静态或动态分配未指定地址,也不应该将未指定地址用作目的IP地址或用于IPv6路由报头中。
环回地址(loopback address)
大家一定很熟悉IPv4的环回地址127.0.0.1,该地址广泛用于故障排查和IP协议栈的测试,因为利用该地址可以向协议栈发送数据包而不会被传送到子网上。对IPv6来说,环回地址的功能相同,表达形式是0:0:0:0:0:0:0:1,可以缩写为::1。永远也不要为接口静态或动态分配环回地址。
下面将描述指定给各种过渡机制使用的各类特殊地址,这些虚接口被称为伪接口(pseudo-interface)。有关过渡机制的详细信息请参见第10章。
3.7.1 内嵌IPv4地址的IPv6地址
由于向IPv6的过渡是渐进式的,因而为了保持与IPv4的后向兼容性,在RFC 4291中定义了两类特殊地址。
兼容IPv4的IPv6地址(IPv4-compatible IPv6 address)
该类地址用于经IPv4路由基础设施动态隧道化传送IPv6包的应用场景。使用该技术的IPv6节点会被分配一个特殊的IPv6地址,该地址的低阶32比特携带的是一个IPv4地址。该类地址目前已极少使用,已被RFC 4291所废止。新的IPv6实现或最新更新后的IPv6实现都不再支持该类地址。
映射IPv4的IPv6地址(IPv4-mapped IPv6 address)
该类地址将纯IPv4节点的地址表示为IPv6地址。IPv6节点可以利用该地址向纯IPv4节点发生数据包,该地址的低阶32比特也是一个IPv4地址。
图3-2显示了这两类地址的格式。
https://yqfile.alicdn.com/62afba9d6ff674c3dfaadda5fafb4225d0837018.png" >
这两类地址非常相似,唯一的区别就是中间的16比特。如果这些比特均为0,那么该地址就是兼容IPv4的IPv6地址;如果这些比特均为1,那么该地址就是映射IPv4的IPv6地址。
3.7.2 6to4地址
IANA在全局单播地址空间(001)内为6to4机制永久分配了一个13比特的TLA标识符。6to4是一种允许IPv6主机或IPv6网络通过纯IPv4网络进行通信的过渡机制。本书将在第10章具体介绍6to4机制,相关规范定义在RFC 3056中。6to4 TLA标识符是0x0002,其地址格式如图3-3所示。
6to4地址的前缀长度为48比特,前缀中的IPv4地址必须是公有IPv4地址并以十六进制形式表示。例如,如果以IPv4地址62.2.84.115为接口配置6to4,那么6to4地址为2002:3e02:5473::/48。通过该接口,该链路上的所有IPv6主机都能通过IPv4网络隧道化它们的数据包。
提示
由于制定6to4规范的时候RFC 2374仍在使用当中,因而使用了一些过时的术语和格式(前缀长度、TLA、SLA)。
3.7.3 ISATAP地址
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol,站内自动隧道寻址协议)是一种定义在RFC 4214中的自动隧道机制,可以为被纯IPv4网络分隔的双栈节点提供通信能力。ISATAP将整个IPv4网络视为一个大的链路层网络,允许这些双栈节点使用任何IPv4地址格式自动建立隧道。Windows XP支持ISATAP。ISATAP通过类型标识符0xFE指定内嵌了IPv4地址的IPv6地址。ISATAP地址的格式如图3-4所示。
前64比特遵循全局单播地址的格式,IANA拥有IEEE保留的以太网OUI(Organizationally Unique Identifier,组织唯一标识符)00-00-5E,并在OUI中指定了采用EUI-48格式的接口标识符分配方式。在前16比特中,类型标识符表示IPv4地址来自于私有空间(0000)还是全局唯一地址(0200)。接下来的8比特包含的类型标识符表示这是一个内嵌了IPv4地址的IPv6地址,类型标识符是0xFE。最后32比特包含的是内嵌的IPv4地址,可以写成点分十进制形式或十六进制形式。
假定某主机的IPv4地址是192.168.0.1,且该主机被分配了一个64字节前缀2001:DB8:510:200::/64,那么该主机的ISATAP地址就是2001:DB8:510:200:0:5EFE: 192.168.0.1。也可以采取十六进制形式来表示其中的IPv4地址,即2001:DB8:510: 200:0:5EFE:C0A8:1。该主机的链路本地地址是FE80::5EFE:192.168.0.1。
提示
有关IPv6如何使用这些地址与IPv4共存的详细信息,请参见第10章。
3.7.4 Teredo地址
Teredo机制可以为位于一个或多个NAT设备之后的主机提供IPv6连接性,其做法是在UDP中隧道化IPv6包。Teredo机制包含Teredo客户端、服务器和中继。Teredo中继是Teredo服务与纯IPv6网络之间的IPv6路由器,有关Teredo的详细信息定义在RFC 4380中。由于大量私有Internet用户都位于NAT设备之后,因而该服务在ISP全面升级到纯IPv6服务之前都会很普遍。
Teredo地址的格式如图3-5所示。
Teredo地址的前缀长度是32比特。全局Teredo IPv6服务前缀是2001:0000:/32;服务器IPv4地址字段的长度为32比特,包含的是Teredo服务器的IPv4地址;标志字段为16比特,用于指定在用的地址类型和NAT类型;16比特端口字段包含的是客户端上Teredo服务的映射UDP端口;客户端IPv4地址字段包含的则是客户端的映射IPv4地址。在上述地址格式中,客户端的映射UDP端口和映射IPv4地址很容易让人产生混乱:地址和端口号的每个比特都是反转的。