在SOCKS5中规定,IPv4地址、IPv6地址和域名的全限定域名(FQDN)信息可以用在SOCKS协议格式的地址类型(ATYP)域。SOCKS64技术就是利用这一点,通过DNS域名解析代表将FQDN信息用在ATYP域中从客户机C传到网关G来指出目的地D的位置。为此,SOCKS64技术也和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才发生作用。这样,一台采用BIA的双栈主机上的应用到另一台双栈主机的数据流只使用IPv4协议。对于SOCKS64则不存在这个问题。
5.安全性
对于BIA,由于它采用了API翻译器,很难实现端到端的安全性,而且传输层和应用层的安全也同样无法实现。但是,由于翻译机制发生在socketAPI层,采用BIA机制运行IPv4应用的主机和其他IPv6主机通信时,可以利用网络层的安全策略(如IPsec)。另外,由于预留IP地址的使用,有地址耗尽的可能,这就使得使用这种机制的主机易于遭到拒绝服务攻击。对于SOCKS64,由于它是直接建立在SOCKSv5协议基础上的,其安全方面的特点与SOCKSv5相一致。它同样不提供从原始源节点到最终目的节点的整体端到端的安全保证。但是由于它建立了应用层两个“分开的”连接的中继,所以端到端的安全就由这两个被中继的链接来提供保证。
五、结语
基于SOCKS的IPv4向IPv6过渡技术主要有BIA与SOCKS64两种,它们都采用双栈主机和IPv4预留地址思想,使IPv4应用在不作任何修改的情况下与IPv6主机通信。BIA技术提供的是具有IPv4和IPv6协议的双栈主机直接与IPv6主机通信的解决方案,SOCKS64技术是提供了IPv4主机通过双栈网关与IPv6主机通信的解决方案。也正由于它们是两种不同的解决方案,才使得它们分别具有各自的优点和缺点。在实际应用时,可以根据具体情况确定采用哪种技术,并根据需要对它们加以改进。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
IP地址0.0.0.0能做什么?
IP地址0.0.0.0是一个不可路由的IPv4地址,具有多种用途,主要作为默认或占位符地址。尽管0.0.0.0在计算机网络上有多种用途,但它不是通用的设备地址……
-
无视IPv6连接?后果自负!
如果你无视IPv6在你网络的影响,你可能给你自己带来更大的伤害。此外,你还需要考虑的是,IPv6连接不只是“网络的事”。
-
IPv6扩展报头:是好是坏?
IETF最近的一项研究表明,当部署扩展报头时,发送到公网服务器的IPv6数据包丢包率在10%至50%。
-
如何避免IPv6“友邻发现”威胁?
IPv6友邻发现是IPv6协议套件的一个核心部件。如果企业正着手准备部署IPv6,那么一定要了解“友邻发现(ND)”及其漏洞。