一种融合UPNP及STUN的P2P穿越方法及其系统与流程

文档序号:11960447阅读:568来源:国知局
一种融合UPNP及STUN的P2P穿越方法及其系统与流程

本发明涉及P2P通信的技术领域,更具体地说是指一种融合UPNP及STUN的P2P穿越方法及融合UPNP及STUN的P2P穿越的系统。



背景技术:

NAT:网络地址转换(Network Address Translation),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP封包通过路由器或防火墙时重写源IP地址或目的IP地址的技术,这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。

P2P即点对点通信,或称为对等联网,与传统的服务器客户端模式有着明显的区别。在P2P网络中,所有通信节点的地位都是对等的,每个节点都扮演着客户机和服务器双重角色,节点之间通过直接通信实现各种功能应用。

现实中,客户端主机通常位于NAT网关后面,NAT技术虽然在一定程度上解决了IPv4地址短缺的问题,在构建防火墙、保证网络安全方面都发挥了一定的作用,却破坏了端到端的网络通信。NAT阻碍主机进行P2P通信的原因是NAT不允许外网主机主动访问内网主机,但是P2P技术却要求通信双方都能主动发起访问,所以要在NAT网络环境中进行有效的P2P通信,就必须穿越NAT,采用的解决方案通常基于UPNP、STUN、TURN等协议。

