穿透NAT设备的方法转让专利

申请号 : CN201010527664.5

文献号 : CN101977249B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邵思瑶

申请人 : 北京易视腾科技有限公司

摘要 :

本发明公开了一种穿透网络地址转换NAT设备的方法,该方法包括:步骤20、检测NAT节点A的设备类型;步骤30、根据NAT节点A的设备类型进行NAT设备穿透。步骤20之前,该方法进一步包括:步骤10、对NAT节点A的指定端口进行通用即插即用UPNP操作。本发明利用UPNP降低了穿透成本,通过划分更细致全面的NAT类型,根据各个NAT类型的映射特性和穿透特性采用适当的穿透方法,从而能够实现NAT设备的穿透,满足企业内部用户的实时网络应用需求,提高用户的网络体验。

权利要求 :

1.一种穿透网络地址转换NAT设备的方法,其特征在于,该方法包括:

步骤20、检测NAT节点A的设备类型;

步骤30、根据NAT节点A的设备类型进行NAT设备穿透;

其中,步骤20所述的设备类型具体包括:端口不规则型NAT、对称1型NAT、对称2型NAT、受限圆锥型NAT、端口受限圆锥型NAT、全圆锥型NAT和开放网络型NAT;其中,所述端口不规则型NAT只能被信任IP的信任端口穿透,每次向陌生IP或信任IP的陌生端口发送数据时映射端口增量不规则;

所述对称1型NAT只能被信任IP的信任端口穿透,每次向陌生IP或信任IP的陌生端口发送数据时映射端口增加1;

所述对称2型NAT只能被信任IP的信任端口穿透,每次向陌生IP发送数据时映射端口增加1;

所述受限圆锥型NAT能够被信任IP的任何端口穿透,映射端口固定;

所述端口受限圆锥型NAT只能被信任IP的信任端口穿透,映射端口固定;

所述全圆锥型NAT能够被任何IP的任何端口穿透,映射端口固定;

所述开放网络型NAT能够被任何IP的任何端口穿透,其内网IP和端口与外网IP和端口一致。

2.如权利要求1所述的方法,其特征在于,步骤20之前,该方法进一步包括:

步骤10、对NAT节点A的指定端口进行通用即插即用UPNP操作。

3.如权利要求1所述的方法,其特征在于,当NAT节点A为对称1型NAT或对称2型NAT,NAT节点B为受限圆锥型NAT或端口受限圆锥型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:步骤S101:NAT节点A获取本地最新外网端口,并向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;

步骤S102:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息;

步骤S103:收到所述通知指令后,NAT节点B向NAT节点A打洞,且打洞的目标端口以NAT节点A的最新外网端口为基准连续增长,同时,NAT节点A根据NAT节点B的NAT信息向所述NAT节点B打洞,直到NAT节点A或NAT节点B中任意一方接收到对方的打洞数据,则实现了NAT节点A到NAT节点B的穿透。

4.如权利要求1所述的方法,其特征在于,当NAT节点A为对称2型NAT,NAT节点B为对称

1型NAT或对称2型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:步骤S201:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;

步骤S202:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;

步骤S203:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;

步骤S204:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准连续增长;

步骤S205:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。

5.如权利要求1所述的方法,其特征在于,当NAT节点A和NAT节点B均为对称1型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:步骤S301:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;

步骤S302:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;

步骤S303:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;

步骤S304:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准,由外界因素导致的最新外网端口增加和累计到本次打洞导致的最新外网端口增加而决定;

步骤S305:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。

6.如权利要求5所述的方法,其特征在于,步骤S304之后,如果NAT节点A或NAT节点B没有接收到对方的打洞数据,则所述方法进一步包括:NAT节点A通过握手节点C通知NAT节点B获取所述NAT节点B的最新外网端口并发送给所述NAT节点A,同时,NAT节点B通过握手节点C通知NAT节点A获取所述NAT节点A的最新外网端口并发送给所述NAT节点B,并再重复执行一次步骤S304。

7.如权利要求3所述的方法,其特征在于,步骤S 103中所述NAT节点B向NAT节点A打洞包括:所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞;所述NAT节点A向NAT节点B打洞具体包括;所述NAT节点A向所述NAT节点B的固定外网端口打洞。

