一种NAT穿透方法、装置、设备及存储介质与流程

文档序号:16631000发布日期:2019-01-16 06:34阅读:297来源:国知局
一种NAT穿透方法、装置、设备及存储介质与流程

本发明涉及计算机技术领域,特别涉及一种nat穿透方法、装置、设备及计算机可读存储介质。



背景技术:

随着计算机网络的快速发展和广泛普及,当前的internet面临两大问题,即可用ip地址的短缺和路由表的不断增大,这使得众多用户的接入出现困难。使用nat技术可以使一个机构内的所有用户通过有限数量的合法ip地址访问internet,从而节省了internet上的合法ip地址;另一方面,通过地址转换,可以隐藏内网主机的真实ip地址,从而提高网络的安全性。

但是,与此同时,由于隐藏了内网主机的真实ip地址,因此处于不同网络中的主机设备在进行通信之前需要进行nat穿透。现有技术中,在通信双方的nat设备分别预测出自己的映射端口号并发送给网关服务器之后,需要向对方发送包含有对方映射端口号的打洞包,以便自己的nat设备记录对方的映射端口号以使得通信双方的nat设备实现nat穿透。但是,当前的一些nat设备设置有防火墙,防火墙的存在使得打洞包在到达对方的防火墙时产生副作用,即使有效地预测出映射端口号,防火墙会使得实际映射端口号和预测出的映射端口号不一致,进而导致nat穿透失败。

因此,如何提高nat设备的穿透率是本领域技术人员目前需要解决的技术问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种nat穿透方法,能够提高nat设备的穿透率;本发明的另一目的是提供一种nat穿透装置、设备及计算机可读存储介质,均具有上述有益效果。

为解决上述技术问题,本发明提供一种nat穿透方法,包括:

将第一nat设备的第一预测端口号发送给网关服务器并通过所述网关服务器获取第二nat设备的第二预测端口号;

获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于所述网段数的ttl包;

通过第一nat设备发送包括所述ttl包和所述第二预测端口号的打洞包,以便所述第一nat设备记录所述第二预测端口号,且按照预设规则在所述打洞包到达所述第二nat设备之前将所述打洞包丢弃。

优选地,获取所述第一nat设备的第一预测端口号的方法具体包括:

当接收到nat穿透指令时,检测所述第一nat设备的端口类型;

若所述端口类型为主机端口,则按照第一预设规则为所述第一nat设备设置对应的预测端口号;其中,所述主机端口表征所述第一nat设备访问不同外网设备时使用不同的映射端口号,且所述不同的映射端口号中存在与主机端口号相同的映射端口号;

若所述端口类型为固定端口,则按照第二预设规则从对应的网关服务器中查找与所述第一nat设备对应的预测端口号;其中,所述固定端口表征所述第一nat设备访问不同外网设备时使用相同的映射端口号。

优选地,在所述通过第一nat设备发送包括所述ttl包和所述第二预测端口号的打洞包,以便所述第一nat设备记录所述第二预测端口号之后,进一步包括:

向所述第二nat设备发送连通测试包。

优选地,在经过一个网段时,控制所述ttl包的初始值减少n,其中,n为大于1的正整数。

优选地,当所述打洞包被丢弃时,接收由丢弃所述打洞包对应的nat设备发送的提示信息。

优选地,所述提示信息具体为icmp报文。

为解决上述技术问题,本发明还提供一种nat穿透装置,包括:

获取模块,用于将第一nat设备的第一预测端口号发送给网关服务器并通过所述网关服务器获取第二nat设备的第二预测端口号;

设置模块,用于获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于所述网段数的ttl包;

发送模块,用于通过第一nat设备发送包括所述ttl包和所述第二预测端口号的打洞包,以便所述第一nat设备记录所述第二预测端口号,且按照预设规则在所述打洞包到达所述第二nat设备之前将所述打洞包丢弃。

为解决上述技术问题,本发明还提供一种nat穿透设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述任一种nat穿透方法的步骤。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种nat穿透方法的步骤。