通用即插即用(UPNP)是一种用于PC机和智能设备(或仪器)的常见对等网络连接的体系结构;STUN(Simple Traversal of UDP over NATs,NAT的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口;TURN(全名Traversal Using Relay NAT),是一种资料传输协议(data-transfer protocol),允许在TCP或UDP的连线上跨越NAT或防火墙。

但是,UPNP端口映射成功与否,依赖于不受控制的路由器型号是否支持UPNP的功能,以及是否将此功能打开,如果P2P主机相对于公有网络位于多层路由器下,则UPNP无法支持跨公网的P2P主机通信,而STUN有无法穿透对称NAT(SymmetricNAT)以及类似的Firewall设备的缺陷。TURN的局限性在于所有报文都必须经过TURNServer转发,增大了包的延迟和丢包的可能性,且TURN服务器的网络费用高昂。

中国专利201010231283.2公开了一种P2P网络应用系统中私网检测与穿越的复合方法,包括以下步骤:步骤一,对UPNP、STUN、TURN三种方法设定不同的优先级,优先级顺序为:UPNP、STUN、TURN;然后对节点所处网络进行检测并加以分类;步骤二,如果检测结果显示节点所处的网络环境能够通过UPNP技术实现对外部节点的开放,则利用UPNP技术实现所述网络内部节点的NAT穿越;否则执行步骤三;步骤三,如果网络环境支持STUN技术,则利用STUN技术实现节点的私网穿越;否则执行步骤四;步骤四,如果网络环境支持TURN技术,则采用TURN技术实现节点的私网穿越。中国专利201210011530.7公开一种通过UPnP改善STUN-P2P穿透率与稳定性的方法,通过节点UPnP端口映射客户端,向NAT发起端口映射请求;如果端口映射请求成功,反馈UPnP在NAT上成功建立端口映射给节点;将已建立的端口映射传给STUN客户端,与STUN服务器建立心跳消息连接;如不能得到反馈数据,则启动STUN客户端与STUN服务器连接,取得端口;节点从STUN客户端处获取NAT的外部端口;通过XMPP或SIP协议,与它的对等节点交换其在NAT上建立的外部地址与端口。中国专利200810103849.6涉及一种基于UPNP和STUN技术相结合的NAT穿越方法,该方法将UPNP和STUN进行有效结合,在UPNP穿越NAT失败后再采用STUN方法对NAT进行二次穿越,通过汲取两种穿越方法各自的有点有效提高穿越成功率;对于对称NAT的穿越,提出采用基于NAT添加端口映射的样本值估计端口映射分布的方法进行端口猜测,以避免由于第三方代理转发造成的缺陷和简单端口递增猜测方法的盲目性;对于P2P流媒体系统中通信双方都位于NAT后的情况,提出采用让部分带宽充裕位于外网的普通通信节点充电辅助中继节点的方法来缓解中继服务器的压力,从而有效消除系统通信瓶颈。

上述的三个专利中,第一个专利利用的是UPNP、STUN、TURN依次判断穿越,并非集合使用;第二个专利以及第三个专利并未提及如何对NAT或P2P进行再次穿越。

因此,有必要设计一种融合UPNP及STUN的P2P穿越方法,实现结合UPNP在单层路由下P2P易成功且快速特点与增强STUN在对称NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,实现P2P通信。



技术实现要素:

本发明的目的在于克服现有技术的缺陷,提供一种融合UPNP及STUN的P2P穿越方法及其系统。

为实现上述目的,本发明采用以下技术方案:一种融合UPNP及STUN的P2P穿越方法,包括以下具体步骤:

步骤一、NAT映射步骤,IPC对本地路由器进行UPNP的NAT映射;

步骤二、UPNP注册步骤,IPC向业务控制服务器进行UPNP注册;

步骤三、P2P服务器注册步骤,IPC向P2P服务器上报设备信息并保持心跳,完成P2P服务器注册;

步骤四、UPNP方式访问启动步骤,APP向业务控制服务器获取指定IPC的UPNP信息后,使用UPNP反馈的IP地址信息来访问IPC,如果访问成功,则进行步骤七,如果访问失败则进行步骤五;

步骤五、P2P服务器注册步骤,APP与P2P服务器进行注册与交互;

步骤六、打洞步骤,APP与IPC同P2P服务器完成STUN的打洞流程,建立P2P通道,APP根据打通的通道访问IPC;

步骤七、结束步骤,重复步骤一,直至接收关机信号。

其进一步技术方案为:在所述步骤六中,进行打洞流程时,APP与IPC分别需要进行NAT类型探测,得到各自相对于公网的NAT类型,接着APP与IPC会通过服务器互相通告自己的NAT类型,客户端并以此来协同并确定打洞策略。

其进一步技术方案为:所述NAT类型探测的步骤如下:

步骤1、第一判断步骤,客户端发送不带任何标志和应答地址属性的STUN绑定请求报文给服务器,若服务器没有应答,则客户端为UDP完全阻塞,若服务器有应答,则进行下一步骤;

步骤2、第二判断步骤,判断服务器收到的外网IP和本地IP是否一致,并且客户端发送带“更改IP”和“更改端口”标志的STUN绑定请求报文给服务器,若外网IP和本地IP一致,同时IP不同且端口不同的服务器无应答,则客户端是对称防火墙,若外网IP和本地IP一致,同时IP不同且端口不同的服务器有应答,则客户端是无NAT公网,若外网IP和本地IP不一致,同时IP不同且端口不同的服务器有应答时,则NAT的类型为完全型NAT,若外网IP和本地IP不一致,同时IP不同且端口不同的服务器无应答时,进行下一步骤;

步骤3、第三判断步骤,客户端继续发送不带任何标志和应答地址属性的STUN绑定请求报文给IP不同的服务器,并且判断收到的外网[IP:Port]和第一判断步骤返回是否相同,如果返回的结果相同,则进行下一步骤,如果返回的结果不同,则NAT的类型为对称型NAT;

步骤4、第四判断步骤,客户端发送只带“更改端口”标志的STUN绑定请求报文给服务器,若端口不同的服务器有应答,则NAT的类型为限制型NAT,若端口不同的服务器无应答,则NAT的类型为端口限制型NAT。

其进一步技术方案为:所述步骤六中的打洞策略是客户端基于己方NAT与对方NAT类型做出的,并不区分己方是APP还是IPC。

其进一步技术方案为:所述步骤六中的打洞策略的具体策略如下:

步骤1、第一打洞策略,当己方的RemotePort和对方的RemotePort相同时,客户端向对方localIP的localPort发送消息;

步骤2、第二打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是非对称型NAT&&己方是非对称型NAT)||(对方是完全型NAT&&己方是对称型NAT)||(对方是地址限制型NAT&&己方是对称型NAT)时,客户端向对方RemoteIP的RemotePort发送消息;