8.如权利要求4所述的方法,其特征在于,步骤S204中所述NAT节点A和NAT节点B同时向对方打洞包括:所述NAT节点A依次向所述NAT节点B中,从NAT节点B的最新外网端口开始,连续增长的端口打洞;同时,所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞。

9.如权利要求3-8中任一项所述的方法,其特征在于,所述握手节点C为分别与NAT节点A和NAT节点B已经实现穿透的节点;所述NAT信息包括:NAT类型、本地IP和端口、外网IP和端口。

说明书 :

穿透NAT设备的方法

技术领域

[0001] 本发明涉及互联网通信技术领域,特别是涉及一种穿透NAT设备的方法。

背景技术

[0002] 目前,随着互联网用户的不断增多,互联网所使用的互联网协议第四版(IPv4)地址资源已经非常紧张了,根本不能够满足让每一位用户都拥有一个能够直接访问因特网的IPv4地址,即外网IP地址。大量的企业单位也只拥有少量的外网IP地址,因此企业内部只能使用大量不能直接访问因特网的内网(即本地)IP地址来满足企业内用户的内部网络通信需求,为了让企业内的用户能够使用互联网资源,企业一般会采用NAT(Network Address Translation,网络地址转换)设备将企业内部的内网IP地址转换成能够直接访问互联网的外网IP地址,使得企业内的一个或多个用户可以使用一个外网IP地址来访问互联网。
[0003] NAT设备的使用虽然能暂时缓解IPv4地址资源的危机,但是,由于NAT设备会限制互联网用户对位于NAT设备后的企业内部用户的访问,所以其会影响互联网的互通性。为了能够让位于互联网中的用户能够访问位于NAT设备后的企业内部用户,需要采用一些策略来穿透NAT设备。根据互联网工程任务组(IETF)制定的STUN(Simple Traversal ofUDP Through NATs,简单UDP报文穿透NAT)协议的检测流程,能够检测出的NAT设备类型如表1所示:
[0004]
[0005] 表1
[0006] 由于NAT0映射端口增加规律不规则,只可能让它主动连接NAT3或NAT4,不可能向它进行穿透。NAT1每次向陌生IP或信任IP的陌生端口发送数据,其映射端口都增加1,做到NAT1与NAT2甚至NAT1与NAT1之间的穿透都是非常困难的。NAT2是映射端口固定的NAT,业界很多P2P(peer-to-peer,端到端)软件利用互相打洞的方法做到了如表2所示的各种NAT类型之间的穿透。
[0007]
[0008] 表2
[0009] 在表2中,可以看出现有技术中不能在NAT0、NAT1和NAT2之间进行穿透,有的软件试图将NAT的指定端口进行UPNP(Universal Plug and Play,通用即插即用)操作,使其转化为NAT3或NAT4;所述UPNP操作为通过向NAT设备发送控制信息添加端口映射将NAT设备转化成NAT3或NAT4,从而优化NAT类型。然而能够进行UPNP操作的网络只是实际网络中很小的一部分,而对于不能转化的NAT将不能完成穿透。在实际网络中,NAT1的节点占据了相当一部分比例,而NAT2的节点更是占据了大约60%以上,这样NAT1与NAT2或NAT1与NAT1之间的穿透障碍就造成了网络中很大一部分的节点不能互联,不利于企业内部用户进行实时的网络应用,降低了用户的网络体验。

发明内容

