支持IPv6的完全实现应包含如下扩展头,即Hop-by-Hop、Routing(Type 0)、Fragment、Destination选项等。并且Fragment选项的实现应遵从RFC 5722。IPv6终端应能够正确处理这些数据包头。另外,根据RFC 5095,无须要求终端实施0型路由扩展头(Type 0 Routing Header),但当终端接收到此类扩展头时,应根据RFC 5095的要求进行处理。 5.1.3 RFC 4291 IPv6地址结构
IPv6终端应遵从RFC 4291所定义的IPv6地址结构。IPv6地址的表示方式建议参考RFC 5952。
5.1.4 RFC 4443 ICMPv6协议规范
IPv6终端应支持RFC 4443所定义的ICMPv6协议。 5.1.5 RFC 4861 IPv6邻居发现协议 总体上,IPv6终端应支持RFC 4861所定义的IPv6邻居发现协议,并且至少应支持路由器请求RS(Router Solicitation)和路由器通告RA(Router Advertisement)功能。但对于移动通信接入具体所支持的邻居发现特性可由终端自行决定,例如只实现点对点链路特性等。
IPv6终端应支持最大传输单元MTU选项,以避免网络传输过程中数据包碎片的产生。IPv6子网模型建议参考RFC5942。
5.1.6 RFC 4862 IPv6无状态地址自动配置协议 IPv6无状态地址自动配置机制由RFC 4862所定义。IPv6终端应支持该机制,同时也应支持静态地址配置。 5.2 DNS客户端
本节描述移动终端支持IPv6后,DNS客户端支持IPv6的要求。
DNS协议主要由RFC 1034、RFC 1035、RFC 3363和RFC 3596所定义。
终端上的DNS客户端应能够处理AAAA类型的资源记录,即IPv6类型的IP地址。 支持IPv6的移动终端应通过RA消息、PCO-IE字段以及DHCPv6协议获取DNS服务器的地址。 DNS客户端应能自动选择使用IPv4或者IPv6数据包进行DNS解析,并自动选择DNS解析请求的类型(A或AAAA)。
关于DNS解析的具体要求见本技术要求的第9章。 5.3 DHCP客户端
本节描述移动终端支持IPv6后,DHCP客户端应支持IPv6的要求。DHCP客户端可以根据需要,起到传递并识别网络参数的作用。
对于DHCP客户端支持IPv6的移动终端应支持:RFC 3736所定义的IPv6无状态DHCP服务,以便在获取IPv6地址之后能获得其它配置信息;RFC 3315所定义的DHCPv6协议;以及RFC 3646协议,用以通过DHCPv6协议获取DNS服务器的地址。 5.4 IPv4/IPv6协议翻译技术
推荐终端支持IPv4/IPv6协议翻译技术,包括BIH、464XLAT等。 对于支持翻译技术的终端应优先选择支持BIH技术。 5.4.1 BIH
目前互联网中大多数的应用和业务仍只支持IPv4,BIH是一种基于主机的IPv4到IPv6协议转换机制,这种机制允许仅支持IPv4的应用程序可以和IPv6业务进行互通,从而在IPv6的环境中实现对IPv4应用的支持。
BIH主机翻译模块包括两种模式:Socket API翻译和包头翻译。终端应支持BIH技术,并且应至少支持Socket API翻译和包头翻译中的一种。
Socket翻译主要是在Socket API层面对IPv4和IPv6的Socket进行翻译。包头翻译则是在IPv4 TCP/IP协议栈生成IPv4报文后再对包头进行翻译。这两种工作模式的区别主要在于进
5
行主机翻译的位置不同,Socket翻译在协议栈与应用程序的接口层面进行翻译,BIH执行在API接口层;IPv4应用程序和IPv6对端通信时,API转换器将从IPv4程序拦截API接口函数然后利用相应的API接口函数进行替代,从而实现系统调用层面函数的转换。而包头翻译方式中,BIH执行在网络层时,IPv4包被拦截并转换成IPv6,并使用所定义的SIIT算法来完成IP转换机制。
上述两种翻译方式,可以根据在特定主机操作系统的实现难易程度及性能要求等因素来考虑采用。通过主机翻译模块的处理,将实现主机IPv4应用发出的业务数据向IPv6数据包的转换。
图1表示了基于Socket翻译方式的BIH实现模式。图2表示了基于包头翻译方式的BIH实现模式。其关键功能描述如下:
函数映射器: 函数映射器主要功能是将IPv4 socket API函数翻译为IPv6 Socket API函数,或反之。当检查到IPv4应用进行IPv4 socket调用时,函数映射器将解析系统调用,并发起与之对应的IPv6 socket API功能。该IPv6 API函数将用于和IPv6对端来进行通信。当检查到IPv6 socket API函数系统调用时,函数映射器功能也将进行相反的翻译功能实施。
翻译器:其主要功能是将IPv4翻译为IPv6,或反之。翻译过程将执行SIIT算法。
IPv4应用程序Socket API(IPv4, IPv6)API翻译器扩展域名解析地址映射器函数映射器TCP(UDP)/IPv4TCP(UDP)/IPv6 图1 基于Socket翻译的BIH实现模式
IPv4应用程序TCP/IPv4扩展域名解析地址映射器翻译器网卡驱动
图2 基于包头翻译的BIH实现模式
扩展域名解析器(ENR): 相应于IPv4应用的域名解析请求该功能将返回适当的域名解析结果。在Socket翻译模式中,应用调用系统API gethostbyname(),系统监听到该系统调用后将其转换为对getnameinfo()的调用,并同时发出A和AAAA的记录请求。
在解析结果中,如只有AAAA可用。则ENR请求地址映射功能分配本地的IPv4地址,以此来对应解析结果中IPv6地址,并创建A解析结果发向IPv4应用。
在解析结果中,如AAAA和A同时可用,并且此时网络仅有IPv6连接。ENR则不会请求地址映射功能来分配本地IPv4地址,而是通知地址映射功能记录该相关解析结果中IPv4和IPv6地址的对应关系,并直接把A记录返回给应用。
6
在解析结果中,如只有A可用。ENR则直接把A记录返回给应用。然而在这种情况下,主机无法在IPv6网络中执行通信过程。表1中对ENR的功能进行进一步描述。 应用请求类型 A A A 域名解析结果 A AAAA A/AAAA ENR处理描述 返回A记录 主机生成A记录 返回A记录
地址映射器:地址映射器将维护本地IPv4地址池,在具体功能实现中,将保持本地IPv4地址和目的IPv6地址间的映射关系,并伴随上述ENR功能来完成相应的域名结果的回复。
根据以上关键BIH关键功能的描述。其主机BIH功能执行方式如图3所示。
“双栈” IPv4应 TCP/IPv4 “host6” 域用程序 ENR 地址 转换器 名 映射 IPv6 服务器 <<解析host6的IPv4地址>> 询问host6 的‘A’记录 询问host6的‘A’和‘AAAA’ 回复了‘AAAA’ <<只有‘AAAA’记录被解析>> 需要一个和IPv6相应的IPv4地址 <分配一个IPv4地址> 带IPv4地址的回复 <<为IPv4建立一个‘A’记录>> ‘A’记录回复 <<发送一个IPv4包到主机6>> IPv4包发送 请求一个和IPv4相应的IPv6地址 回复一个IPv6地址 <
7
5.4.2 464XLAT
464XLAT[draft-ietf-v6ops-464xlat]方案实现了IPv6网络中MIFI终端的接入,并支持多个IPv4用户接入,将IPv4数据包翻译成为IPv6在网络上发送。如下图所示。为了克服IPv4协议栈下NAT444地址空间冲突问题,MIFI应实现464xlat功能。
CLATPLAT
图4 464xlat方案实现移动终端热点中支持IPv4单栈的接入
464xlat分为了用户侧翻译Customer side Translator (CLAT)和网络侧翻译Provider side Translator (PLAT)两部分。CLAT部署实现基于RFC6145的无状态NAT46翻译过程,PLAT采用了标准的NAT64的技术。
464xlat的CLAT功能可以部署于MIFI上。这时,移动终端会充当无线路由器网关功能,实现众多IPv4终端的接入。为了实现以上通信过程,在移动终端上包含的功能模块包括无线路由网关功能、地址翻译器、NAT44、DNS代理。
具体过程为无线路由网关通过WiFi连接向下为多个终端提供接入服务,完成IPv4私有地址的分配和上传数据的接收处理功能。所连接终端将以CLAT地址为默认网关和DNS服务器,进行业务数据的发送。 CLAT上的DNS代理功能将截获IPv4主机发出的DNS解析请求,并实现该解析请求在IPv6网中DNS服务器的查询,从而能够避免对DNS数据包的两次翻译。464xlat中由于业务仍处于IPv4,因此相应的IPv4 DNS回复将通过CLAT DNS代理后返回各IPv4主机。IPv4主机将根据以下两种不同情况来决定是否进行NAT44的处理。 (1)当网络支持DHCP-PD的情况:
在网络和MIFI支持DHCP-PD情况下,即终端可以预留一个IPv6 前缀来进行IPv4到IPv6翻译时,地址翻译器可以直接将IPv4私有地址数据包翻译成为IPv6数据包,其翻译规则如下:
源地址翻译将遵循
IPv4:port1??IPv6prefix::IPv4:port1
其中,IPv6 prefix是在网络中代理后获得的IPv6前缀。 IPv6prefix::IPv4需遵循RFC6052中的地址格式。 目的地址将遵循:
IPv4:port1??NAT64prefix::IPv4:port1
其中,NAT64 Prefix可以预先在移动终端中配置前缀,或通过网络学习的NAT64前缀,具体可通过NAT64 prefix学习的方法
NAT64prefix::IPv4需遵循RFC6052中的地址格式。
地址翻译除了用于IP地址翻译外,也将完成IP包头中各字段、ICMP消息的翻译,其翻译过程遵循RFC6145的各项规定。
(2)当网络不支持DHCP-PD的情况:
当网络不支持DHCP-PD时,终端无法预留特定的IPv6前缀来进行IPv4到IPv6的翻译。这时具备CLAT功能的MIFI,将对接收到的IPv4数据包首先进行NAT44的NAPT处理,将众多IPv4私有地址翻译成为一个共享IPv4地址+端口号的形式,随后进行IPv4到IPv6的翻译。这样多
8