步骤3、第三打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是固定步长对称型NAT)时,客户端向对方RemoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1个步长到加b个步长的共b个端口发送消息,a取值在50-200之间,b取值在1-64之间;

步骤4、第四打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是随机步长对称型NAT),客户端通过localPort-c至localPort+c端口向对方的RemoteIP的RemotePort发送消息,c取值在50-200之间;

步骤5、第五打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是完全型NAT)||(对方是对称型NAT&&己方是地址限制型NAT),客户端向对方RemoteIP的RemotePort发送消息;

步骤6、第六打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是固定步长对称型NAT&&己方是端口限制型NAT),客户端通过本地localPort-d至localPort+d端口向对方RemoteIP的RemotePort发送消息,d取值在50-200之间;

步骤7、第七打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是随机步长对称型NAT&&己方是端口限制型NAT)时,客户端通过本地localPort随机e个端口,e取值在500-2000之间,向对方RemoteIP的RemotePort发送消息;

步骤8、第八打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是对称型NAT)时,客户端向对方RemoteIP的RemotePort加1个步长到加f个步长的共f个端口发送消息,f取值在1-64之间。

其进一步技术方案为:所述消息为UDP通路探测包,所述步长为对称型NAT连续两个映射时的端口变化值。

本发明还提供了一种融合UPNP及STUN的P2P穿越系统,包括NAT映射模块、UPNP注册模块、P2P服务器注册模块、UPNP方式访问模块、NAT类型探测模块以及打洞模块;

所述NAT映射模块,用于IPC对本地路由器建立UPNP的NAT映射;

所述UPNP注册模块,用于所述NAT映射模块映射完成后,实现IPC向业务控制服务器进行的UPNP注册,接收来自所述NAT映射模块的映射信息;

所述P2P服务器注册模块,用于IPC在所述UPNP注册模块注册完成后,实现IPC向P2P服务器上报设备信息并驱动IPC与P2P服务器保持心跳,用于APP根据所述UPNP方式访问模块失败时,由APP与P2P服务器进行注册与交互,IPC在所述UPNP注册模块完成之后执行,APP在所述UPNP方式访问模块失败之后执行;

所述UPNP方式访问模块,用于在所述P2P服务器注册模块驱动IPC与P2P服务器保持心跳后,由APP向业务控制服务器获取指定IPC的UPNP信息后,使用UPNP反馈的IP地址信息来访问IPC,在所述UPNP注册模块完成之后可执行;

所述NAT类型探测模块,用于所述UPNP方式访问模块启动访问后,打洞模块进行打洞流程时,APP与IPC分别需要进行NAT类型探测,得到各自相对于公网的NAT类型,接着APP与IPC会通过服务器互相通告自己的NAT类型,客户端并以此来协同并确定打洞策略,以供打洞模块选择打洞策略,完成打洞流程,在所述打洞模块执行之前完成;

所述打洞模块,用于根据所述NAT类型探测模块探测NAT类型后,APP与IPC同P2P服务器完成打洞流程,建立P2P通道,APP根据打通的P2P通道访问IPC。

其进一步技术方案为:所述NAT类型探测模块包括第一判断子模块、第二判断子模块、第三判断子模块以及第四判断子模块;

所述第一判断子模块,用于在所述打洞模块执行之前完成,根据客户端发送不带任何标志和应答地址属性的STUN绑定请求报文给服务器,判断服务器有无应答,服务器无应答时客户端为UDP完全阻塞,在所述打洞模块执行之前完成;

所述第二判断子模块,用于根据所述第一判断子模块得出的服务器有应答的判断结果,进一步判断服务器收到的外网IP和本地IP是否一致,并且客户端发送带“更改IP”和“更改端口”标志的STUN绑定请求报文给服务器,判断IP不同且端口不同的服务器有无应答,以确定客户端是否为对称防火墙、无NAT公网以及完全型NAT,在所述第一判断子模块完成后以及所述打洞模块之前执行;

所述第三判断子模块,用于根据所述第二判断子模块判断的结果,客户端继续发送不带任何标志和应答地址属性的STUN绑定请求报文给IP不同服务器,判断收到的外网[IP:Port]和所述第一判断子模块返回是否相同,以确定客户端是否为对称型NAT,在所述第二判断子模块完成后以及所述打洞模块之前执行;

所述第四判断子模块,用于根据所述第三判断子模块的判断结果,客户端发送只带“更改端口”标志的STUN绑定请求报文给服务器,判断端口不同的服务器有无应答,以确定客户端是否为限制型NAT以及端口限制型NAT,在所述第三判断子模块完成以及所述打洞模块之前执行。

其进一步技术方案为:所述打洞模块包括在所述第四判断子模块完成之后的打洞主控子模块、第一打洞子模块、第二打洞子模块、第三打洞子模块、第四打洞子模块、第五打洞子模块、第六打洞子模块、第七打洞子模块以及第八打洞子模块;

所述第一打洞子模块,用于当己方的RemotePort和对方的RemotePort相同时,所述打洞主控子模块驱动客户端向对方的localIP的localPort发送消息,受控于所述打洞主控子模块;

所述第二打洞子模块,用于当客户端的NAT类型与对方的NAT类型满足(对方是非对称型NAT&&己方是非对称型NAT)||(对方是完全型NAT&&己方是对称型NAT)||(对方是地址限制型NAT&&己方是对称型NAT)时,所述打洞主控子模块驱动客户端向对方RemoteIP的RemotePort发送消息,受控于所述打洞主控子模块;

所述第三打洞子模块,用于客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是固定步长对称型NAT)时,所述打洞主控子模块驱动客户端向对方RemoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1个步长到加b个步长的共b个端口发送消息,a取值在50-200之间,b取值在1-64之间,受控于所述打洞主控子模块;

所述第四打洞子模块,用于客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是随机步长对称型NAT)时,所述打洞主控子模块驱动客户端通过localPort-c至localPort+c端口向对方的RemoteIP的RemotePort发送消息,c取值在50-200之间,受控于所述打洞主控子模块;

所述第五打洞子模块,用于客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是完全型NAT)||(对方是对称型NAT&&己方是地址限制型NAT),所述打洞主控子模块驱动客户端向对方RemoteIP的RemotePort发送消息,受控于所述打洞主控子模块;

所述第六打洞子模块,用于当客户端的NAT类型与对方的NAT类型满足(对方是固定步长对称型NAT&&己方是端口限制型NAT)时,所述打洞主控子模块驱动客户端通过本地localPort-d至localPort+d端口向对方RemoteIP的RemotePort发送消息,d取值在50-200之间,受控于所述打洞主控子模块;

所述第七打洞子模块,用于当客户端的NAT类型与对方的NAT类型满足(对方是随机步长对称型NAT&&己方是端口限制型NAT)时,所述打洞主控子模块驱动客户端通过本地localPort随机e个端口,e取值在500-2000之间,向对方RemoteIP的RemotePort发送消息,受控于所述打洞主控子模块;

所述第八打洞子模块,用于当客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是对称型NAT)时,所述打洞主控子模块驱动客户端向对方RemoteIP的RemotePort加1个步长到加f个步长的共f个端口发送消息,f取值在1-64之间,受控于所述打洞主控子模块。

本发明与现有技术相比的有益效果是:本发明的一种融合UPNP及STUN的P2P穿越的方法,通过在通信时,先进行UPNP的通信访问,当访问失败时,进行STUN的访问,结合UPNP在单层路由下P2P易成功且快速特点与增强STUN在对称NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,实现P2P通信。

下面结合附图和具体实施例对本发明作进一步描述。

附图说明

图1为本发明具体实施例提供的一种融合UPNP及STUN的P2P穿越方法的流程图;

图2为本发明具体实施例提供的NAT类型探测步骤的流程图;

图3为本发明具体实施例提供的打洞策略流程图;

图4为本发明具体实施例提供的一种融合UPNP及STUN的P2P穿越系统的结构框图。

附图标记

