基于udt实现nat穿越的系统和方法

文档序号:7755201阅读:500来源:国知局
专利名称:基于udt实现nat穿越的系统和方法
技术领域
本发明涉及网络地址转换(Network Address Translator,NAT)技术领域,具体涉 及基于UDT实现NAT穿越的系统和方法。
背景技术
随着网络技术的不断发展、个人计算机性能的不断提高以及边缘网络信息的不断 丰富,Internet中客户机、服务器的通信模式占统治地位的局面已经逐渐被打破,越来越多 的网络应用采用了点对点(Peer-to-Peer,P2P)的通信模式。在P2P通信模式中,主机之间 通过直接通信实现信息的交换和资源的共享,这使得用户之间的沟通和交互变得更直接、 更便捷。然而,在目前的IPv4网络环境中,NAT(Network Address Translator)设备的广 泛存在却使得处于不同内部私有网络中的主机直接进行通信变得很困难,这在很大程度上 限制了 P2P应用的发展。因此,到目前为止出现多种不同的解决方法,常用的穿越NAT的方法主要包括ALG 方式,MIDCOM方式、STUN方式、TURN方式、FullProxy方式、UDP打洞、TCP打洞等。其中基 于UDP协议的NAT穿越技术是目前运用得比较多的方法,其成功率比较高,但是由于UDP是 不可靠传输协议,在网络环境比较差时,发生丢包的现象比较严重,无法保证传输的质量。 而基于TCP协议的NAT穿越技术虽然是面向连接的可靠传输协议,但是由于TCP需要三次 握手,实现比较复杂,而且穿透成功率比较低,只有百分之六十多。

发明内容
本发明的首要目的在于克服现有技术的缺点与不足,提供一种基于UDT实现NAT 穿越的系统。本发明的另一目的是提供一种基于UDT实现NAT穿越的方法。本发明的首要目的通过下述技术方案实现基于UDT实现NAT穿越的系统,包括用于向NAT穿越服务器进行注册,请求对方客户节点进行反连或者使用UDT进行 打洞实现NAT穿越的终端;与终端交互的NAT穿越服务器,用于保存所述终端的注册信息,转发终端的打洞 请求;以及与终端交互的索引服务器,用于为所述终端提供包含客户节点的ID、内部IP 地址、外部IP地址、端口号和所处的网络类型的peer列表信息。本发明的另一目的通过下述技术方案实现步骤S10、客户节点向NAT穿越服务器发送包括客户节点信息的数据报文,从而在 NAT穿越服务器上注册;步骤S20,NAT穿越服务器通过步骤SlO中得到的客户节点信息,确定该客户节点 的网络类型为公网节点或者内网节点;然后向客户节点发送包含该客户节点的网络类型的 注册成功信息;
步骤S30、客户节点向索引服务器获取peer列表,该列表中包含每个客户节点的 ID、内网IP地址、外网IP地址、UDP端口号和网络类型;步骤S40、根据网络类型进行NAT穿越。本发明相对于现有技术具有如下的优点及效果1、简单易行。2、穿透成功率高,除了双方都处于Symmetric NAT后或者一方处于Symmetric NAT 后而另一方处于Port Restricted Cone NAT后,无法穿越外,其他都能进行穿越。3、数据传输可靠性高,因为UDT是基于UDP的面向连接的基于数据流的可靠的应 用层传输协议。