[0010] (一)要解决的技术问题
[0011] 针对现有NAT穿透技术的缺陷,本发明要解决的技术问题是:如何穿透不同类型的NAT设备,满足企业内部用户进行实时的网络应用需求,从而提高用户的网络体验。
[0012] (二)技术方案
[0013] 为解决上述技术问题,提供一种穿透网络地址转换NAT设备的方法,该方法包括:
[0014] 步骤20、检测NAT节点A的设备类型;
[0015] 步骤30、根据NAT节点A的设备类型进行NAT设备穿透。
[0016] 优选地,步骤20之前,该方法进一步包括:
[0017] 步骤10、对NAT节点A的指定端口进行通用即插即用UPNP操作。
[0018] 优选地,步骤20所述的设备类型具体包括:端口不规则型NAT、对称1型NAT、对称2型NAT、受限圆锥型NAT、端口受限圆锥型NAT、全圆锥型NAT和开放网络型NAT;其中,[0019] 所述端口不规则型NAT只能被信任IP的信任端口穿透,每次向陌生IP或信任IP的陌生端口发送数据时映射端口增量不规则;
[0020] 所述对称1型NAT只能被信任IP的信任端口穿透,每次向陌生IP或信任IP的陌生端口发送数据时映射端口增加1;
[0021] 所述对称2型NAT只能被信任IP的信任端口穿透,每次向陌生IP发送数据时映射端口增加1;
[0022] 所述受限圆锥型NAT能够被信任IP的任何端口穿透,映射端口固定;
[0023] 所述端口受限圆锥型NAT只能被信任IP的信任端口穿透,映射端口固定;
[0024] 所述全圆锥型NAT能够被任何IP的任何端口穿透,映射端口固定;
[0025] 所述开放网络型NAT能够被任何IP的任何端口穿透,其内网IP和端口与外网IP和端口一致。
[0026] 优选地,当NAT节点A为对称1型NAT或对称2型NAT,NAT节点B为受限圆锥型NAT或端口受限圆锥型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:
[0027] 步骤S101:NAT节点A获取本地最新外网端口,并向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0028] 步骤S102:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息;
[0029] 步骤S103:收到所述通知指令后,NAT节点B向NAT节点A打洞,且打洞的目标端口以NAT节点A的最新外网端口为基准连续增长,同时,NAT节点A根据NAT节点B的NAT信息向所述NAT节点B打洞,直到NAT节点A或NAT节点B中任意一方接收到对方的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0030] 优选地,当NAT节点A为对称2型NAT,NAT节点B为对称1型NAT或对称2型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:
[0031] 步骤S201:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0032] 步骤S202:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;
[0033] 步骤S203:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;
[0034] 步骤S204:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准连续增长;
[0035] 步骤S205:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0036] 优选地,当NAT节点A和NAT节点B均为对称1型NAT,且NAT节点A已知NAT节点B的NAT信息时,所述步骤30具体包括:
[0037] 步骤S301:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0038] 步骤S302:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;
[0039] 步骤S303:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;
[0040] 步骤S304:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准,由外界因素导致的最新外网端口增加和累计到本次打洞导致的最新外网端口增加而决定;
[0041] 步骤S305:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0042] 优选地,步骤S304之后,如果NAT节点A或NAT节点B没有接收到对方的打洞数据,则所述方法进一步包括:NAT节点A通过握手节点C通知NAT节点B获取所述NAT节点B的最新外网端口并发送给所述NAT节点A,同时,NAT节点B通过握手节点C通知NAT节点A获取所述NAT节点A的最新外网端口并发送给所述NAT节点B,并再重复执行一次步骤S304。
[0043] 优选地,步骤S103中所述NAT节点B向NAT节点A打洞包括:所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞;所述NAT节点A向NAT节点B打洞具体包括;所述NAT节点A向所述NAT节点B的固定外网端口打洞。
[0044] 优选地,步骤S204中所述NAT节点A和NAT节点B同时向对方打洞包括:
[0045] 所述NAT节点A依次向所述NAT节点B中,从NAT节点B的最新外网端口开始,连续增长的端口打洞;同时,
[0046] 所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞。
[0047] 优选地,所述握手节点C为分别与NAT节点A和NAT节点B已经实现穿透的节点;所述NAT信息包括:NAT类型、本地IP和端口、外网IP和端口。
[0048] (三)有益效果
[0049] 本发明提出了一种穿透NAT设备的方法,利用UPNP操作降低了穿透成本,通过划分更细致全面的NAT类型,根据各个NAT类型的映射特性和穿透特性采用适当的穿透方法,从而能够实现NAT设备的穿透,满足企业内部用户的实时网络应用需求,提高用户的网络体验。

附图说明

[0050] 图1是本发明所述穿透NAT设备的方法流程图;
[0051] 图2是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例1的方法流程图;
[0052] 图3是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例2的方法流程图;
[0053] 图4是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例3的方法流程图。

具体实施方式