10 NAT映射模块 20 UPNP注册模块

30 P2P服务器注册模块 40 UPNP方式访问模块

50 NAT类型探测模块 51 第一判断子模块

52 第二判断子模块 53 第三判断子模块

54 第四判断子模块 60 打洞模块

61 打洞主控子模块 62 第一打洞子模块

63 第二打洞子模块 64 第三打洞子模块

65 第四打洞子模块 66 第五打洞子模块

67 第六打洞子模块 68 第七打洞模块

69 第八打洞子模块

具体实施方式

为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。

如图1~4所示的具体实施例,本实施例提供的一种融合UPNP及STUN的P2P穿越方法,可以运用在通信的过程中,实现结合UPNP在单层路由下P2P易成功且快速特点与增强STUN在对称NAT打洞穿透能力,提高了在P2P的NAT穿越成功率。

一种融合UPNP及STUN的P2P穿越方法,包括以下具体步骤:

步骤一、NAT映射步骤,IPC对本地路由器进行UPNP的NAT映射;

步骤二、UPNP注册步骤,IPC向业务控制服务器进行UPNP注册;

步骤三、P2P服务器注册步骤,IPC向P2P服务器上报设备信息并保持心跳,完成P2P服务器注册;

步骤四、UPNP方式访问启动步骤,APP向业务控制服务器获取指定IPC的UPNP信息后,使用UPNP反馈的IP地址信息来访问IPC,如果访问成功,则进行步骤七,如果反问失败则进行步骤五;

步骤五、P2P服务器注册步骤,APP与P2P服务器进行注册与交互;

步骤六、打洞步骤,APP与IPC同P2P服务器完成STUN的打洞流程,建立P2P通道,APP根据打通的通道访问IPC;

步骤七、结束步骤,重复步骤一,直至接收关机信号。

上述的一种融合UPNP及STUN的P2P穿越方法,通过在通信时,先进行UPNP的通信访问,当访问失败时,进行STUN的访问,结合UPNP在单层路由下P2P易成功且快速特点与增强STUN在对称NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,实现P2P通信。

具体的,在所述步骤六中,进行打洞流程时,APP与IPC分别需要进行NAT类型探测,得到各自相对于公网的NAT类型,接着APP与IPC会通过服务器互相通告自己的NAT类型,客户端并以此来协同并确定打洞策略。

更进一步的,上述的NAT类型探测的具体步骤如下:

步骤1、第一判断步骤,客户端发送不带任何标志和应答地址属性的STUN绑定请求报文给服务器,若服务器没有应答,则客户端为UDP完全阻塞,若服务器有应答,则进行下一步骤;

步骤2、第二判断步骤,判断服务器收到的外网IP和本地IP是否一致,并且客户端发送带“更改IP”和“更改端口”标志的STUN绑定请求报文给服务器,若外网IP和本地IP一致,同时IP不同且端口不同的服务器无应答,则客户端是对称防火墙,若外网IP和本地IP一致,同时IP不同且端口不同的服务器有应答,则客户端是无NAT公网,若外网IP和本地IP不一致,同时IP不同且端口不同的服务器有应答时,则NAT的类型为完全型NAT,若外网IP和本地IP不一致,同时IP不同且端口不同的服务器无应答时,进行下一步骤;

步骤3、第三判断步骤,客户端继续发送不带任何标志和应答地址属性的STUN绑定请求报文给IP不同的服务器,并且判断收到的外网[IP:Port]和第一判断步骤返回是否相同,如果返回的结果相同,则进行下一步骤,如果返回的结果不同,则NAT的类型为对称型NAT;

步骤4、第四判断步骤,客户端发送只带“更改端口”标志的STUN绑定请求报文给服务器,若端口不同的服务器有应答,则NAT的类型为限制型NAT,若端口不同的服务器无应答,则NAT的类型为端口限制型NAT。

另外,在所述步骤六中,所述步骤六中的打洞策略是客户端基于己方NAT与对方NAT类型做出的,并不区分己方是APP还是IPC。具体策略如下:

步骤1、第一打洞策略,当己方的RemotePort和对方的RemotePort相同时,客户端向对方的localIP的localPort发送消息;

步骤2、第二打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是非对称型NAT&&己方是非对称型NAT)||(对方是完全型NAT&&己方是对称型NAT)||(对方是地址限制型NAT&&己方是对称型NAT)时,客户端向对方RemoteIP的RemotePort发送消息;

步骤3、第三打洞策略,,客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是固定步长对称型NAT)时,客户端向对方RemoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1个步长到加b个步长的共b个端口发送消息,a取值在50-200之间,b取值在1-64之间;

步骤4、第四打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是随机步长对称型NAT),客户端通过localPort-c至localPort+c端口向对方的RemoteIP的RemotePort发送消息,c取值在50-200之间;

步骤5、第五打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是完全型NAT)||(对方是对称型NAT&&己方是地址限制型NAT),客户端向对方RemoteIP的RemotePort发送消息;

步骤6、第六打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是固定步长对称型NAT&&己方是端口限制型NAT),客户端通过本地localPort-d至localPort+d端口向对方RemoteIP的RemotePort发送消息,d取值在50-200之间;

步骤7、第七打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是随机步长对称型NAT&&己方是端口限制型NAT)时,客户端通过本地localPort随机e个端口,e取值在500-2000之间,向对方RemoteIP的RemotePort发送消息;

步骤8、第八打洞策略,客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是对称型NAT)时,客户端向对方RemoteIP的RemotePort加1个步长到加f个步长的共f个端口发送消息,f取值在1-64之间。

在本实施例中,上述的消息为UDP通路探测包。

另外,所述步长为对称型NAT连续两个映射时的端口变化值。

STUN打通的通道意味着APP与IPC都收到对方的UDP通路探测包,收到的同时也意味着APP与IPC之间的网络已经有了必要的UDP连接映射,可以互通的网路。

本发明还提供了一种融合UPNP及STUN的P2P穿越系统,包括NAT映射模块10、UPNP注册模块20、P2P服务器注册模块30、UPNP方式访问模块40、NAT类型探测模块50以及打洞模块60,其中,NAT映射模块10,用于IPC对本地路由器建立UPNP的NAT映射;UPNP注册模块20,用于NAT映射模块10映射完成后,实现IPC向业务控制服务器进行的UPNP注册,接收来自所述NAT映射模块10的映射信息;P2P服务器注册模块30,用于IPC在UPNP注册模块20注册完成后,实现IPC向P2P服务器上报设备信息并驱动IPC与P2P服务器保持心跳,用于APP根据所述UPNP方式访问模块失败时,由APP与P2P服务器进行注册与交互,IPC在所述UPNP注册模块完成之后执行,APP在所述UPNP方式访问模块失败之后执行;UPNP方式访问模块40,用于在P2P服务器注册模块30驱动IPC与P2P服务器保持心跳后,由APP向业务控制服务器获取指定IPC的UPNP信息后,使用UPNP反馈的IP地址信息来访问IPC,在所述UPNP注册模块20完成之后可执行;NAT类型探测模块50,用于UPNP方式访问模块40启动访问后,打洞模块60进行打洞流程时,APP与IPC分别需要进行NAT类型探测,得到各自相对于公网的NAT类型,接着APP与IPC会通过服务器互相通告自己的NAT类型,客户端并以此来协同并确定打洞策略,以供打洞模块60选择打洞策略,完成打洞流程,在所述打洞模块60执行之前完成;打洞模块60,用于根据所述NAT类型探测模块50探测NAT类型后,APP与IPC同P2P服务器完成打洞流程,建立P2P通道,APP根据打通的P2P通道,访问IPC。