本发明提供的nat穿透方法,在将第一nat设备的第一预测端口号发送给网关服务器并通过网关服务器获取第二nat设备的第二预测端口号之后,通过获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于网段数的ttl包;然后通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,以便第一nat设备记录第二预测端口号,且按照预设规则在打洞包到达第二nat设备之前将打洞包丢弃。可见,由于ttl包是在每经过一个网段时初始值逐渐减少,并且由于ttl的初始值是小于第一nat设备和第二nat设备之间的网段数的,所以由第一nat设备发送的包含有该ttl包的打洞包会在到达第二nat设备之前被丢弃,因此能够避免打洞包触发第二nat设备的防火墙,从而提高nat穿透的成功率,也即提高nat设备的穿透率。

为解决上述技术问题,本发明还提供了一种nat穿透装置、设备及计算机可读存储介质,均具有上述有益效果。

附图说明

为了更清楚地说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种nat穿透方法的流程图;

图2为图1所示的一种nat穿透方法步骤s10中获取第一预测端口号的方法流程图;

图3为本发明实施例提供的另一种nat穿透方法的时序图;

图4为本发明实施例提供的一种nat穿透装置的结构图;

图5为本发明实施例提供的一种nat穿透设备的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例的核心是提供一种nat穿透方法,能够提高nat设备的穿透率;本发明的另一核心是提供一种nat穿透装置、设备及计算机可读存储介质,均具有上述有益效果。

为了使本领域技术人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

图1为本发明实施例提供的一种nat穿透方法的流程图。如图1所示,一种nat穿透方法包括:

s10:将第一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设备下的主机节点。

s20:获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于网段数的ttl包。

可以理解的是,第一nat设备和第二nat设备处于不同的网络中,也即第一nat设备至第二nat设备之间可能包括一个或多个nat设备,因此,在进行信息传输时,第一nat设备根据路由表通过路由器将该信息逐次转发以实现传输。网段数即表示第一nat设备和第二nat设备之间的nat设备的数量。

需要说明的是,ttl(timetolive)包一般设置于ip协议中,用于告知nat设备包含有该ttl包的打洞包在网络中的生存时间,以便在达到生存时间时,将该打洞包丢弃。因此,在获取第一nat设备至第二nat设备之间的网段数之后,根据该网段数设置ttl包的初始值。具体的,是将该ttl包的初始值设置为小于该网段数的任意值。由于ttl包在经过每一个nat设备时,至少会将ttl包的初始值减少1,并更新ttl包的值。因此在初始值小于网段数的情况下,使得ttl包不能达到第二nat设备。

s30:通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,以便第一nat设备记录第二预测端口号,且按照预设规则在打洞包到达第二nat设备之前将打洞包丢弃。

具体的,打洞包至少包括ttl包和第二预测端口号,当然还可以包括其他的信息如第二nat设备的ip地址等。通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,因此第一nat设备能够记录第二映射端口号,从而使得第一nat设备能够接收来自第二nat设备的数据信息并转发给第一nat设备下的主机节点,相应的,通过第二nat设备发送包括ttl包和第一预测端口号的打洞包,因此第二nat设备能够记录第一映射端口号,从而使得第二nat设备能够接收来自第一nat设备的数据信息并转发给第二nat设备下的主机节点,从而使得第一nat设备下的主机节点能够与第二nat设备下的主机节点在直接进行通信,也即实现nat穿透。

通过设置初始值小于第一nat设备和第二nat设备之间网段数的ttl包,在保障ttl的初始值使得在第一nat设备能够记录第二预测端口号的基础上,不仅能够避免不正确的路由表导致打洞包在网络中无限循环地传输,占用网络资源;而且能够使得打洞包在到达第二nat设备之前被丢弃,因此避免了打洞包触发第二nat设备的防火墙。

本发明实施例提供的nat穿透方法,在将第一nat设备的第一预测端口号发送给网关服务器并通过网关服务器获取第二nat设备的第二预测端口号之后,通过获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于网段数的ttl包;然后通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,以便第一nat设备记录第二预测端口号,且按照预设规则在打洞包到达第二nat设备之前将打洞包丢弃。可见,由于ttl包是在每经过一个网段时初始值逐渐减少,并且由于ttl的初始值是小于第一nat设备和第二nat设备之间的网段数的,所以由第一nat设备发送的包含有该ttl包的打洞包会在到达第二nat设备之前被丢弃,因此能够避免打洞包触发第二nat设备的防火墙,从而提高nat穿透的成功率,也即提高nat设备的穿透率。