[0054] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0055] 本发明的主要思想为:对NAT节点A的指定端口进行UPNP操作;检测NAT节点A的设备类型;根据NAT节点A的设备类型进行NAT设备穿透。
[0056] 图1是本发明所述穿透NAT设备的方法流程图。如图1所示,本发明所述方法主要包括:
[0057] 步骤10、对NAT节点A的指定端口进行UPNP操作。
[0058] 步骤20、检测NAT节点A的设备类型。
[0059] 在本步骤中,NAT设备类型的划分如下表3所示。
[0060]
[0061] 表3
[0062] 参见表3,其中映射端口为NAT的当前工作端口。在STUN检测流程的基础上增加了一些情况下的映射性质的测试,将NAT1(Symmetric NAT)分为两种,即NAT1.1和NAT1.2,以便更有利地穿透。NAT1.1和NAT1.2的共同点都是对于信任的IP的信任端口才能向其穿透。不同点在于当NAT1.1在向陌生IP或者信任IP的陌生端口发送数据时,其映射端口会增加1,而NAT1.2在向陌生IP发送数据时,其映射端口增加1,向信任IP的陌生端口发送数据时,映射端口不变。因此,本方案的检测流程采用向信任IP的陌生端口发送数据返回本地映射的方法区分出NAT1.1和NAT1.2。
[0063] 步骤30、根据NAT节点A的设备类型进行NAT设备穿透。
[0064] 在本步骤中,主要在NAT1与NAT2之间以及NAT1之间的穿透。
[0065] 实施例1:NAT2与NAT1.1或NAT1.2之间的穿透。
[0066] 图2是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例1的方法流程图,如图2所示,NAT节点A的类型为NAT1.1或NAT1.2,NAT节点B的类型为NAT2,NAT节点A已知NAT节点B的NAT信息,该方法包括:
[0067] 步骤S101:NAT节点A获取本地最新外网端口,并向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0068] 所述NAT信息包括:NAT类型、本地IP和端口、外网IP和端口。
[0069] 步骤S102:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息;
[0070] 所述握手节点C为分别与NAT节点A和NAT节点B已经实现穿透的节点。
[0071] 步骤S103:收到所述通知指令后,NAT节点B向NAT节点A打洞,且打洞的目标端口以NAT节点A的最新外网端口为基准连续增长,同时,NAT节点A根据NAT节点B的NAT信息向其打洞,直到NAT节点A或NAT节点B中任意一方接收到对方的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0072] 由于NAT节点在A取得本地最新NAT信息之后,还可能向其他目标发送数据导致外网端口增长,所以所述NAT节点B向NAT节点A打洞具体包括:所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞;
[0073] 所述NAT节点A向NAT节点B打洞具体包括;NAT节点A向NAT节点B的固定外网端口打洞。
[0074] 类似地,可以实现NAT节点B到NAT节点A的穿透。
[0075] 实施例2:NAT1.2与NAT1.1或NAT1.2之间的穿透。
[0076] 图3是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例2的方法流程图,如图3所示,NAT节点A的类型为NAT1.2,NAT节点B的类型为NAT1.1或NAT1.2,NAT节点A已知NAT节点B的NAT信息,该方法包括:
[0077] 步骤S201:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0078] 所述NAT信息包括:NAT类型、本地IP和端口、外网IP和端口。
[0079] 步骤S202:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;
[0080] 所述握手节点C为分别与节点A和节点B实现穿透的节点。
[0081] 步骤S203:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新最外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;
[0082] 步骤S204:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准连续增长;
[0083] 所述NAT节点A和NAT节点B同时向对方打洞具体包括:所述NAT节点A依次向所述NAT节点B中,从NAT节点B的最新外网端口开始,连续增长的端口打洞;同时,所述NAT节点B依次向所述NAT节点A中,从NAT节点A的最新外网端口开始,连续增长的端口打洞。
[0084] 步骤S205:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0085] 类似地,可以实现NAT节点B到NAT节点A的穿透。
[0086] 实施例3:NAT1.1与NAT1.1之间的穿透。
[0087] 图4是本发明所述方法中根据NAT节点A的设备类型进行NAT设备穿透的实施例3的方法流程图,如图4所示,NAT节点A和NAT节点B的类型均为NAT1.1,NAT节点A已知NAT节点B的NAT信息,该方法包括:
[0088] 步骤S301:NAT节点A向其连接的所有节点发送寻找NAT节点B的指令,该指令携带NAT节点A的NAT信息;
[0089] 所述NAT信息包括:NAT类型、本地IP和端口、外网IP和端口。
[0090] 步骤S302:接收到所述指令的握手节点C,确定自身与NAT节点B相连接后,向NAT节点B发送一个通知指令,该指令携带NAT节点A的NAT信息,并同时向NAT节点A发送确认指令,将找到NAT节点B的消息通知NAT节点A;
[0091] 所述握手节点C为分别与NAT节点A和NAT节点B已经实现穿透的节点。
[0092] 步骤S303:收到所述通知指令后,NAT节点B获取本地最新外网端口,并通过握手节点C将所述NAT节点B的最新外网端口发送给NAT节点A;同时,收到所述确认指令后,NAT节点A获取本地最新外网端口,并通过握手节点C将所述NAT节点A的最新外网端口发送给NAT节点B;
[0093] 步骤S304:NAT节点A和NAT节点B分别接收到对方的最新外网端口后同时向对方打洞,且打洞的目标端口以对方的最新外网端口为基准,由外界因素导致的最新外网端口增加和累计到本次打洞导致的最新外网端口增加而决定;
[0094] 由于NAT节点A和NAT节点B在取得最新端口之后,有可能分别又向陌生节点发送数据导致了多次外网端口增长,同时考虑自身向对方端口打洞所带来的端口增长的结果,由外界因素导致的最新外网端口增加和累计到本次打洞导致的最新外网端口增加确定的打洞的目标端口的增长序列如表4所示。
[0095]
[0096] 表4
[0097] 如表4中所示,当NAT节点A和NAT节点B取得各自的最新外网端口之后,到开始打洞之前,如果没有向外界发送数据而导致最新端口增加,那么只考虑本次打洞带来的端口增加,例如,假设NAT节点A和NAT节点B的最新外网端口均为10000,此时NAT节点A若向NAT节点B的10001端口打洞,NAT节点A的最新外网端口则变成了10001,同时NAT节点B的10001端口也成为了NAT节点A的信任端口,然后NAT节点B恰好也向NAT节点A的10001端口打洞,打这个洞的同时,NAT节点B最新外网端口变成了10001,即NAT节点A的信任端口,那么NAT节点A必然能够接收到此打洞数据,即穿透成功。
[0098] 但如果实际情况没有那么顺利,即NAT节点A和NAT节点B的最新外网端口由于外界因素导致了一定增长,我们就由最可能的情况开始,逐渐覆盖各种可能。除了双方的外界因素导致的端口增长均为0的情况之外,最可能的是,两者中一个的外界因素导致外网端口增长为1,另一个的外界因素导致外网端口增长为0,也就是外界因素导致的双方的外网端口增长之和为1,就是表4中第二行和第三行的情况。以此类推,以外界因素导致的双方外网端口增长之和从小到大的顺序得出表4所示的打洞的目标端口的增长序列。
[0099] 表4中只列举到外界因素导致的双方外网端口增长之和为4的部分,由于篇幅的关系,不再列举其他的打洞的目标端口的增长序列部分。
[0100] 步骤S305:NAT节点A或NAT节点B接收到对方发送来的打洞数据,则实现了NAT节点A到NAT节点B的穿透。
[0101] 如果NAT节点A或NAT节点B没有接收到对方发送来的打洞数据,则NAT节点A通过握手节点C通知NAT节点B获取所述NAT节点B的最新外网端口并发送给所述NAT节点A,同时,NAT节点B通过握手节点C通知NAT节点A获取所述NAT节点A的最新外网端口并发送给所述NAT节点B,并再重复执行一次步骤S304,增大打洞成功概率。
[0102] 类似地,可以实现NAT节点B到NAT节点A的穿透。
[0103] 由以上实施例可以看出,本发明实施例通过提出了一种穿透NAT设备的方法,利用UPNP降低了穿透成本,通过划分更细致全面的NAT类型,根据各个NAT类型的映射特性和穿透特性采用适当的穿透方法,从而能够实现NAT设备的穿透,满足企业内部用户的实时网络应用需求,提高用户的网络体验。
[0104] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。