本节书摘来自异步社区《IPv6精髓(第2版)》一书中的第3章,第3.12节,作者: 【美】Silvia Hagen 更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.12 默认地址选择
IPv6的地址体系允许接口拥有多个地址。这些地址可能有不同的范围(链路本地范围或全局范围)或状态(首选状态、废除状态),可能有移动环境下的地址(家乡地址、转交地址)或多归属环境下的地址,可能是永久公有地址或虚拟隧道接口。由于双栈主机同时拥有IPv6和IPv4地址,因而相应的IPv6实现在发起连接时通常需要在多个源地址和目的地址之间做出选择。
假设某客户端因某种外部服务而发起DNS请求并收到一个全局IPv6地址和一个公有IPv4地址。如果该客户端有一个私有IPv4地址和一个全局IPv6地址,那么该客户端就可能使用IPv6地址访问该外部服务。但是如果该客户端有一个链路本地IPv6地址和一个公有IPv4地址,那么就会选择公有IPv4地址访问该外部服务。这就是未来IPv4与IPv6共存时代(有纯IPv4网络、纯IPv6网络,也有双栈网络)必须处理的应用场景和选择。具体处理方式取决于网络实现情况。应用开发人员必须意识到这一点并提供相应的处理机制,以保证他们的应用程序在各种环境中都能执行最优操作。
RFC 3484“Default Address Selection for IPv6”定义了两种通用算法,分别用于源地址选择和目的地址选择。所有的IPv6节点(主机和路由器)都必须实现RFC 3484。算法指定了IPv6节点的默认行为,但是该算法并不干预应用程序或上层协议做出的选择。
最重要的规则如下:
- 优选范围或类型(链路本地、全局)相同的地址对;
- 优选范围较小的目的地址(使用范围最小的地址);
- 优选处于首选状态(非废除状态)的地址;
- 如果有纯IPv6地址,那么就不使用过渡地址(如ISATAP或6to4地址);
- 如果前面所有的准则都相同,那么优选前缀最长的地址对;
- 对于源地址来说,全局地址优于临时地址;
- 对移动IP应用环境来说,家乡地址优于转交地址。
如果没有特殊规定,RFC 3484适用于所有应用场合,而且该规范还允许通过配置一定的策略来改写这些默认的源地址与目的地址优选方式。
了解了扩展地址空间和IPv6地址类型之后,下一章将介绍ICMPv6的各种高级特性,这些高级特性提供了ICMPv4所没有的管理功能。