基于SOCKS的IPv4向IPv6过渡技术
和BIA技术一样使用了IPv4中未使用的保留地址(称之为伪IP地址),并在*SocksLib*(客户机C处)中引入一个映射表来管理伪IP地址和FQDN之间的映射。
客户机C[IPvX]使用SOCKS64技术通过双栈网关G[IPvX"IPvY]与目的主机D[IPvY]通信的过程如下:
·源节点(客户机C)上的应用尽力通过调用DNS域名解析函数来获得目的节点(目的地D)的IP地址信息。这时,目的地D的逻辑主机名(即FQDN)信息被作为被调用的API的一个参数传递给应用的*SocksLib*。
·FQDN信息被注册到*SocksLib*中的一个映射表内。*SocksLib*选择一个伪IP地址回复给应用。
·应用利用收到的伪IP地址信息组织一个socket,并将socket用作API的一个参数来调用socketAPI启动通信。
·由于*SocksLib*已经取代了这些socketAPI,真正的socket函数将不再调用,而是先检查socket的IP地址信息。如果该地址是伪IP地址,则从映射表中获取与该伪IP地址相匹配的登记过的FQDN信息。通过使用与调用的socketAPI相匹配的SOCKS命令(例如与conNECt()对应的CONNECT命令),FQDN信息被传送到中继服务器(网关G)上的*Gateway*。
·*Gateway*通过接收到的FQDN信息调用真正的DNS域名解析API从一个DNS服务器处获得一个真IP地址,并利用真IP地址信息创建一个socket。*Gateway*再将socket用作API的一个参数来调用socketAPI与目的地D通信。
四、技术比较分析
虽然BIA与SOCKS64都是为了使IPv4能够顺利过渡到IPv6的技术,都是基于SOCKS的技术,都是采用双栈主机思想,都需要使用伪IP地址,但是它们的出发点却各有侧重,也各有优缺点。
1.适用性
BIA与SOCKS64都可以使IPv4应用在不作任何修改的情况下与IPv6主机通信。BIA技术提供的是具有IPv4和IPv6协议的双栈主机直接与IPv6主机通信的解决方案,SOCKS64技术是提供了IPv4主机通过双栈网关与IPv6主机通信的解决方案。
2.预留IP地址的使用
BIA与SOCKS64都使用预留IP地址。虽然BIA技术中的地址池可以在节点中以不同的粒度来实现,然而如果大量的IPv4应用和IPv6的主机通信时,可能耗尽可用地址,导致IPv4应用不能和IPv6的主机通信,所以需要对地址池内的地址进行有效管理。SOCKS64技术由于主要使用FQDN信息、通过DNS域名解析代表在*SocksLib*处负责域名管理工作,伪地址必须被作为临时值来处理,所以不需要为地址映射预留很大的地址空间,也不需要复杂的地址申请和垃圾收集机制。
3.对应用的支持
BIA与SOCKS64的初衷都是不需要修改IPv4应用而与IPv6主机通信。但是它们对应用的支持都不能达到尽善尽美。对于BIA来说,由于需要转换嵌在应用层协议中的IP地址(例如FTP),所以这种机制可能不适用于那些其负载中包含地址的新应用。BIA仅支持单播通信,如果要支持组播通信,还需要在函数映射模块中增加新的功能。BIA只是从语义上将IPv4SocketAPI函数转换成相应的IPv6Socket API函数,如果在API函数中转换内嵌于应用层协议的IP地址,其实现有赖于操作系统。由于IPv6的API具有新的高级参数,转换带有这种参数的IPv6 API是很困难的,因此接收到的带有高级参数的IPv6数据包会被丢弃。对于SOCKS64来说,虽然它是直接继承SOCKS机制的技术,但是在使用时仍有一定的问题。SOCKSv5协议由三个命令(CONNECT、BIND和UDP ASSOCIATE)组成,所有这三个命令在SOCKS64中都能使用。其中,主要的命令也是使用最频繁的命令CONNECT没有明确的弱点,可以不加考虑地随意使用它。而BIND命令基本上是为支持FTP类型应用的反向通道聚合而设计的,所以通常的BIND命令的使用可能会导致一些问题。UDP ASSOCIATE命令基本上是为简单UDP应用(如archie)而设计的,所以在支持同时使用TCP和UDP的一大类应用时通用性还不够。另外,如果有些应用使用了非常灵活的、特别的方式创建连接,SOCKS64技术就无能为力了。
4.DNS查询结果与另一端应用程序版本不匹配问题
对于BIA,若正在使用的服务器端应用不支持IPv6,但是它又运行在一台支持其他IPv6服务的主机上,而且这台主机还在DNS中以AAAA型记录出现,在DNS的查询结果和服务器应用的版本之间就出现了不匹配的情况。这时,使用BIA的IPv4客户端应用可能连接不到这个服务器端应用上。解决方法是尝试所有在DNS中列出的地址,而不应只尝试一次即宣告失败。但是对于UDPsocket,即便可能,BIA也很难发现可工作的IP地址,因此应用必须重复尝试各种可能的地址,直到发现一个可用地址为止。另一种避免这种问题的方法是仅当通信对端的A型记录不存在时,BIA才发生作用。这样
IPv4 IPv6 socks BIA SOCKS64 相关文章:
- 富士通IDT搜索加速器用于下一代光网络平台(05-20)
- IPv6地址表达方式、寻址模型和地址空间(01-08)
- 移动IPv6与移动IPv4技术优势比较(01-08)
- 三种IPv4和IPv6过渡技术对比(01-22)
- MPLS技术如何支持移动IPv6(01-23)
- 移动IPv6前景探析及运营商应对策略 (01-28)