图1是本发明的基于UDT实现NAT穿越系统的结构示意图;图2是本发明的基于UDT实现NAT穿越方法的流程图。
具体实施例方式下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限 于此。实施例如图1所示,本发明基于UDT实现NAT穿越的系统,包括终端10,以及分别与终端 10相互连接的NAT穿越服务器20和索引服务器30。终端10用于向NAT穿越服务器进行 注册,请求对方客户节点进行反连或者使用UDT进行打洞实现NAT穿越。NAT穿越服务器 20用于保存所述终端10的注册信息,转发终端的打洞请求。索引服务器30用于为终端10 提供可连接的peer列表信息,当客户节点要和其他节点建立连接时,该客户节点先向索引 服务器获取在线的客户节点列表,该列表中包含客户节点的ID、内部IP地址、外部IP地址、 端口号和所处的网络类型。所述终端10包括TCP直连模块101,用于终端和对方终端都同时处于公网或都处 于不同内网时建立TCP连接;TCP反向连接模块102,用于终端处于公网而对方终端处于内 网时建立TCP连接;内网发现模块103,用于终端和对方终端处于同一内网时建立TCP直 连;UDT打洞模块104,利用UDT打洞技术,使得当两个终端节点处于不同内网时的情况下建
立UDT连接。下面详细叙述基于UDT实现NAT穿越系统的工作过程所述终端10发送包括终端节点ID和内部IP的数据报文给NAT穿越服务器,NAT 穿越服务器解析该数据报文中的终端节点ID和内网IP地址,提取所接收的数据报文中的 终端节点的外网IP地址,并将这四项(终端节点ID,内网IP,外网IP,端口号)信息保存; NAT穿越服务器比较该终端的外网IP和内网IP,若相同则该节点为外网节点,否则为内网 节点,并保存该信息。NAT穿越服务器20保存完成后,向终端10发送包含该终端节点网络类型的注册成 功消息。终端10向索引服务器30获取peer列表,其中包括每个peer的ID、内网IP、外网 IP、端口号以及网络类型。
5
若对方客户节点处于公网,则终端向对方客户节点的外部IP和端口创建TCP连 接,进入TCP直连模块101。若对方客户节点处于内网,而自己处于外网,则在NAT穿透服务 器10的协助下进行反连,进入TCP反连接模块102,终端节点给NAT穿越服务器发送终端请 求反连的消息,让NAT穿越服务器转告对方客户节点;NAT穿越服务器根据终端节点ID查 找到对方客户节点的外部IP地址和端口号,然后给其发送反连消息,告知其要反连的IP地 址和端口号;对方客户节点收到请求消息后,向所述终端的外部IP和端口发起TCP连接,进 行数据传输。若本地客户节点与对方客户节点均处于内网,则进入内网发现模块103,通过 内网内广播确定对方客户节点与本用户节点是否在同一内网,如果是同一内网,则终端向 对方外部IP和端口创建TCP连接,进入TCP直连模块101 ;如果不是同一内网,则进入UDT 打洞模块104,在NAT穿越服务器的协助下进行UDT打洞实现NAT穿越。在UDT打洞模块104中,终端给NAT穿越服务器发送打洞请求报文A,请求与对方 客户节点进行UDT打洞,报文A的内容包括本地客户节点ID和对方客户节点ID ;NAT穿越 服务器收到报文A后,查找节点ID对应的外部IP地址和端口号,并给双方节点均发送打 洞命令报文B,其中包含对方的外部IP地址和端口号;客户节点和对方客户节点收到报文 B后,分别创建一个UDT套接字,并绑定到与NAT服务器交互的UDP套接字上,接着设置打 洞模式,向NAT服务器所指定的报文B中的对方IP地址和端口号进行连接;若其中一方创 建连接成功返回,则表示打洞成功,可进行后续数据传输。假设A和B都处于内网,若A要 和B通信,则A先向NAT穿越服务器发送打洞消息,消息中包括A和B在NAT穿越服务器 上注册的ID,NAT穿越服务器收到后,根据这两个ID分别查找各自对应的外部IP地址和 端口号,假设查到的A的IP地址为218. 192. 170. 22,端口为7500,查到的B的IP地址为 218. 192. 168. 2,端口为7800,则NAT穿越服务器向这两个地址和端口分别发送包含对方外 部IP和端口的打洞消息。A和B收到后,分别创建一个UDT套接字,并调用bindO函数绑 定到各自与NAT服务器交互的UDP套接字上,接着调用setsocketoptO函数设置打洞模式 UDT_RENDEZVOUS,然后调用connect ()向NAT服务器所指定的报文B中的对方IP地址和端 口号进行连接。若其中一方的connect ()函数成功返回,则表示打洞成功,双方均可调用 recv()或sendO函数进行数据的收发,实现数据的可靠传输。如图2所示,本发明基于UDT实现NAT穿越的方法,具体包括如下步骤步骤S10、客户节点向NAT穿越服务器发送包括客户节点信息的数据报文,从而在 NAT穿越服务器上注册。NAT穿越服务器主要用来登记用户的注册信息,转发用户的打洞请 求。本步骤SlO向NAT穿越服务器进行注册的过程,具体包括如下步骤步骤S101、客户节点发送包括该客户节点ID和内网IP地址的数据报文给NAT穿 越服务器;步骤S102、NAT穿越服务器解析并保存该数据报文中的客户节点ID和内网IP地 址,提取并保存该数据报文中的客户节点的外网IP地址和UDP端口号。所述内网IP地址 是指客户节点在内网中的IP地址,也称本地IP地址;所述外网IP地址和UDP端口号是 客户在外网的IP地址和端口号。若客户处于公网,则内部IP地址和外部IP地址都是客 户本身的IP地址,UDP端口号也为客户本身的端口号;若用户处于NAT内,则内网IP地 址为客户本身的IP地址,而外网IP地址和UDP端口号是经过NAT转换后的IP地址和端 口号。比如用户处于内网,其IP地址为192. 168. 1. 101,端口号为6500,经过NAT转换后的IP地址为218. 192. 169. 11,端口号为6520,则其内部IP为192. 168. 1. 101,外部IP为 218. 192. 169. 11,端口号为 6520。步骤S20,NAT穿越服务器通过步骤SlO中得到的客户节点信息,确定该客户节点 的网络类型为公网节点或者内网节点;然后向客户节点发送包含该客户节点的网络类型的 注册成功信息。本步骤S20中,NAT穿越服务确定客户节点的网络类型的过程,具体包括如 下步骤步骤S201、NAT穿越服务器比较该客户节点的外网IP地址和内网IP地址,若相同 则该节点为外网节点,否则为内网节点,并保存比较结果信息;步骤S202、NAT穿越服务器对比较结果信息的保存完成后,向客户节点发送包含 该客户节点网络类型的注册成功消息。如上所述,假设某一客户节点内部IP为192. 168. 1. 101,外部IP为 218. 192. 169. 11,NAT穿越服务器通过比较这个地址,可判断出该客户节点处于NAT之后, 为内网中的客户。步骤S30、客户节点向索引服务器获取peer列表,该列表中包含每个客户节点的 ID、内网IP地址、外网IP地址、UDP端口号和网络类型。步骤S40、根据网络类型进行NAT穿越,具体包括如下步骤步骤S401、若对方客户节点处于公网中,则直接向对方客户节点发起连接。步骤S402,若对方客户节点处于内网中,且本地客户节点处于公网中,则通过让对 方客户节点进行TCP反连来实现NAT穿越。步骤S402进行TCP反连的过程,具体包括如下 步骤步骤S4021、本地客户节点给NAT穿越服务器发送请求反连消息,让NAT穿越服务 器转告对方客户节点;其中反连消息包括本地客户节点ID、TCP监听端口和对方客户节点 ID ;步骤S4022、NAT穿越服务器根据对方客户节点ID查找到对方客户节点的外部IP 地址和端口号,然后给其发送包含本地客户节点的外部IP地址和端口号的反连消息,告知 对方客户节点要反连的IP地址和端口号;步骤S4023、对方客户节点收到请求消息后,向所述本地客户节点发起TCP连接, 进行数据传输。步骤S403、若本地客户节点和对方客户节点都处于内网中,则本地客户节点通过 内网广播确定对方是否与自己处于同一内网,若处于同一内网中,则直接与其建立TCP连 接,否则转入步骤S404。步骤S404、本地客户节点和对方客户节点之间使用UDT进行打洞来实现NAT穿越。 本步骤S404具体如下步骤4041、本地客户节点给NAT穿越服务器发送打洞请求报文A,请求与对方客户 节点进行UDT打洞,报文A的内容包括本地客户节点ID和对方客户节点ID。步骤4042、NAT穿越服务器收到报文A后,查找对方客户节点ID的外部IP地址和 端口号,并给双方节点均发送打洞命令报文B,报文B包含对方客户节点的外部IP地址和端口号。步骤4043、本地客户节点 对方客户节点收到报文B后,创建一个UDT套接字,并绑定到与NAT穿越服务器交互的UDP套接字上,接着设置打洞模式,向报文B中的对方客户 节点的外部IP地址和端口号进行连接。若其中一方创建连接成功返回,则表示打洞成功, 可进行后续数据传输。其中打洞模式是通过调用setsocketopt函数设置UDT_RENDEZVOUS 模式来实现。步骤50、在步骤40完成NAT穿越后,进行数据传输。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的 限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化, 均应为等效的置换方式,都包含在本发明的保护范围之内。
权利要求
基于UDT实现NAT穿越的系统,其特征在于包括用于向NAT穿越服务器进行注册,请求对方客户节点进行反连或者使用UDT进行打洞实现NAT穿越的终端;与终端交互的NAT穿越服务器,用于保存所述终端的注册信息,转发终端的打洞请求;以及与终端交互的索引服务器,用于为所述终端提供包含客户节点的ID、内部IP地址、外部IP地址、端口号和所处的网络类型的peer列表信息。
2.根据权利要求1所述的基于UDT实现NAT穿越的系统,其特征在于所述终端包括 TCP直连模块,用于终端和对方终端同时处于公网或处于不同内网时建立TCP连接; TCP反向连接模块,用于终端处于公网而对方终端处于内网时建立TCP连接;内网发现模块,用于终端和对方终端处于同一内网时建立TCP直连; UDT打洞模块,用于当两个终端处于不同NAT内时建立UDT连接。
3.基于UDT实现NAT穿越的方法,其特征在于包括以下步骤步骤S10、客户节点向NAT穿越服务器发送包括客户节点信息的数据报文,从而在NAT 穿越服务器上注册;步骤S20,NAT穿越服务器通过步骤SlO中得到的客户节点信息,确定该客户节点的网 络类型为公网节点或者内网节点;然后向客户节点发送包含该客户节点的网络类型的注册 成功信息;步骤S30、客户节点向索引服务器获取peer列表,该列表中包含每个客户节点的ID、内 网IP地址、外网IP地址、UDP端口号和网络类型; 步骤S40、根据网络类型进行NAT穿越。
4.根据权利要求3所述的基于UDT实现NAT穿越的方法,其特征在于所述步骤SlO包括步骤S101、客户节点发送包括该客户节点ID和内网IP地址的数据报文给NAT穿越服 务器;步骤S102、NAT穿越服务器解析并保存该数据报文中的客户节点ID和内网IP地址,提 取并保存该数据报文中的客户节点的外网IP地址和UDP端口号。
5.根据权利要求3所述的基于UDT实现NAT穿越的方法,其特征在于所述步骤S20包括步骤S201、NAT穿越服务器比较该客户节点的外网IP地址和内网IP地址,若相同则该 节点为外网节点,否则为内网节点,并保存比较结果信息;步骤S202、NAT穿越服务器对比较结果信息的保存完成后,向客户节点发送包含该客 户节点网络类型的注册成功消息。
6.根据权利要求5所述的基于UDT实现NAT穿越的方法,其特征在于所述步骤S40包括步骤S401、若对方客户节点处于公网中,则直接向对方客户节点发起连接; 步骤S402,若对方客户节点处于内网中,且本地客户节点处于公网中,则通过让对方客 户节点进行TCP反连来实现NAT穿越;步骤S403、若本地客户节点和对方客户节点都处于内网中,则本地客户节点通过内网 广播确定对方是否与自己处于同一内网,若处于同一内网中,则直接与其建立TCP连接,否则转入步骤S404 ;步骤S404、本地客户节点和对方客户节点之间使用UDT进行打洞来实现NAT穿越。
7.根据权利要求6所述的基于UDT实现NAT穿越的方法,其特征在于所述步骤S404包括步骤4041、本地客户节点给NAT穿越服务器发送打洞请求报文A,请求与对方客户节点 进行UDT打洞,报文A的内容包括本地客户节点ID和对方客户节点ID ;步骤4042、NAT穿越服务器收到报文A后,查找对方客户节点ID的外部IP地址和端口 号,并给双方节点均发送打洞命令报文B,报文B包含对方客户节点的外部IP地址和端口 号;步骤4043、本地客户节点和对方客户节点收到报文B后,创建一个UDT套接字,并绑定 到与NAT穿越服务器交互的UDP套接字上,接着设置打洞模式,向报文B中的对方客户节点 的外部IP地址和端口号进行连接。
全文摘要
本发明涉及基于UDT实现NAT穿越的系统和方法,其系统包括用于向NAT穿越服务器进行注册,请求对方客户节点进行反连或者使用UDT进行打洞实现NAT穿越的终端;与终端交互的NAT穿越服务器,用于保存所述终端的注册信息,转发终端的打洞请求;以及与终端交互的索引服务器,用于为所述终端提供包含客户节点的ID、内部IP地址、外部IP地址、端口号和所处的网络类型的peer列表信息。本发明简单易行,穿透成功率高,数据传输可靠性高。
文档编号H04L29/08GK101895590SQ20101023707
公开日2010年11月24日 申请日期2010年7月23日 优先权日2010年7月23日
发明者伍明彰, 吴宗泽, 吴润凯, 谢胜利 申请人:华南理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1