CN109831547B - Nat穿透方法、装置、设备及存储介质 - Google Patents

Nat穿透方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN109831547B
CN109831547B CN201910193490.4A CN201910193490A CN109831547B CN 109831547 B CN109831547 B CN 109831547B CN 201910193490 A CN201910193490 A CN 201910193490A CN 109831547 B CN109831547 B CN 109831547B
Authority
CN
China
Prior art keywords
host
nat
address
server
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910193490.4A
Other languages
English (en)
Other versions
CN109831547A (zh
Inventor
薛政
周煜
吕静
王宝剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910193490.4A priority Critical patent/CN109831547B/zh
Publication of CN109831547A publication Critical patent/CN109831547A/zh
Application granted granted Critical
Publication of CN109831547B publication Critical patent/CN109831547B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Small-Scale Networks (AREA)

Abstract

本申请提供了一种NAT穿透方法、装置、设备及存储介质。所述方法包括:第一服务器获取第一主机对应的NAT类型和第二主机对应的NAT类型;第一服务器向第一主机发送第一角色分配信息,向第二主机发送第二角色分配信息;第一主机获取第二主机的外网地址;第一主机通过第一NAT设备发送n个第一数据包;第二主机获取第一主机的外网地址;第二主机根据第一主机的外网地址,通过第二NAT设备向第一主机发送m个第二数据包;第一主机接收第一NAT设备转发的来自第二主机的第二数据包;第一主机在接收到第二数据包之后,与第二主机之间建立传输链路。本申请提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。

Description

NAT穿透方法、装置、设备及存储介质
技术领域
本申请实施例涉及互联网技术领域,特别涉及一种NAT(Network AddressTranslation,网络地址转换)穿透方法、装置、设备及存储介质。
背景技术
NAT技术是一种在IP(Internet Protocol,互联网协议)数据包通过路由器或防火墙时重写源地址或目的地址的技术,能够解决IP地址不足的问题,而且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
NAT设备会把内网主机向外网发送的数据包中的内网地址映射为外网地址,且收到外网来包后会按照一定的规则进行过滤,这就导致两个不同内网的主机之间的通信变得复杂。NAT穿透技术就是用于打破NAT壁垒,在两个不同内网的主机之间建立传输链路。目前,根据映射规则和过滤规则的不同,分为如下四种NAT类型:全锥型NAT、受限型NAT、端口受限型NAT、对称型NAT。这其中端口受限型NAT和对称型NAT的安全等级最高、连通条件最苛刻、应用最广。
目前,针对端口受限型NAT和对称型NAT之间的内网主机互通,传输链路建立的成功率较低。
发明内容
本申请实施例提供了一种NAT穿透方法、装置、设备及存储介质,可用于解决针对端口受限型NAT和对称型NAT之间的内网主机互通,传输链路建立的成功率较低的问题。技术方案如下:
一方面,本申请实施例提供一种NAT穿透方法,应用于第一主机中,所述第一主机部署在第一NAT设备构建的第一NAT网络中,所述方法包括:
获取第一角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方;
获取第二NAT网络中的第二主机的外网地址;
通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n为大于1的整数;
接收所述第一NAT设备转发的来自所述第二主机的第二数据包,所述第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
在接收到所述第二数据包之后,与所述第二主机之间建立传输链路。
在可能的设计中,所述n个第一数据包的源地址各不相同。
在可能的设计中,所述n个第一数据包的源IP地址相同,且源端口号为随机选择的不同值。
在可能的设计中,所述第一数据包的TTL(Time to Live,生存时间值)小于预设阈值。
另一方面,本申请实施例提供一种NAT穿透方法,应用于第二主机中,所述第二主机部署在第二NAT设备构建的第二NAT网络中,所述方法包括:
获取第二角色分配信息,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
获取第一NAT网络中的第一主机的外网地址;
根据所述第一主机的外网地址,通过所述第二NAT设备向所述第一主机发送m个第二数据包,所述m为大于1的整数;
与所述第一主机之间建立传输链路。
在可能的设计中,所述m个第二数据包的目的地址各不相同。
在可能的设计中,所述m个第二数据包的目的IP地址相同,且目的端口号为随机选择的不同值。
另一方面,本申请实施例提供一种NAT穿透方法,应用于第一服务器中,所述方法包括:
获取第一主机对应的NAT类型和第二主机对应的NAT类型,所述第一主机部署在第一NAT设备创建的第一NAT网络中,所述第二主机部署在第二NAT设备创建的第二NAT网络中;
根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
其中,所述端口预留方用于向外发送n个第一数据包,所述n个第一数据包的目的地址为所述端口探测方的外网地址,所述n为大于1的整数;所述端口探测方用于根据所述端口预留方的外网地址,向所述端口预留方发送m个第二数据包,所述m为大于1的整数;所述端口预留方还用于在接收到来自所述端口探测方的所述第二数据包之后,与所述端口探测方之间建立传输链路。
再一方面,本申请实施例提供一种NAT穿透装置,应用于第一主机中,所述第一主机部署在第一NAT设备构建的第一NAT网络中,所述装置包括:
信息获取模块,用于获取第一角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方;
地址获取模块,用于获取第二NAT网络中的第二主机的外网地址;
数据包发送模块,用于通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n为大于1的整数;
数据包接收模块,用于接收所述第一NAT设备转发的来自所述第二主机的第二数据包,所述第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
链路建立模块,用于在接收到所述第二数据包之后,与所述第二主机之间建立传输链路。
再一方面,本申请实施例提供一种NAT穿透装置,应用于第二主机中,所述第二主机部署在第二NAT设备构建的第二NAT网络中,所述装置包括:
信息获取模块,用于获取第二角色分配信息,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
地址获取模块,用于获取第一NAT网络中的第一主机的外网地址;
数据包发送模块,用于根据所述第一主机的外网地址,通过所述第二NAT设备向所述第一主机发送m个第二数据包,所述m为大于1的整数;
链路建立模块,用于与所述第一主机之间建立传输链路。
再一方面,本申请实施例提供一种NAT穿透装置,应用于第一服务器中,所述装置包括:
类型获取模块,用于获取第一主机对应的NAT类型和第二主机对应的NAT类型,所述第一主机部署在第一NAT设备创建的第一NAT网络中,所述第二主机部署在第二NAT设备创建的第二NAT网络中;
信息发送模块,用于根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
其中,所述端口预留方用于向外发送n个第一数据包,所述n个第一数据包的目的地址为所述端口探测方的外网地址,所述n为大于1的整数;所述端口探测方用于根据所述端口预留方的外网地址,向所述端口预留方发送m个第二数据包,所述m为大于1的整数;所述端口预留方还用于在接收到来自所述端口探测方的所述第二数据包之后,与所述端口探测方之间建立传输链路。
又一方面,本申请实施例提供一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的NAT穿透方法。
又一方面,本申请实施例提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述方面所述的NAT穿透方法。
又一方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品被执行时,其用于执行上述方面所述的NAT穿透方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过服务器根据两个内网主机分别对应的NAT类型,为这两个内网主机分配NAT穿透角色,端口预留方向外网发送多个第一数据包,实现在端口预留方对应的NAT设备上预留下多个通信端口,端口探测方向端口预留方发送多个第二数据包,当某一个第二数据包的目的地址与预留的任意一个通信端口相同时,NAT穿透成功,这两个内网主机之间即可建立传输链路。本申请实施例提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。针对端口受限型NAT和对称型NAT之间的内网主机互通,采用本申请提供的上述技术方案,NAT穿透的成功率也能够有效提升。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的实施环境的示意图;
图2是本申请一个实施例提供的NAT穿透方法的流程图;
图3是本申请另一个实施例提供的NAT穿透方法的流程图;
图4是本申请一个实施例提供的确定NAT类型的流程图;
图5是本申请另一个实施例提供的NAT穿透方法的示意图;
图6是本申请一个实施例提供的NAT穿透装置的框图;
图7是本申请另一个实施例提供的NAT穿透装置的框图;
图8是本申请另一个实施例提供的NAT穿透装置的框图;
图9是本申请另一个实施例提供的NAT穿透装置的框图;
图10是本申请另一个实施例提供的NAT穿透装置的框图;
图11是本申请一个实施例提供的计算机设备的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行介绍说明之前,先对4种NAT类型进行介绍说明。
全锥型NAT:同一内网地址X(包括IP地址和端口号)的连接请求都会被映射到同一外网地址Y(包括IP地址和端口号),与请求的目的地址无关,NAT会将所有外部地址Z(包括IP地址和端口号)发送给Y的请求转发给X。
受限型NAT:同一内网地址X(包括IP地址和端口号)的连接请求都会被映射到同一外网地址Y(包括IP地址和端口号),与请求的目的地址无关,但是只有内网地址X先经过外网地址Y发送请求到地址Z(只包括IP地址,端口号不限),NAT才会将Z发送给Y的请求转发给X,否则Z发送到X的请求会被NAT认为是未经认证的而进行阻止。
端口受限型NAT:所有来自同一内网地址X(包括IP地址和端口号)的连接请求都会被映射到同一外网地址Y(包括IP地址和端口号),与请求的目的地址无关,但是只有内网地址先通过外网地址Y发送请求到地址Z(包括IP地址和端口号),NAT才会将Z发送给Y的请求转发给X,否则Z发送到X的请求会被NAT认为是未经认证的而进行阻止。
对称型NAT:来自同一内网地址X的连接请求根据目的地址(包括IP地址和端口号)的不同,会被映射到不同的外网地址(端口号不同)。只有内网地址X先经过外网地址Y发送请求到地址Z(包括IP地址和端口号),NAT才会将Z发送给Y的请求转发给X,否则Z发送到X的请求会被NAT认为是未经认证的而进行阻止。
在相关技术中,两个NAT网络中的第一主机和第二主机之间通过如下方式建立传输链路:第一主机和第二主机分别与打洞服务器建立连接。打洞服务器获得第一主机的外网地址和第二主机的外网地址,并将第二主机的外网地址发送给第一主机。第一主机根据第二主机的外网地址,向第二主机发送第一打洞请求数据包,但是该第一打洞请求数据包会被第二主机的NAT设备拦截。第一主机向打洞服务器发送协助打洞请求,请求打洞服务器协助打洞。打洞服务器向第二主机发送第一主机的外网地址。第二主机根据第一主机的外网地址,向第一主机发送第二打洞请求数据包,因为第一主机之前通过第一主机的NAT设备向第二主机发送过数据包,所以第一主机的NAT设备在收到该第二打洞请求数据包之后,会将该第二打洞请求数据包转发给第一主机,第一主机收到第二主机发送的第二打洞请求数据包。因为第二主机之前通过第二主机的NAT设备向第一主机发送过数据包,所以第二主机的NAT设备会将之后从第一主机发送到第二主机的数据包转发给第二主机,第一主机与第二主机之间建立传输链路,第一主机与第二主机能够进行正常通信。
然而,当第一主机对应的NAT类型为端口受限型NAT,且第二主机对应的NAT类型为对称型NAT时,第一主机向第二主机发送的第一打洞请求数据包会被对称型NTA设备(也即第二主机对应的NAT设备)认为是未经认证的数据包,从而进行阻止,不再转发给第二主机。在之后的一段时间内,所有从第一主机发送到第二主机的数据包都会被对称型NAT设备阻止,不再转发给第二主机。所以,上述相关技术方案提供的NAT穿透方案无法解决端口受限型NAT和对称型NAT之间的互通问题,导致端口受限型NAT和对称型NAT之间的内网主机建立传输链路的成功率较低。
请参考图1,其示出了本申请一个实施例提供的实施环境的示意图。该实施环境可以包括:第一主机10、第一NAT设备11、第二主机20、第二NAT设备21、第一服务器30和第二服务器40。
第一主机10是第一NAT设备11构建的第一NAT网络中的内网主机。第二主机20是第二NAT设备21构建的第二NAT网络中的内网主机。上述第一NAT网络和第二NAT网络是两个不同的NAT网络,第一NAT网络中可以包括一个或多个主机,第二NAT网络中也可以包括一个或多个主机。
第一主机10和第二主机20可以是终端,如手机、平板电脑、PC(PersonalComputer,个人计算机)等。在一个示例中,第一主机10和第二主机20是VVOIP(Voice andVideo over IP,基于IP的音视频传输)通话的参与双方,第一主机10和第二主机20中都安装运行有具有VVOIP功能的应用程序,如即时通信应用程序的客户端。第一主机10和第二主机20之间通过NAT穿透建立传输链路,然后通过该传输链路传输VVOIP业务的音视频数据。
第一服务器30可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。在本申请实施例中,第一服务器30也可称为角色决策服务器,用于为第一主机10和第二主机20分配NAT穿透角色,使得第一主机10和第二主机20根据各自的角色在NAT穿透过程中执行不同的操作。在本申请实施例中,NAT穿透角色包括端口预留方和端口探测方,有关这两个角色的详细介绍说明,请参见下文方法实施例。另外,第一服务器30可以通过有线或者无线网络分别与第一NAT设备11和第二NAT设备21进行通信。第一服务器30可以是TCP(Transmission Control Protocol,传输控制协议)服务器。
第二服务器40可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。在本申请实施例中,第二服务器40也可称为打洞服务器,用于在NAT穿透过程中,将第一主机10和第二主机20之间的数据包进行中转转发。第二服务器40可以通过有线或者无线网络分别与第一NAT设备11和第二NAT设备21进行通信。第二服务器40可以是UDP(User Datagram Protocol,用户数据报协议)服务器。
在图1实施例中,仅以第一服务器30和第二服务器40是两个在功能上互相独立的服务器为例进行介绍说明,在一些其它实施例中,第一服务器30和第二服务器40也可以在功能上进行整合集成,由一台或一组服务器来实现第一服务器30和第二服务器40的功能。
请参考图2,其示出了本申请一个实施例提供的NAT穿透方法的流程图。该方法可应用于图1所示的实施环境中。该方法可以包括以下几个步骤:
步骤201,第一服务器获取第一主机对应的NAT类型和第二主机对应的NAT类型。
在本申请实施例中,第一主机部署在第一NAT设备创建的第一NAT网络中,第二主机部署在第二NAT设备创建的第二NAT网络中。第一主机对应的NAT类型即为第一NAT网络(或第一NAT设备)的NAT类型,第二主机对应的NAT类型即为第二NAT网络(或第二NAT设备)的NAT类型。
步骤202,第一服务器根据第一主机对应的NAT类型和第二主机对应的NAT类型,向第一主机发送第一角色分配信息,以及向第二主机发送第二角色分配信息。
在本申请实施例中,第一角色分配信息用于指示第一主机的角色为端口预留方,第二角色分配信息用于指示第二主机的角色为端口探测方。第一服务器为两个不同内网的主机分配不同的NAT穿透角色,以使得第一主机和第二主机根据各自的角色在后续的NAT穿透过程中执行不同的操作。
端口预留方用于在其对应的NAT设备上预留多个通信端口(也称为“洞”)。可选地,端口预留方用于在其对应的NAT设备上随机预留多个通信端口,也即端口预留方在NAT设备上所预留的端口号可以是随机的,非连续变化的。
端口探测方用于选择目的端口号进行探测。可选地,端口探测方用于随机选择目的端口号进行探测。只要有一次探测的目的端口号刚好命中上述预留的多个通信端口中的一个,则NAT穿透成功,端口预留方和端口探测方之间的传输链路可以建立。
可选地,若第一主机对应的NAT类型为对称型NAT,且第二主机对应的NAT类型为端口受限型NAT,则第一服务器为第一主机分配的NAT穿透角色为端口预留方,为第二主机分配的NAT穿透角色为端口探测方。第一服务器向第一主机发送第一角色分配信息,以及向第二主机发送第二角色分配信息。
在一些其它示例中,若第一主机对应的NAT类型和第二主机对应的NAT类型相同,如第一主机对应的NAT类型和第二主机对应的NAT类型都为全锥形NAT,或者都为端口受限型NAT,则第一服务器为第一主机分配的NAT穿透角色可以为端口预留方,为第二主机分配的NAT穿透角色可以为端口探测方。
步骤203,第一主机获取第二主机的外网地址。
可选地,第一主机从第二服务器获取第二主机的外网地址。第二主机的外网地址包括第二主机的外网IP地址和外网端口号。
步骤204,第一主机通过第一NAT设备发送n个第一数据包,n为大于1的整数。
在本申请实施例中,n个第一数据包的目的地址为第二主机的外网地址。也即,上述n个第一数据包的目的地址相同,均为第二主机的外网地址。可选地,n个第一数据包的源地址各不相同。可选地,第一主机向第一NAT设备发送n个第一数据包,该n个第一数据包的源地址为第一主机的内网地址,且该n个第一数据包的源地址各不相同。第一NAT设备接收到第一数据包之后,将源地址由第一主机的内网地址映射为第一主机的外网地址,其中,不同的内网地址映射为不同的外网地址。
源地址可以包括源IP地址和源端口号。可选地,n个第一数据包的源IP地址相同,且源端口号各不相同。例如,n个第一数据包的源端口号可以为随机选择的不同值。
示例性地,假设第一主机向第一NAT设备发送3个第一数据包,上述3个第一数据包的内网源地址分别为IP1:PORT1、IP1:PORT3和IP1:PORT5,目的地址均为IP4:PORT1(也即第二主机的外网地址)。第一NAT设备接收到上述3个第一数据包之后,将上述3个第一数据包中的内网源地址映射为外网源地址,即分别为IP3:PORT1、IP3:PORT3和IP3:PORT5,然后向目的地址发送上述3个第一数据包。
第一主机通过第一NAT设备发送n个第一数据包,是为了实现端口预留,即在第一NAT设备上预留n个通信端口。
可选地,第一数据包的TTL(Time to Live,生存时间)小于预设阈值。在通信端口预留阶段,第一数据包只需要穿透第一NAT设备就可以实现留洞。而且,当第二主机对应的NAT类型为端口受限型NAT时,第二NAT设备不会将这些第一数据包转发给第二主机,所以第一数据包在穿透第一NAT设备以后就可以被丢弃,不需要传输到第二NAT设备,即第一数据包在第一NAT设备与第二NAT设备的传输链路上就可以被丢弃,例如,第一数据包被该传输链路上的服务器丢弃。设置第一数据包的TTL小于预设阈值来限制第一数据包的生存周期,可以达到降低传输链路负载的目的。可选地,预设阈值为12。
步骤205,第二主机获取第一主机的外网地址。
可选地,第二主机从第二服务器获取第一主机的外网地址。第一主机的外网地址包括第一主机的外网IP地址和外网端口号。
在本实施例中,步骤203和步骤205可以同时执行,也可以先后执行,如步骤203在步骤205之前执行,或者步骤203在步骤205之后执行,本申请实施例对此不作限定。
步骤206,第二主机根据第一主机的外网地址,通过第二NAT设备向第一主机发送m个第二数据包,m为大于1的整数。
可选地,m个第二数据包的目的地址各不相同。目的地址可以包括目的IP地址和目的端口号。可选地,m个第二数据包的目的IP地址相同,均为第一主机的外网IP地址。m个第二数据包的目的端口号各不相同,如目的端口号可以为线性选择(也即按序选择)的不同值,或者目的端口号也可以为随机选择的不同值。示例性地,假设第二主机通过第二NAT设备向第一主机发送3个第二数据包,上述3个第二数据包的目的地址可以分别为IP3:PORT2、IP3:PORT4和IP3:PORT5。
可选地,步骤206在步骤204之后执行,例如第二服务器向第一主机和第二主机同时下发角色分配信息,第一主机在接收到第一角色分配信息之后,立即执行上述步骤204,第二主机在接收到第二角色分配信息之后,等待一段时间再执行步骤206。例如,第二主机在接收到第二角色分配信息之后,等待预设时长之后再执行步骤206,该预设时长可以根据实际经验预先设定,也可以由第一服务器或第二服务器下发给第二主机,本申请实施例对此不作限定。
步骤207,第一主机接收第一NAT设备转发的来自第二主机的第二数据包。
在本申请实施例中,m个第二数据包中的目标第二数据包被第一NAT网络中的第一NAT设备转发给第一主机,目标第二数据包是第二主机发送的m个第二数据包中的一个,目标第二数据包的目的地址与第一主机通过第一NAT设备发出的n个第一数据包中的某一个第一数据包(如第i个第一数据包,i为小于等于n的正整数)的源地址相同。
仍然以上述示例为例,因为存在目的地址为IP3:PORT5的第二数据包,其刚好命中预留的通信端口IP3:PORT5,所以该目的地址为IP3:PORT5的第二数据包会被第一NAT设备转发给第一主机。
步骤208,第一主机在接收到第二数据包之后,与第二主机之间建立传输链路。
第一主机在接收到目标第二数据包之后,向第二主机发送连接请求包,第二主机接收到该连接请求包之后,向第一主机发送连接响应包,至此,第一主机与第二主机之间建立传输链路。该传输链路也可以称为直连链路。该传输链路可用于传输业务数据,如VVOIP业务的音视频数据,或者其它类型业务的数据,本申请实施例对此不作限定。
示例性地,NAT穿透成功率(也即第一主机与第二主机之间传输链路的建立成功率)P可以采用如下公式计算:
Figure BDA0001995090280000111
其中,k表示有效端口号个数,n表示第一数据包的个数,m表示第二数据包的个数,i的取值为[1,m]且i为整数。对于一般的终端设备而言,应用程序能够使用的端口号区间为[1025,65535],所以k的取值为65535-1025+1=64511。
由上述公式可以看出,NAT穿透成功率P与n和m有关,P与n呈正相关关系,P与m也呈正相关关系。也即,随着n和m数量的增加,NAT穿透成功率P会提高。
综上所述,本申请实施例提供的技术方案中,通过服务器根据两个内网主机分别对应的NAT类型,为这两个内网主机分配NAT穿透角色,端口预留方向外网发送多个第一数据包,实现在端口预留方对应的NAT设备上预留下多个通信端口,端口探测方向端口预留方发送多个第二数据包,当某一个第二数据包的目的地址与预留的任意一个通信端口相同时,NAT穿透成功,这两个内网主机之间即可建立传输链路。本申请实施例提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。针对端口受限型NAT和对称型NAT之间的内网主机互通,采用本申请提供的上述技术方案,NAT穿透的成功率也能够有效提升。
另外,采用随机端口预留和随机端口探测的方式,能够提升端口探测的灵活性,并且其借鉴了生日攻击算法的原理,双随机的策略能够提升碰撞概率,从而提升NAT穿透的成功率。
经研究统计发现,在所有NAT类型中,端口受限型NAT占比29%左右,对称型NAT占比46%左右,这两种NAT类型的内网主机互通的VVOIP业务占所有VVOIP业务的27%左右。采用本申请提供的技术方案,能够提升端口受限型NAT和对称型NAT互通的打洞成功率,提升VVOIP通话中直连链路的建立成功率。采用直连链路进行VVOIP通话,相较于采用中转服务器进行VVOIP通话,一方面有助于降低中转服务器和中转带宽的部署成本,降低整体运营成本;另一方面,直连链路的传输时延比中转链路低,而VVOIP业务属于实时流媒体业务,低时延能带来更好的用户体验。
请参考图3,其示出了本申请另一个实施例提供的NAT穿透方法的流程图。该方法可应用于图1所示的实施环境中。该方法可以包括以下几个步骤:
步骤301,第一主机通过第一NAT设备向第一服务器发送第一角色分配请求。
步骤302,第二主机通过第二NAT设备向第二服务器发送第二角色分配请求。
在本申请实施例中,第一主机部署在第一NAT设备创建的第一NAT网络中,第二主机部署在第二NAT设备创建的第二NAT网络中。第一主机对应的NAT类型即为第一NAT网络(或第一NAT设备)的NAT类型,第二主机对应的NAT类型即为第二NAT网络(或第二NAT设备)的NAT类型。
在一些可能的实施例中,第一NAT网络为多层NAT网络架构,也即第一NAT网络中包括多层相同或不同的NAT网络。此时,第一主机对应的NAT类型即为第一NAT网络中过滤规则最为严格的NAT类型。其中,按照过滤规则的严格程度逐渐升高排序,依次为全锥型NAT、受限型NAT、端口受限型NAT、对称型NAT。例如,第一NAT网络中包括全锥型NAT和端口受限型NAT,由于端口受限型NAT的过滤规则相较于全锥型NAT的过滤规则更为严格,因此第一主机对应的NAT类型为端口受限型NAT。类似地,第二NAT网络也可以是多层NAT网络架构,此处不再赘述。
第一角色分配请求用于请求为第一主机分配NAT穿透角色。第一角色分配请求中携带第一主机对应的NAT类型。第二角色分配请求用于请求为第二主机分配NAT穿透角色。第二角色分配请求中携带第二主机对应的NAT类型。
步骤303,第一服务器根据第一主机对应的NAT类型和第二主机对应的NAT类型,向第一主机发送第一角色分配信息,向第二主机发送第二角色分配信息。
第一角色分配信息用于指示第一主机的角色为端口预留方。第二角色分配信息用于指示第二主机的角色为端口探测方。
步骤303的介绍说明可参见上文实施例中针对步骤202的介绍说明,此处不再赘述。
步骤304,第一主机通过第一NAT设备向第二服务器发送第一打洞请求。
第一打洞请求中携带第一主机的外网地址。可选地,第一打洞请求中还携带第一主机对应的NAT类型。
步骤305,第二主机通过第二NAT设备向第二服务器发送第二打洞请求。
第二打洞请求中携带第二主机的外网地址。可选地,第二打洞请求中还携带第二主机对应的NAT类型。
步骤306,第二服务器向第一主机发送第二主机的外网地址,向第二主机发送第一主机的外网地址。
可选地,第二服务器对第一主机对应的NAT类型和第二主机对应的NAT类型进行验证,在验证通过之后,向第一主机发送第二主机的外网地址,向第二主机发送第一主机的外网地址。
需要说明的一点是,在本申请实施例中,对上述步骤301-303和步骤304-306的执行先后顺序不作限定,步骤301-303和步骤304-306可以同时执行,步骤301-303也可以在步骤304-306之后执行,步骤301-303还可以在步骤304-306之前执行,本申请实施例对此不作限定。
步骤307,第一主机通过第一NAT设备发送n个第一数据包,n为大于1的整数。
其中,n个第一数据包的目的地址均为第二主机的外网地址,且n个第一数据包的源地址各不相同。可选地,n个第一数据包的源IP地址相同,且源端口号为随机选择的不同值。通过上述方式,第一主机实现随机端口预留,在第一NAT设备上随机预留多个通信端口。
步骤308,第二主机根据第一主机的外网地址,通过第二NAT设备向第一主机发送m个第二数据包,m为大于1的整数。
其中,m个第二数据包的目的地址各不相同。可选地,m个第二数据包的目的IP地址相同,均为第一主机的外网IP地址,该m个第二数据包的目的端口号各不相同,为随机选择的不同值。通过上述方式,第二主机进行随机端口探测。
步骤309,第一主机接收第一NAT设备转发的目标第二数据包。
在本申请实施例中,m个第二数据包中的目标第二数据包被第一NAT网络中的第一NAT设备转发给第一主机,目标第二数据包是第二主机发送的m个第二数据包中的一个,目标第二数据包的目的地址与第一主机通过第一NAT设备发出的n个第一数据包中的任意一个第一数据包的源地址相同。
步骤310,第一主机在接收到目标第二数据包之后,通过第一NAT设备向第二主机发送连接请求包。
在本申请实施例中,连接请求包的源地址与目标第二数据包的目的地址相同。示例性地,假设目标第二数据包的目的地址为IP3:PORT3,则连接请求包的源地址也为IP3:PORT3。
连接请求包用于指示第一主机请求和第二主机建立直连传输链路。直连传输链路是指第一主机与第二主机直接进行P2P(peer-to-peer,点对点)数据传输的链路,传输途径中没有专门的中转服务器。
步骤311,第二主机通过第二NAT设备向第一主机发送连接响应包。
连接响应包用于指示第二主机接收到了第一主机发送的连接请求包,即第二主机同意和第一主机建立直连传输链路。连接响应包的源地址与连接请求包的目的地址相同。例如,连接请求包的目的地址为IP4:PORT1,则连接响应包的源地址也为IP4:PORT1。
对于上述步骤307-311中未详细说明的细节,可参见图2实施例,本实施例对此不再赘述。
综上所述,本申请实施例提供的技术方案中,通过第一主机和第二主机分别向第一服务器发送角色分配请求,使得第一服务器获取到第一主机和第二主机分别对应的NAT类型,并据此分配第一主机和第二主机的NAT穿透角色,确保了角色分配的准确性,进而确保后续NAT穿透的成功率。
示例性地,如图4所示,第一主机对应的NAT类型可以通过以下步骤确定(本申请实施例仅以确定第一主机对应的NAT类型为例,第二主机对应的NAT类型的确定过程与第一主机对应的NAT类型的确定过程相同或类似):
1、第一主机向服务器发送请求包;
该请求包用于请求获得第一主机的地址。
2、判断是否能接收到服务器发送的应答包;若否,则执行下述步骤3;若是,则执行下述步骤4;
3、确认不能通信;
4、判断请求包的源地址与服务器返回的地址是否相同;若是,则执行下述步骤5;若否,则执行下述步骤6;
5、确认不存在第一主机对应的第一NAT设备,并从下述步骤17开始执行;
6、确认存在第一主机对应的第一NAT设备,并从下述步骤7开始执行;
7、向服务器的第一地址发送第一请求;
第一请求用于请求服务器采用第二地址向第一主机发送第一应答包。可选地,第二地址与第一地址具有不同的IP地址,且具有不同的端口号。
8、判断是否能接收到服务器发送的第一应答包;若否,则执行下述步骤9;若是,则执行下述步骤16;
9、向服务器的至少两个地址发送第二请求;
第二请求用于请求服务器返回第一主机的外网地址。
10、判断服务器返回的外网地址是否存在不同;若是,则执行步骤11;若否,则执行步骤12;
11、确认第一主机对应的NAT类型为对称型NAT。
12、向服务器的第三地址发送第三请求;
第三请求用于请求服务器采用第四地址向第一主机发送第二应答包,第四地址与第三地址具有相同的IP地址和不同的端口号。
13、判断是否能接收到服务器发送的第二应答包;若是,则执行步骤14;若否,则执行步骤15;
14、确认第一主机对应的NAT类型为受限型NAT;
15、确认第一主机对应的NAT类型为端口受限型NAT;
16、确认第一主机对应的NAT类型为全锥形NAT;
17、向服务器的第五地址发送第四请求;
在本申请实施例中,第四请求用于请求服务器采用第六地址向第一主机发送第三应答包。
18、判断是否能收到服务器发送的第三应答包;若否,则执行步骤19;若是,则执行步骤20;
19、确认存在对称型防火墙;
20、确认不存在防火墙。
示例性地,第一主机建立UDP数据包,然后用这个数据包向服务器的IP1:PORT1发送数据包,要求服务器返回第一主机的地址。重复这个过程若干次。如果无法接收到服务器的回应,则说明第一主机无法进行UDP通信,可能是防火墙或NAT设备阻止UDP通信,即第一主机不能进行P2P传输。当第一主机能够接收到服务器的回应时,需要把服务器返回的第一主机的地址和第一主机的发包源地址比较。如果两者相同,则不存在第一NAT设备,否则第一主机需要做进一步的NAT类型检测。
检测第一NAT设备的类型是否为完全锥形NAT:第一主机建立UDP数据包,然后用这个数据包向服务器的IP1:PORT1发送数据包,要求服务器用IP2:PORT2响应第一主机的请求往回发一个数据包。重复这个过程若干次,如果每次都超时,无法接收到服务器的回应,则说明第一NAT设备的类型不是完全锥形NAT;如果能够接收到服务器从IP2:PORT2返回的应答UDP包,则说明第一NAT设备的类型是完全锥形NAT,第一主机能够进行P2P传输。
检测第一NAT设备的类型是否为对称型NAT:第一主机建立UDP数据包,然后用这个数据包向服务器的IP1:PORT1发送数据包,要求服务器返回第一主机的地址;第一主机建立另一个UDP包向服务器的IP2:PORT2发送数据包,要求服务器返回第一主机的地址。比较上面两个过程从服务器返回的第一主机的地址,如果两个过程返回的地址有一对不同则说明第一NAT设备的类型是对称型NAT。
检测第一NAT设备的类型是受限锥形NAT还是端口受限型NAT:第一主机建立UDP数据包,然后用这个数据包向服务器的IP1:PORT1发送数据包,要求服务器用一个不同的端口发送UDP数据包响应第一主机,如果无法接收到服务器的回应,则说明第一NAT设备的类型是端口受限形NAT;如果能够收到服务器的回应,则说明第一NAT设备的类型是受限锥形NAT。
示例性地,如图5所示,以第一主机对应的NAT类型为对称型NAT、第二主机对应的NAT类型为端口受限型NAT、第一主机的内网地址为IP1:PORT1、第二主机的内网地址为IP2:PORT1为例,对本申请技术方案进行介绍说明。第一主机与第二主机的传输链路建立过程可以如下所示:
1、第一主机通过第一NAT设备向打洞服务器发送第一打洞请求。
该第一打洞请求的内网源地址为第一主机的内网地址IP1:PORT3,目的地址为打洞服务器的外网地址。第一NAT设备将第一主机的内网地址IP1:PORT3映射为第一主机的外网地址IP3:PORT2,然后向打洞服务器转发该第一打洞请求。可选地,第一打洞请求中携带第一主机对应的NAT类型。
2、第二主机通过第二NAT设备向打洞服务器发送第二打洞请求。
该第二打洞请求的内网源地址为第二主机的内网地址IP2:PORT2,目的地址为打洞服务器的外网地址。第二NAT设备将第二主机的内网地址IP2:PORT2映射为第二主机的外网地址IP4:PORT1,然后向打洞服务器转发该第二打洞请求。可选地,第二打洞请求中携带第二主机对应的NAT类型。
3、打洞服务器将第一主机的外网地址IP3:PORT1发送给第二主机,将第二主机的外网地址IP4:PORT1发送给第一主机。
4、第一主机向角色决策服务器发送第一主机对应的NAT类型。
5、第二主机向角色决策服务器发送第二主机对应的NAT类型。
6、角色决策服务器根据第一主机对应的NAT类型和第二主机对应的NAT类型,向第一主机发送第一角色分配信息,向第二主机发送第二角色分配信息。
7、第一主机按照第一角色分配信息,通过第一NAT设备发送多个第一数据包。
例如,第一主机通过第一NAT设备向外网发送3个第一数据包,这3个第一数据包的内网源地址分别为IP1:PORT3、IP1:PORT2和IP1:PORT4,目的地址均为IP4:PORT1。第一NAT设备将上述3个内网源地址分别映射为外网源地址,假设依次为IP3:PORT2、IP3:PORT3和IP3:PORT5,然后向目的地址IP4:PORT1发送该3个第一数据包。
8、第二主机等待一段时间后,通过第二NAT设备发送多个第二数据包。
例如,第二主机向第二NAT设备发送了5个第二数据包,这5个第二数据包的内网源地址都为IP2:PORT2,目的地址分别为IP3:PORT1、IP3:PORT3、IP3:PORT4、IP3:PORT6和IP3:PORT8。第二NAT设备将上述5个第二数据包的内网源地址分别映射为外网源地址IP4:PORT1,然后分别向其对应的目的地址发送。
9、第一NAT设备在接收到目的地址为IP3:PORT3的第二数据包之后,将该第二数据包转发给第一主机。
10、第一主机接收到该第二数据包后,通过第一NAT设备向第二主机发送连接请求包。
连接请求包的内网源地址为IP1:PORT2,目的地址为IP4:PORT1。第一NAT设备将该内网源地址IP1:PORT2映射为外网源地址IP3:PORT3后,向目的地址IP4:PORT1发送该连接请求包。
11、第二NAT设备在接收到该连接请求包后,将该连接请求包转发给第二主机。
12、第二主机接收到该连接请求包后,通过第二NAT设备向第一主机发送连接响应包。
连接响应包的内网源地址为IP2:PORT2,目的地址为IP3:PORT3。第二NAT设备将该内网源地址IP2:PORT2映射为外网源地址IP4:PORT1后,向目的地址为IP3:PORT3发送该连接响应包。
13、第一NAT设备接收到该连接响应包后,将该连接响应包发送给第一主机。第一主机接收到该连接响应包后,第一主机和第二主机之间建立P2P链路(也即直连链路),第一主机和第二主机之间可以通过该P2P链路传输业务数据,如VVOIP音视频数据。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图6,其示出了本申请一个实施例提供的NAT穿透装置的框图。该装置具有实现上述第一主机侧的方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是图1中的第一主机10,也可以设置在第一主机10上。该装置600可以包括:信息获取模块610、地址获取模块620、数据包发送模块630、数据包接收模块640和链路建立模块650。
所述信息获取模块610,用于获取第一角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方。
所述地址获取模块620,用于获取第二NAT网络中的第二主机的外网地址。
所述数据包发送模块630,用于通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n为大于1的整数。
所述数据包接收模块640,用于接收所述第一NAT设备转发的来自所述第二主机的第二数据包,所述第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同。
所述链路建立模块650,用于在接收到所述第二数据包之后,与所述第二主机之间建立传输链路。
综上所述,本申请实施例提供的技术方案中,通过服务器根据两个内网主机分别对应的NAT类型,为这两个内网主机分配NAT穿透角色,端口预留方向外网发送多个第一数据包,实现在端口预留方对应的NAT设备上预留下多个通信端口,端口探测方向端口预留方发送多个第二数据包,当某一个第二数据包的目的地址与预留的任意一个通信端口相同时,NAT穿透成功,这两个内网主机之间即可建立传输链路。本申请实施例提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。针对端口受限型NAT和对称型NAT之间的内网主机互通,采用本申请提供的上述技术方案,NAT穿透的成功率也能够有效提升。
可选地,所述n个第一数据包的源地址各不相同。
可选地,所述n个第一数据包的源IP地址相同,且源端口号为随机选择的不同值。
可选地,所述第一数据包的生存时间值TTL小于预设阈值。
可选地,所述信息获取模块610,用于:
通过所述第一NAT设备向服务器发送第一角色分配请求,所述第一角色分配请求中携带所述第一主机对应的NAT类型;
接收所述服务器发送的所述第一角色分配信息。
可选地,如图7所示,所述装置600还包括:请求发送模块660和类型确定模块670。
所述请求发送模块660,用于在所述第一主机确认存在所述第一NAT设备的情况下,向所述服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第一主机发送第一应答包。
所述请求发送模块660,还用于当接收不到所述服务器发送的所述第一应答包时,向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第一主机的外网地址。
所述类型确定模块670,用于当所述服务器返回的所述第一主机的外网地址中存在至少两个不同时,确认所述第一主机对应的NAT类型为对称型NAT。
可选地,所述请求发送模块660,还用于当所述服务器返回的所述第一主机的外网地址相同时,向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第一主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号。
所述类型确定模块670,还用于当接收到所述服务器发送的所述第二应答包时,确认所述第一主机对应的NAT类型为受限型NAT。
所述类型确定模块670,还用于当接收不到所述服务器发送的所述第二应答包时,确认所述第一主机对应的NAT类型为端口受限型NAT。
可选地,所述链路建立模块650,用于:
通过所述第一NAT设备向所述第二主机发送连接请求包,所述连接请求包的源地址与所述目标第一数据包的目的地址相同;
接收来自所述第二主机的连接响应包。
请参考图8,其示出了本申请另一个实施例提供的NAT穿透装置的框图。该装置具有实现上述第二主机侧的方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是图1中的第二主机20,也可以设置在第二主机20上。该装置800可以包括:信息获取模块810、地址获取模块820、数据包发送模块830和链路建立模块840。
所述信息获取模块810,用于获取第二角色分配信息,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方。
所述地址获取模块820,用于获取第一NAT网络中的第一主机的外网地址。
所述数据包发送模块830,用于根据所述第一主机的外网地址,通过所述第二NAT设备向所述第一主机发送m个第二数据包,所述m为大于1的整数。
所述链路建立模块840,用于与所述第一主机之间建立传输链路。
综上所述,本申请实施例提供的技术方案中,通过服务器根据两个内网主机分别对应的NAT类型,为这两个内网主机分配NAT穿透角色,端口预留方向外网发送多个第一数据包,实现在端口预留方对应的NAT设备上预留下多个通信端口,端口探测方向端口预留方发送多个第二数据包,当某一个第二数据包的目的地址与预留的任意一个通信端口相同时,NAT穿透成功,这两个内网主机之间即可建立传输链路。本申请实施例提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。针对端口受限型NAT和对称型NAT之间的内网主机互通,采用本申请提供的上述技术方案,NAT穿透的成功率也能够有效提升。
可选地,所述m个第二数据包的目的地址各不相同。
可选地,所述m个第二数据包的目的IP地址相同,且目的端口号为随机选择的不同值。
可选地,所述信息获取模块810,用于:
通过所述第二NAT设备向服务器发送第二角色分配请求,所述第二角色分配请求中携带所述第二主机对应的NAT类型;
接收所述服务器发送的所述第二角色分配信息。
可选地,如图9所示,所述装置800还包括:请求发送模块850和类型确定模块860。
所述请求发送模块850,用于在所述第二主机确认存在所述第二NAT设备的情况下,向所述服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第二主机发送第一应答包。
所述请求发送模块850,还用于当接收不到所述服务器发送的所述第一应答包时,向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第二主机的外网地址。
所述类型确定模块860,用于当所述服务器返回的所述第二主机的外网地址中存在至少两个不同时,确认所述第二主机对应的NAT类型为对称型NAT。
可选地,所述请求发送模块850,还用于当所述服务器返回的所述第二主机的外网地址相同时,向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第二主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号。
所述类型确定模块860,还用于当接收到所述服务器发送的所述第二应答包时,确认所述第二主机对应的NAT类型为受限型NAT。
所述类型确定模块860,还用于当接收不到所述服务器发送的所述第二应答包时,确认所述第二主机对应的NAT类型为端口受限型NAT。
可选地,所述链路建立模块840,用于:
接收所述第一主机在接收到所述目标第二数据包之后发送的连接请求包,所述连接请求包的源地址与所述目标第二数据包的目的地址相同;
向所述第一主机发送连接响应包。
请参考图10,其示出了本申请另一个实施例提供的NAT穿透装置的框图。该装置具有实现上述第一服务器侧的方法示例的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是图1中的第一服务器30,也可以设置在第一服务器30上。该装置1000可以包括:类型获取模块1010和信息发送模块1020。
所述类型获取模块1010,用于获取第一主机对应的NAT类型和第二主机对应的NAT类型,所述第一主机部署在第一NAT设备创建的第一NAT网络中,所述第二主机部署在第二NAT设备创建的第二NAT网络中。
所述信息发送模块1020,用于根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方。
其中,所述端口预留方用于向外发送n个第一数据包,所述n个第一数据包的目的地址为所述端口探测方的外网地址,所述n为大于1的整数;所述端口探测方用于根据所述端口预留方的外网地址,向所述端口预留方发送m个第二数据包,所述m为大于1的整数;所述端口预留方还用于在接收到来自所述端口探测方的所述第二数据包之后,与所述端口探测方之间建立传输链路。
综上所述,本申请实施例提供的技术方案中,通过服务器根据两个内网主机分别对应的NAT类型,为这两个内网主机分配NAT穿透角色,端口预留方向外网发送多个第一数据包,实现在端口预留方对应的NAT设备上预留下多个通信端口,端口探测方向端口预留方发送多个第二数据包,当某一个第二数据包的目的地址与预留的任意一个通信端口相同时,NAT穿透成功,这两个内网主机之间即可建立传输链路。本申请实施例提供的多端口预留和多端口探测的方式,有助于降低端口探测时的难度,提升NAT穿透的成功率。针对端口受限型NAT和对称型NAT之间的内网主机互通,采用本申请提供的上述技术方案,NAT穿透的成功率也能够有效提升。
可选地,所述信息发送模块1020,用于:
当所述第一主机对应的NAT类型为对称型NAT,且所述第二主机对应的NAT类型为端口受限型NAT时,向所述第一主机发送所述第一角色分配信息,以及向所述第二主机发送所述第二角色分配信息。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内容结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图11,其示出了本申请一个实施例提供的计算机设备1100的结构框图。该计算机设备1100是指具备计算和处理能力的电子设备,例如PC、服务器、手机、平板电脑等。该计算机设备1100可用于实施上述实施例中提供的NAT穿透方法。
通常,计算机设备1100包括有:处理器1101和存储器1102。
处理器1101可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1101可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(FieldProgrammable Gate Array,现场可编程门阵列)、PLA(ProgrammableLogic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1101也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1101可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1101还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1102可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1102还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1102中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1101所执行以实现本申请中方法实施例提供的NAT穿透方法。
在一些实施例中,计算机设备1100还可选包括有:外围设备接口1103和至少一个外围设备。处理器1101、存储器1102和外围设备接口1103之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1103相连。具体地,外围设备可以包括:显示屏1104、音频电路1105、通信接口1106和电源1107中的至少一种。
本领域技术人员可以理解,图11中示出的结构并不构成对计算机设备1100的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例中实施例中,还提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集。所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述NAT穿透方法。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被计算机设备的处理器执行时实现上述NAT穿透方法。
可选地,上述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,当该计算机程序产品被执行时,其用于实现上述NAT穿透方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,本文中描述的步骤编号,仅示例性示出了步骤间的一种可能的执行先后顺序,在一些其它实施例中,上述步骤也可以不按照编号顺序来执行,如两个不同编号的步骤同时执行,或者两个不同编号的步骤按照与图示相反的顺序执行,本申请实施例对此不作限定。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (11)

1.一种NAT穿透方法,其特征在于,应用于第一主机中,所述第一主机部署在第一NAT设备构建的第一NAT网络中,所述方法包括:
在所述第一主机确认存在所述第一NAT设备的情况下,向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第一主机发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;
若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第一主机的外网地址;
若所述服务器返回的所述第一主机的外网地址中存在至少两个不同,则确认所述第一主机对应的NAT类型为对称型NAT;
若所述服务器返回的所述第一主机的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第一主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;
若接收到所述服务器发送的所述第二应答包,则确认所述第一主机对应的NAT类型为受限型NAT;
若接收不到所述服务器发送的所述第二应答包,则确认所述第一主机对应的NAT类型为端口受限型NAT;
通过所述第一NAT设备向第一服务器发送第一角色分配请求,所述第一角色分配请求中携带所述第一主机对应的NAT类型;
接收所述第一服务器发送的第一角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方;
通过所述第一NAT设备向第二服务器发送第一打洞请求,所述第一打洞请求中携带所述第一主机的外网地址和所述第一主机对应的NAT类型;
接收所述第二服务器发送的第二NAT网络中的第二主机的外网地址,所述第二NAT网络是第二NAT设备构建的;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;
通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;
接收所述第一NAT设备转发的来自所述第二主机的目标第二数据包,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;其中,所述目标第二数据包是所述第二主机通过所述第二NAT设备向所述第一主机发送的m个第二数据包中的一个,所述m个第二数据包的目的IP地址相同均为所述第一主机的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;
在接收到所述第二数据包之后,与所述第二主机之间建立传输链路。
2.根据权利要求1所述的方法,其特征在于,所述与所述第二主机之间建立传输链路,包括:
通过所述第一NAT设备向所述第二主机发送连接请求包,所述连接请求包的源地址与所述目标第二数据包的目的地址相同;
接收来自所述第二主机的连接响应包。
3.一种NAT穿透方法,其特征在于,应用于第二主机中,所述第二主机部署在第二NAT设备构建的第二NAT网络中,所述方法包括:
在所述第二主机确认存在所述第二NAT设备的情况下,向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第二主机发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;
若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第二主机的外网地址;
若所述服务器返回的所述第二主机的外网地址中存在至少两个不同,则确认所述第二主机对应的NAT类型为对称型NAT;
若所述服务器返回的所述第二主机的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第二主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;
若接收到所述服务器发送的所述第二应答包,则确认所述第二主机对应的NAT类型为受限型NAT;
若接收不到所述服务器发送的所述第二应答包,则确认所述第二主机对应的NAT类型为端口受限型NAT;
通过所述第二NAT设备向第一服务器发送第二角色分配请求,所述第二角色分配请求中携带所述第二主机对应的NAT类型;
接收所述第一服务器发送的第二角色分配信息,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
通过所述第二NAT设备向第二服务器发送第二打洞请求,所述第二打洞请求中携带所述第二主机的外网地址和所述第二主机对应的NAT类型;
接收所述第二服务器发送的第一NAT网络中的第一主机的外网地址,所述第一NAT网络是第一NAT设备构建的;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;所述第一主机通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;
根据所述第一主机的外网地址,通过所述第二NAT设备向所述第一主机发送m个第二数据包,所述m个第二数据包的目的IP地址相同均为所述第一主机的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;其中,所述m个第二数据包中的目标第二数据包被所述第一NAT设备转发给所述第一主机,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
与所述第一主机之间建立传输链路。
4.根据权利要求3所述的方法,其特征在于,所述与所述第一主机之间建立传输链路,包括:
接收所述第一主机在接收到所述目标第二数据包之后发送的连接请求包,所述连接请求包的源地址与所述目标第二数据包的目的地址相同;
向所述第一主机发送连接响应包。
5.一种NAT穿透方法,其特征在于,应用于第一服务器中,所述方法包括:
接收第一主机通过第一NAT设备发送的第一角色分配请求,所述第一角色分配请求中携带所述第一主机对应的NAT类型,所述第一主机部署在所述第一NAT设备创建的第一NAT网络中;
接收第二主机通过第二NAT设备发送的第二角色分配请求,所述第二角色分配请求中携带所述第二主机对应的NAT类型,所述第二主机部署在所述第二NAT设备创建的第二NAT网络中;
根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
其中,所述端口预留方用于向外发送n个第一数据包,所述n个第一数据包的目的地址为所述端口探测方的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;所述端口探测方用于根据所述端口预留方的外网地址,向所述端口预留方发送m个第二数据包,所述m个第二数据包的目的IP地址相同均为所述端口预留方的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;所述端口预留方还用于在接收到来自所述端口探测方的目标第二数据包之后,与所述端口探测方之间建立传输链路,所述目标第二数据包是所述端口探测方发送的所述m个第二数据包中的一个,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
所述第一主机在获取自身角色为所述端口预留方之后,通过所述第一NAT设备向第二服务器发送第一打洞请求,所述第一打洞请求中携带所述第一主机的外网地址和所述第一主机对应的NAT类型;所述第二主机在获取自身角色为所述端口探测方之后,通过所述第二NAT设备向所述第二服务器发送第二打洞请求,所述第二打洞请求中携带所述第二主机的外网地址和所述第二主机对应的NAT类型;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;
所述第一主机和/或所述第二主机确定自身对应的NAT类型的流程如下:向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向主机自身发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述主机自身的外网地址;若所述服务器返回的所述主机自身的外网地址中存在至少两个不同,则确认所述主机自身对应的NAT类型为对称型NAT;若所述服务器返回的所述主机自身的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述主机自身发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;若接收到所述服务器发送的所述第二应答包,则确认所述主机自身对应的NAT类型为受限型NAT;若接收不到所述服务器发送的所述第二应答包,则确认所述主机自身对应的NAT类型为端口受限型NAT。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,包括:
若所述第一主机对应的NAT类型为对称型NAT,且所述第二主机对应的NAT类型为端口受限型NAT,则向所述第一主机发送所述第一角色分配信息,以及向所述第二主机发送所述第二角色分配信息。
7.一种NAT穿透装置,其特征在于,应用于第一主机中,所述第一主机部署在第一NAT设备构建的第一NAT网络中,所述装置包括:
请求发送模块,用于在所述第一主机确认存在所述第一NAT设备的情况下,向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第一主机发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;
所述请求发送模块,还用于若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第一主机的外网地址;
类型确定模块,用于若所述服务器返回的所述第一主机的外网地址中存在至少两个不同,则确认所述第一主机对应的NAT类型为对称型NAT;
所述请求发送模块,还用于若所述服务器返回的所述第一主机的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第一主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;
所述类型确定模块,还用于若接收到所述服务器发送的所述第二应答包,则确认所述第一主机对应的NAT类型为受限型NAT;
所述类型确定模块,还用于若接收不到所述服务器发送的所述第二应答包,则确认所述第一主机对应的NAT类型为端口受限型NAT;
信息获取模块,用于通过所述第一NAT设备向第一服务器发送第一角色分配请求,所述第一角色分配请求中携带所述第一主机对应的NAT类型;接收所述第一服务器发送的第一角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方;
地址获取模块,用于通过所述第一NAT设备向第二服务器发送第一打洞请求,所述第一打洞请求中携带所述第一主机的外网地址和所述第一主机对应的NAT类型;接收所述第二服务器发送的第二NAT网络中的第二主机的外网地址,所述第二NAT网络是第二NAT设备构建的;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;
数据包发送模块,用于通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;
数据包接收模块,用于接收所述第一NAT设备转发的来自所述第二主机的目标第二数据包,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;其中,所述目标第二数据包是所述第二主机通过所述第二NAT设备向所述第一主机发送的m个第二数据包中的一个,所述m个第二数据包的目的IP地址相同均为所述第一主机的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;
链路建立模块,用于在接收到所述第二数据包之后,与所述第二主机之间建立传输链路。
8.一种NAT穿透装置,其特征在于,应用于第二主机中,所述第二主机部署在第二NAT设备构建的第二NAT网络中,所述装置包括:
请求发送模块,用于在所述第二主机确认存在所述第二NAT设备的情况下,向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向所述第二主机发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;
所述请求发送模块,还用于若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述第二主机的外网地址;
类型确定模块,用于若所述服务器返回的所述第二主机的外网地址中存在至少两个不同,则确认所述第二主机对应的NAT类型为对称型NAT;
所述请求发送模块,还用于若所述服务器返回的所述第二主机的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述第二主机发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;
所述类型确定模块,还用于若接收到所述服务器发送的所述第二应答包,则确认所述第二主机对应的NAT类型为受限型NAT;
所述类型确定模块,还用于若接收不到所述服务器发送的所述第二应答包,则确认所述第二主机对应的NAT类型为端口受限型NAT;
信息获取模块,用于通过所述第二NAT设备向第一服务器发送第二角色分配请求,所述第二角色分配请求中携带所述第二主机对应的NAT类型;接收所述第一服务器发送的第二角色分配信息,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
地址获取模块,用于通过所述第二NAT设备向第二服务器发送第二打洞请求,所述第二打洞请求中携带所述第二主机的外网地址和所述第二主机对应的NAT类型;接收所述第二服务器发送的第一NAT网络中的第一主机的外网地址,所述第一NAT网络是第一NAT设备构建的;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;所述第一主机通过所述第一NAT设备发送n个第一数据包,所述n个第一数据包的目的地址为所述第二主机的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;
数据包发送模块,用于根据所述第一主机的外网地址,通过所述第二NAT设备向所述第一主机发送m个第二数据包,所述m个第二数据包的目的IP地址相同均为所述第一主机的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;其中,所述m个第二数据包中的目标第二数据包被所述第一NAT设备转发给所述第一主机,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
链路建立模块,用于与所述第一主机之间建立传输链路。
9.一种NAT穿透装置,其特征在于,应用于第一服务器中,所述装置包括:
类型获取模块,用于接收第一主机通过第一NAT设备发送的第一角色分配请求,所述第一角色分配请求中携带所述第一主机对应的NAT类型,所述第一主机部署在所述第一NAT设备创建的第一NAT网络中;
所述类型获取模块,还用于接收第二主机通过第二NAT设备发送的第二角色分配请求,所述第二角色分配请求中携带所述第二主机对应的NAT类型,所述第二主机部署在所述第二NAT设备创建的第二NAT网络中;
信息发送模块,用于根据所述第一主机对应的NAT类型和所述第二主机对应的NAT类型,向所述第一主机发送第一角色分配信息,以及向所述第二主机发送第二角色分配信息,所述第一角色分配信息用于指示所述第一主机的角色为端口预留方,所述第二角色分配信息用于指示所述第二主机的角色为端口探测方;
其中,所述端口预留方用于向外发送n个第一数据包,所述n个第一数据包的目的地址为所述端口探测方的外网地址,所述n个第一数据包的源IP地址相同,且所述n个第一数据包的源端口号各不相同,所述n为大于1的整数;所述端口探测方用于根据所述端口预留方的外网地址,向所述端口预留方发送m个第二数据包,所述m个第二数据包的目的IP地址相同均为所述端口预留方的外网IP地址,且所述m个第二数据包的目的端口号各不相同,所述m为大于1的整数;所述端口预留方还用于在接收到来自所述端口探测方的目标第二数据包之后,与所述端口探测方之间建立传输链路,所述目标第二数据包是所述端口探测方发送的所述m个第二数据包中的一个,所述目标第二数据包的目的地址与所述n个第一数据包中的任意一个第一数据包的源地址相同;
所述第一主机在获取自身角色为所述端口预留方之后,通过所述第一NAT设备向第二服务器发送第一打洞请求,所述第一打洞请求中携带所述第一主机的外网地址和所述第一主机对应的NAT类型;所述第二主机在获取自身角色为所述端口探测方之后,通过所述第二NAT设备向所述第二服务器发送第二打洞请求,所述第二打洞请求中携带所述第二主机的外网地址和所述第二主机对应的NAT类型;其中,所述第二服务器用于对所述第一主机对应的NAT类型和所述第二主机对应的NAT类型进行验证,在验证通过之后,向所述第一主机发送所述第二主机的外网地址,向所述第二主机发送所述第一主机的外网地址;
所述第一主机和/或所述第二主机确定自身对应的NAT类型的流程如下:向服务器的第一地址发送第一请求,所述第一请求用于请求所述服务器采用第二地址向主机自身发送第一应答包;其中,所述第二地址和所述第一地址具有不同的IP地址,且具有不同的端口号;若接收不到所述服务器发送的所述第一应答包,则向所述服务器的至少两个地址发送第二请求,所述第二请求用于请求所述服务器返回所述主机自身的外网地址;若所述服务器返回的所述主机自身的外网地址中存在至少两个不同,则确认所述主机自身对应的NAT类型为对称型NAT;若所述服务器返回的所述主机自身的外网地址相同,则向所述服务器的第三地址发送第三请求,所述第三请求用于请求所述服务器采用第四地址向所述主机自身发送第二应答包,所述第四地址与所述第三地址具有相同的IP地址和不同的端口号;若接收到所述服务器发送的所述第二应答包,则确认所述主机自身对应的NAT类型为受限型NAT;若接收不到所述服务器发送的所述第二应答包,则确认所述主机自身对应的NAT类型为端口受限型NAT。
10.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至2任一项所述的方法,或者实现如权利要求3至4任一项所述的方法,或者实现如权利要求5至6任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至2任一项所述的方法,或者实现如权利要求3至4任一项所述的方法,或者实现如权利要求5至6任一项所述的方法。
CN201910193490.4A 2019-03-14 2019-03-14 Nat穿透方法、装置、设备及存储介质 Active CN109831547B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910193490.4A CN109831547B (zh) 2019-03-14 2019-03-14 Nat穿透方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910193490.4A CN109831547B (zh) 2019-03-14 2019-03-14 Nat穿透方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN109831547A CN109831547A (zh) 2019-05-31
CN109831547B true CN109831547B (zh) 2022-02-22

Family

ID=66868982

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910193490.4A Active CN109831547B (zh) 2019-03-14 2019-03-14 Nat穿透方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN109831547B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110266828A (zh) * 2019-06-11 2019-09-20 华为技术有限公司 一种建立端到端网络连接的方法、装置及网络系统
CN112134826B (zh) * 2019-06-24 2022-05-13 华为技术有限公司 通信方法,计算机设备和计算机可读存储介质
CN112532757B (zh) 2019-09-19 2023-11-14 华为技术有限公司 一种nat穿越的方法、设备和系统
CN111193813B (zh) * 2019-10-24 2021-07-20 腾讯科技(深圳)有限公司 确定nat类型的测试请求处理方法、装置和计算机设备
CN113067911B (zh) * 2020-01-02 2023-06-30 中国移动通信有限公司研究院 一种nat穿越方法、装置、电子设备和存储介质
CN111315037B (zh) * 2020-02-17 2021-08-24 腾讯科技(深圳)有限公司 通信链路建立方法、装置、计算机设备及存储介质
CN111314481B (zh) * 2020-02-27 2021-08-24 腾讯科技(深圳)有限公司 一种数据传输方法、装置、设备以及可读存储介质
CN111405052A (zh) * 2020-03-20 2020-07-10 深圳市网心科技有限公司 基于端口预测的p2p穿透方法、电子设备及介质
CN112019641B (zh) * 2020-10-19 2021-01-15 腾讯科技(深圳)有限公司 数据传输方法和装置
CN112437169B (zh) * 2020-11-17 2022-10-25 郑炳立 一种nat穿透方法及系统
CN112887187B (zh) * 2021-01-19 2022-09-06 海尔数字科技(青岛)有限公司 一种设备间通信建立方法、系统、装置、设备及介质
CN113489810B (zh) * 2021-05-31 2023-03-24 普联国际有限公司 一种对称型nat穿透方法、装置、存储介质、设备及系统
CN115022279B (zh) * 2022-06-02 2024-04-16 京东科技信息技术有限公司 内网穿透方法和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102196057A (zh) * 2010-03-03 2011-09-21 腾讯科技(深圳)有限公司 一种确定nat类型的方法及装置
CN102710807A (zh) * 2012-05-29 2012-10-03 北京中视里程科技有限公司 一种nat穿越方法
US9160794B2 (en) * 2008-12-04 2015-10-13 Microsoft Technology Licensing, Llc Network address translators (NAT) type detection techniques
CN105847343A (zh) * 2016-03-21 2016-08-10 福建星网锐捷通讯股份有限公司 用于点对点传输的公网信息探测方法、装置及系统
CN106210092A (zh) * 2016-07-19 2016-12-07 天彩电子(深圳)有限公司 一种融合upnp及stun的p2p穿越方法及其系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101267393B (zh) * 2008-05-13 2010-09-01 腾讯科技(深圳)有限公司 即时通信系统中减少被叫等待时间的方法和系统
CN101599992A (zh) * 2009-05-27 2009-12-09 南京欣网视讯科技股份有限公司 基于sip的p2pnat穿越解决方案
CN107580081A (zh) * 2017-09-18 2018-01-12 北京奇艺世纪科技有限公司 一种nat穿透方法及装置
CN108540589A (zh) * 2018-03-23 2018-09-14 西安电子科技大学 一种用于sip通信系统的网络穿越方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9160794B2 (en) * 2008-12-04 2015-10-13 Microsoft Technology Licensing, Llc Network address translators (NAT) type detection techniques
CN102196057A (zh) * 2010-03-03 2011-09-21 腾讯科技(深圳)有限公司 一种确定nat类型的方法及装置
CN102710807A (zh) * 2012-05-29 2012-10-03 北京中视里程科技有限公司 一种nat穿越方法
CN105847343A (zh) * 2016-03-21 2016-08-10 福建星网锐捷通讯股份有限公司 用于点对点传输的公网信息探测方法、装置及系统
CN106210092A (zh) * 2016-07-19 2016-12-07 天彩电子(深圳)有限公司 一种融合upnp及stun的p2p穿越方法及其系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于探测对Symmetric NAT与端口受限NAT的穿透方案;王勇等;《计算机应用》;20060430;第26卷(第4期);正文第3.1节 *
王勇等.基于探测对Symmetric NAT与端口受限NAT的穿透方案.《计算机应用》.2006,第26卷(第4期), *

Also Published As

Publication number Publication date
CN109831547A (zh) 2019-05-31

Similar Documents

Publication Publication Date Title
CN109831547B (zh) Nat穿透方法、装置、设备及存储介质
EP3815328B1 (en) Scalable sockets for quic
US9450855B2 (en) Message routing mechanism for communication networks
US10212126B2 (en) System for mediating connection
KR20100019420A (ko) 에지 라우팅을 갖는 피어-투-피어 협업 시스템
CN112040030B (zh) 报文传输方法、装置、计算机设备及存储介质
CN111600968B (zh) P2p网络中nat打洞方法、装置、设备及可读存储介质
CN112333298A (zh) 报文传输方法、装置、计算机设备及存储介质
CN112351115B (zh) 对称型nat设备的端口预测方法及装置
CN105991442B (zh) 报文转发方法及装置
CN115914164A (zh) 一种隧道连接方法、装置、电子设备和存储介质
CN112398845B (zh) 数据传输方法、数据传输装置、系统及电子设备
CN115022279B (zh) 内网穿透方法和装置
CN114598532B (zh) 连接建立方法、装置、电子设备和存储介质
CN111416851A (zh) 在多个负载均衡器之间进行会话同步的方法和负载均衡器
CN114172815B (zh) 行为流量传输方法、装置、计算机设备和计算机可读存储介质
CN115022281A (zh) 一种nat穿透的方法、客户端及系统
CN114465750B (zh) 网络拓扑混淆虚拟通路创建方法、装置、终端及系统
CN112039712B (zh) 在云服务器上进行卸载的方法、控制装置、存储介质
CN112019641B (zh) 数据传输方法和装置
CN113301183A (zh) 网络连通性的探测方法及装置、存储介质、电子装置
CN111935333B (zh) Nat类型的确定方法、设备、系统和存储介质
CN113489810B (zh) 一种对称型nat穿透方法、装置、存储介质、设备及系统
CN115022280B (zh) 一种nat探测的方法、客户端及系统
CN114095470A (zh) 区块链节点的上链方法、装置以及区块链节点

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant