畅享博客 > 协同软件 > 基于NAT穿透的高可靠性文件传输
2011/4/29 11:05:41

基于NAT穿透的高可靠性文件传输

1、背景
SychroMQ是西安协同自主研发的一个消息中间件,是一个健壮、高性能、极具扩展性的具有工业标准、安全、可靠的消息传输系统,它为开发企业级应用提供了一个“消息高速路”,很好地支持分布式系统的开发、集成和运行,为跨越不同操作系统和网络平台的分布式应用提供可靠、高效的消息发送和管理服务,可以应用在企业应用集成(EAI)、电子商务、电子政务、ERP、CRM、电信、金融等广大领域。
SynchroMQ是“核高基”课题iSychro中间件套件的产品之一。目前版本V5.0除了对以往功能进行了完善和扩展之外,新加入了高级联邦网络和基于NAT穿透的可靠文件传输等功能。
 当位于不同内网的客户端需要进行通信时,以往的方式是通过服务器中转的方式,如图1所示。这种方式虽然可靠性很高,但是效率很低,为保证效率需要考虑服务器集群和负载均衡,增加了开销。为了解决这个问题,提出了对NAT进行穿透,并建立不同内网之间的客户端的直连,进而达到通信的目的。


 

       图1


2、基本架构
 NAT(Network Address Translators)是一种将一个 IP地址域映射到另一个IP地址域的技术,从而为终端主机提供透明路由。NAT将私网主机的私有 IP地址转换成公网 IP地址,但并不改变TCP/UDP端口信息。NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。
基于NAT穿透的文件传输基本架构图如图2所示:


 

          图2


从图2可以看出,整体的设计思路为:首先对NAT的类型进行探测,如果该类型不能被穿透,则采用转发的方式;如果能够进行穿透,则先进行NAT穿透,穿透成功后利用建立的直连进行文件传输,并使用控制协议保证可靠性和性能。
数据包交互过程如图3所示:


 

 图3


3、功能介绍
 (1)类型探测
 获取内网客户端经过NAT映射后的IP和端口。内网客户端与外网通信时,NAT会为之分配一个端口,这个端口的分配原则由NAT所决定。有的NAT会为之分配一个固定的端口,有的每一次通信时都会改变。
 在RFC3489/STUN中把主机划分为如下七种NAT类型:UDP Blocked、Open Internet、Symmetric Firewall、Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT。系统可以判断出NAT是属于以上的哪一种类型。并且根据类型来判定是否能够进行NAT穿透。
 (2)NAT穿透
 穿透俗称“打洞”。“打洞”就是为了建立内网客户端之间的直连。内网客户端通过一个辅助“打洞”的外网Server获取到对方的外网IP和端口,然后开始向对方的外网IP/端口上发送“打洞包”,当能够收到对方的“打洞包”时,表示本地的“洞”已打通。
 (3)文件传输
 文件传输为了保证数据的可靠性,采用了标准的互联网数据传输协议,基于UDP的数据传输协议(UDP-based Data Transfer Protocol,简称UDT)。利用多线程并发方式保证传输速率。
 (4)控制协议
UDP本身是不可靠的,所以需要考虑丢包的情况和响应超时。控制协议定义了丢包后何时及如何发送。
“洞”也并非绝对可靠的。不同NAT设备对“洞”的有效期是不一样的,有的可能是几十秒,有的可能是几分钟。因此,为了保证“洞”绝对有效,双方需要发送“维持包”来保证“洞”的有效性。如果外层应用是双向通信的,可以不需要发送“维持包”。
4、结束语
SynchroMQ5.0采用进行对NAT穿透的方式进行通信。采用标准的控制协议,不但提高了传输效率,而且具有高可靠性。基于NAT穿透的文件传输,对外提供了丰富的接口,方便应用程序调用。
 



评论

您还未登录,不能对文章发表评论!请先登录