三、技术对比分析
虽然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才发生作用。这样,一台采用BIA的双栈主机上的应用到另一台双栈主机的数据流只使用IPv4协议。对于 SOCKS64则不存在这个问题。
5、安全性
对于BIA,由于它采用了API翻译器,很难实现端到端的安全性,而且传输层和应用层的安全也同样无法实现。但是,由于翻译机制发生在socketAPI层,采用BIA机制运行IPv4应用的主机和其他IPv6主机通信时,可以利用网络层的安全策略(如IPsec)。另外,由于预留IP地址的使用,有地址耗尽的可能,这就使得使用这种机制的主机易于遭到拒绝服务攻击。对于 SOCKS64,由于它是直接建立在SOCKSv5协议基础上的,其安全方面的特点与SOCKSv5相一致。它同样不提供从原始源节点到最终目的节点的整体端到端的安全保证。但是由于它建立了应用层两个“分开的”连接的中继,所以端到端的安全就由这两个被中继的链接来提供保证。