具体的,上述的NAT类型探测模块50包括第一判断子模块51、第二判断子模块52、第三判断子模块53以及第四判断子模块54,其中,第一判断子模块51,用于所述打洞模块60执行之前完成,根据客户端发送不带任何标志和应答地址属性的STUN绑定请求报文给服务器,判断服务器有无应答,服务器无应答时客户端为UDP完全阻塞,在所述打洞模块60执行之前完成;第二判断子模块52,用于根据第一判断子模块51得出的服务器有应答的判断结果,进一步判断服务器收到的外网IP和本地IP是否一致,并且且客户端发送带“更改IP”和“更改端口”标志的STUN绑定请求报文给服务器,判断IP不同且端口不同的服务器有无应答,以确定客户端是否为对称防火墙、无NAT公网以及完全型NAT,在所述第一判断子模块51完成后以及所述打洞模块60之前执行;第三判断子模块53,用于根据第二判断子模块52判断的结果,客户端继续发送不带任何标志和应答地址属性的STUN绑定请求报文给IP不同服务器,判断收到的外网[IP:Port]和第一判断子模块51返回是否相同,以确定客户端是否为对称型NAT,在所述第二判断子模块52完成后以及所述打洞模块60之前执行;第四判断子模块54,用于根据第三判断子模块53的判断结果,客户端发送只带“更改端口”标志的STUN绑定请求报文给服务器,判断端口不同的服务器有无应答,以确定客户端是否为限制型NAT以及端口限制型NAT,在所述第三判断子模块53完成以及所述打洞模块60之前执行。

在本实施例中,打洞模块60包括在第四判断子模块54完成之后的打洞主控子模块61、第一打洞策略子模块62、第二打洞策略子模块63、第三打洞策略子模块64、第四打洞策略子模块65、第五打洞策略子模块66、第六打洞策略子模块67、第七打洞子模块68以及第八打洞子模块69,其中,第一打洞策略子模块62,用于当己方的RemotePort和对方的RemotePort相同时,所述打洞主控子模块61驱动客户端向对方的localIP的localPort发送消息,受控于所述打洞主控子模块61;第二打洞策略子模块63,用于当客户端的NAT类型与对方的NAT类型满足(对方是非对称型NAT&&己方是非对称型NAT)||(对方是完全型NAT&&己方是对称型NAT)||(对方是地址限制型NAT&&己方是对称型NAT)时,所述打洞主控子模块61驱动客户端向对方RemoteIP的RemotePort发送消息,受控于打洞主控子模块61;第三打洞策略子模块64,用于客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是固定步长对称型NAT)时,所述打洞主控子模块61驱动客户端向对方RemoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1个步长到加b个步长的共b个端口发送消息,a取值在50-200之间,b取值在1-64之间,受控于所述打洞主控子模块61;第四打洞策略子模块65,用于客户端的NAT类型与对方的NAT类型满足(对方是端口限制型NAT&&己方是随机步长对称型NAT)时,所述打洞主控子模块61驱动客户端通过localPort-c至localPort+c端口向对方的RemoteIP的RemotePort发送消息,c取值在50-200之间,受控于所述打洞主控子模块61;第五打洞策略子模块66,用于客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是完全型NAT)||(对方是对称型NAT&&己方是地址限制型NAT),所述打洞主控子模块61驱动客户端向对方RemoteIP的RemotePort发送消息,受控于所述打洞主控子模块61;第六打洞策略子模块67,用于当客户端的NAT类型与对方的NAT类型满足(对方是固定步长对称型NAT&&己方是端口限制型NAT)时,所述打洞主控子模块61驱动客户端通过本地localPort-d至localPort+d端口向对方RemoteIP的RemotePort发送消息,d取值在50-200之间,受控于所述打洞主控子模块61;所述第七打洞子模块68,用于当客户端的NAT类型与对方的NAT类型满足(对方是随机步长对称型NAT&&己方是端口限制型NAT)时,所述打洞主控子模块61驱动客户端通过本地localPort随机e个端口,e取值在500-2000之间,向对方RemoteIP的RemotePort发送消息,受控于所述打洞主控子模块61;所述第八打洞子模块69,用于当客户端的NAT类型与对方的NAT类型满足(对方是对称型NAT&&己方是对称型NAT)时,所述打洞主控子模块61驱动客户端向对方RemoteIP的RemotePort加1个步长到加f个步长的共f个端口发送消息,f取值在1-64之间,受控于所述打洞主控子模块61。

上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1