图2为图1所示的一种nat穿透方法步骤s10中获取第一预测端口号的方法流程图。

请参考图2,在上述实施例的基础上,本实施例对技术方案作了进一步的说明和优化,具体的,获取第一nat设备的第一预测端口号的方法具体包括:

s101:当接收到nat穿透指令时,检测第一nat设备的端口类型。

可以理解的是,由于不同端口类型的nat设备设置映射端口号的规律不同,也即获取预测端口号的方式不同。因此在本实施例中,在接收到nat穿透指令时,触发检测第一nat设备的端口类型。

具体的,首先将类型检测包发送至第一网关服务器,以获取第一映射端口号,并判断主机端口号是否与第一映射端口号相同,若相同,则表示该第一nat设备为主机端口;若不同,则需进一步判断该主机端口是固定端口还是对称端口,具体方法为:将类型检测包发送至第二网关服务器,并判断第二映射端口号是否与第一映射端口号相同,也即判断将类型检测包发送到第二网关服务器时,第一nat设备的映射端口号是否发生改变,若没有发生改变,则表示该第一nat设备访问不同的外网设备时所使用的映射端口号相同,则判定该第一nat设备为固定端口;若发生改变,则表示该第一nat设备访问不同的外网设备时所使用的映射端口号是不同的,则判定该第一nat设备为对称端口。由于当第一nat设备类型为对称端口时,无法实现nat穿透,因此本实施例中对这种情况不予考虑。

s102:若端口类型为主机端口,则按照第一预设规则为第一nat设备设置对应的预测端口号;其中,主机端口表征第一nat设备访问不同外网设备时使用不同的映射端口号,且不同的映射端口号中存在与主机端口号相同的映射端口号。

具体的,若检测出第一nat设备的端口类型为主机端口,也即第一nat设备访问不同外网设备时使用不同的映射端口号,且不同的映射端口号中存在与主机端口号相同的映射端口号,则按照第一预设规则为第一nat设备设置对应的预设端口号。需要说明的是,第一预设规则可以是从映射端口号的集合中选择任意一个映射端口号作为当前的预测端口号,也可以是从映射端口号的集合中,选择除主机端口号之外的任意一个映射端口号作为预测端口号,本实施例对第一预设规则不做限定。

具体的,在本实施例中,当判断出第一nat设备的端口类型为主机端口时,则进一步判断上一预测端口号是否与主机端口号相同;也即判断当前与主机端口号相同的映射端口号是否已经被占用,若是,则将第一nat设备当前的预测端口号设置为除主机端口号以外的任一映射端口号;若否,则将第一nat设备当前的预测端口号设置为与主机端口号相同的映射端口号。也即与主机端口号相同的映射端口号未被占用的情况下,优先将第一nat设备的预测端口号设置为与第一nat设备的主机端口号相同的映射端口号;若与主机端口号相同的映射端口号已经被占用,则将第一nat设备的预测端口号设置为除与主机端口号以外的任一映射端口号。

s103:若端口类型为固定端口,则按照第二预设规则从对应的网关服务器中查找与第一nat设备对应的预测端口号;其中,固定端口表征第一nat设备访问不同外网设备时使用相同的映射端口号。

具体的,若检测出第一nat设备的端口类型为固定端口,也即第一nat设备访问不同外网设备时使用相同的映射端口号。在此情况下,则可以按照第二预设规则与该第一nat设备相对应的网关服务器中查找与该第一nat设备对应的映射端口号。也就是说,网关服务器中预先存储有第一nat设备的主机端口号和各映射端口号,当第一nat设备的端口类型为固定端口时,则从网关服务器中查找对应的映射端口号作为该第一nat设备的预测端口号。

图3为本发明实施例提供的另一种nat穿透方法的时序图。在本实施例中,在通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,以便第一nat设备记录第二预测端口号之后,进一步包括:

向第二nat设备发送连通测试包。

也就是说,在第一nat设备向第二nat设备发送打洞包以后,为了保障数据传输的可靠性,在传输业务数据包之前,进一步通过第一nat设备向第二nat设备发送连通测试包的方式检测当前的穿透过程是否成功。需要说明的是,由于业务数据包的传输过程是双向的,因此一般使得第一nat设备和第二nat设备分别向对方发送连通测试包。

在发送连通测试包之后,便能够发送业务数据包以进行数据传输,并在传输结束后发送连接关闭请求。

可见,在本实施例中,通过向目标外网设备发送连通测试包,进一步保障通过本实施例的方式进行nat穿透的可靠性。

在上述实施例的基础上,本实施例对技术方案作了进一步的说明和优化,具体的,在经过一个网段时,控制ttl包的初始值减少n,其中,n为大于1的正整数。

可以理解的是,一般的,在每经过一个nat设备时,ttl包的值将减少1。也即ttl包的值从初始值开始减少,当ttl包的值减少至0时,当前网段对应的nat设备将包括有该ttl包的打洞包丢弃。

为了使得打洞包在保证能够使得第一nat设备记录第二预测端口号的基础上,尽快被丢弃,在本实施例中,优选的设置在经过一个网段时,控制ttl包的初始值减少n,其中n为大于1的正整数,也即每经过一个网段,ttl减少大于1的值,从而使得ttl的初始值尽快减少到0。

作为优选的实施方式,当打洞包被丢弃时,接收由丢弃打洞包对应的nat设备发送的提示信息。

也就是说,当打洞包被丢弃时,对应的nat设备发送该打洞包被丢弃的提示信息给第一nat设备,以使得第一nat设备知晓当前的打洞包已被丢弃的情况。本实施例对提示信息的具体形式不做限定。

作为优选的实施方式,提示信息具体为icmp报文。

需要说明的是,icmp(internetcontrolmessageprotocol,internet控制报文)协议是一种面向无连接的协议,用于传输出错报告控制信息。它是tcp/ip协议族的子协议,属于网络层协议,主要用于传递控制信息,包括报告错误、交换受限控制和状态信息等。

本实施例提供的nat穿透方法,通过设置在经过一个网段时,控制ttl包的初始值减少n,其中,n为大于1的正整数,以及当打洞包被丢弃时,接收由丢弃打洞包对应的nat设备发送的提示信息,能够在通过ttl包避免打洞包触发防火墙的基础上,进一步避免打洞包对当前网络造成其他的影响。

上文对于本发明提供的一种nat穿透方法的实施例进行了详细的描述,本发明还提供了一种与该方法对应的nat穿透装置、设备及计算机可读存储介质,由于装置、设备及计算机可读存储介质部分的实施例与方法部分的实施例相互照应,因此装置、设备及计算机可读存储介质部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

图4为本发明实施例提供的一种nat穿透装置的结构图,如图4所示,一种nat穿透装置包括:

获取模块41,用于将第一nat设备的第一预测端口号发送给网关服务器并通过网关服务器获取第二nat设备的第二预测端口号;

设置模块42,用于获取第一nat设备至第二nat设备之间的网段数,并设置初始值小于网段数的ttl包;

发送模块43,用于通过第一nat设备发送包括ttl包和第二预测端口号的打洞包,以便第一nat设备记录第二预测端口号,且按照预设规则在打洞包到达第二nat设备之前将打洞包丢弃。

本发明实施例提供的nat穿透装置,具有上述nat穿透方法的有益效果。

图5为本发明实施例提供的一种nat穿透设备的结构图,如图5所示,一种nat穿透设备包括:

存储器51,用于存储计算机程序;

处理器52,用于执行计算机程序时实现如上述nat穿透方法的步骤。

本发明实施例提供的nat穿透设备,具有上述nat穿透方法的有益效果。

为解决上述技术问题,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述nat穿透方法的步骤。

本发明实施例提供的计算机可读存储介质,具有上述nat穿透方法的有益效果。

以上对本发明所提供的nat穿透的方法、装置、设备及计算机可读存储介质进行了详细介绍。本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

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