一种NAT穿越的方法、设备和系统转让专利

申请号 : CN202110689122.6

文献号 : CN113452805B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈才龙

申请人 : 华为技术有限公司

摘要 :

本申请实施例提供了一种网络地址转换穿越的方法、设备和系统,涉及通信领域的网络地址转换技术。该方法应用于第一终端与第二终端进行通信的系统中,第一终端为第一NAT设备构建网络中的终端,第二终端为第二NAT设备构建的网络中的终端,第一NAT设备与第二NAT设备不同,该方法通过双向动态探测进行NAT穿越的两端的TTL取值,实现NAT穿越,解决了NAT穿越效率低的问题。

权利要求 :

1.一种网络地址转换NAT穿越的方法,其特征在于,应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:步骤1、所述第一终端设置第一生存时间TTL,所述第一TTL的取值小于第一跳数和第二跳数中最小值,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量;

步骤2、所述第一终端确定所述第一终端在所设置的TTL未接收到所述第二终端发送的第一直通消息,所述第二终端设备重新向网络设备请求重新配置外网地址,所述第一终端设备并向所述第二终端发送第二直通消息;

步骤3、若所述第一终端接收到所述第二终端发送的第一响应消息,所述第一终端确定NAT穿越成功;

若所述第一终端未接收到所述第二终端发送的第一响应消息,所述第一终端更改所述第一终端对应的外网地址并重新设置第二TTL,其中,第二TTL大于所述第一TTL,执行步骤

2,直至所述第一终端接收到所述第一直通消息或者所述第一响应消息,确定所述NAT穿越成功。

2.根据权利要求1所述的方法,其特征在于,所述第一终端重新设置所述TTL的取值后,执行步骤2,包括:所述第一终端设置第二TTL,并确定所述第一终端在所述第二TTL时是否接收到第二终端重新发送的第一直通消息,所述第二TTL大于所述第一TTL;

当所述第一终端在所述第二TTL接收到所述第一直通消息时,确定所述NAT穿越成功;

当所述第一终端在所述第二TTL未接收到所述第一直通消息时,所述第一终端向所述第二终端发送第二直通消息,其中,若所述第一终端未接收到所述第二终端发送的所述第一响应消息,则所述第一终端再次更改所述第一终端对应的外网地址并重新设置所述TTL;

若所述第一终端接收到所述第二终端发送的所述第一响应消息,所述第一终端确定所述NAT穿越成功。

3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:

当所述第一终端接收到所述第二终端发送的第二直通消息时,所述第一终端向所述第二终端发送第二响应消息。

4.根据权利要求1‑3中任一项所述的方法,其特征在于,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。

5.根据权利要求1‑4中任一项所述的方法,其特征在于,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。

6.根据权利要求1‑5中任一项所述的方法,其特征在于,所述方法还包括:所述第一终端通过所述第一NAT设备向网络设备发送第一查询信息,所述第一查询信息用于查询所述第一终端对应的外网地址;

所述第一终端接收所述网络设备发送的第一响应信息,所述第一响应信息包括所述第一终端对应的外网地址。

7.一种NAT穿越的方法,其特征在于,应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:步骤1、所述第二终端向所述第一终端发送第一直通消息;

步骤2、所述第二终端确定所述第二终端未接收到所述第一终端发送的第二响应消息,并更换所述第二设备对应的外网地址并设置第一TTL,所述第一TTL的取值小于第一跳数和第二跳数中的最小值,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量;

步骤3、所述第二终端确定所述第二终端在所设置的TTL时未接收到所述第一终端发送的第二直通消息,所述第一终端重新向网络设备请求更改外网地址;

若所述第二终端接收到所述第二直通消息,确定所述NAT穿越成功,且向所述第一终端发送第一响应消息;

若所述第二终端未接收到所述第二直通消息,所述第二终端重新设置第二TTL,其中,所述第二TTL大于所述第一TTL,直至所述第二终端接收到所述第二直通消息或所述第二响应消息,确定所述NAT穿越成功。

8.根据权利要求7所述的方法,其特征在于,所述若所述第二终端未接收到所述第二直通消息,所述第二终端执行步骤1和步骤2,包括:当所述第二终端未接收到所述第二直通消息时,所述第二终端向所述第一终端发送所述第一直通消息,并确定所述第二终端是否接收到所述第一终端发送的所述第一响应消息;

当所述第一终端接收到所述第一响应消息时,所述第二终端确定所述NAT穿越成功;

当所述第一终端未接收到所述第一响应消息时,所述第二终端再次更换所述第二终端对应的外网地址并设置第二TTL,所述第二TTL大于所述第一TTL。

9.根据权利要求7或8所述的方法,其特征在于,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。

10.根据权利要求7‑9中任一项所述的方法,其特征在于,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。

11.根据权利要求7‑10中任一项所述的方法,其特征在于,所述第二终端更换所述第二终端对应的外网地址,包括:所述第二终端通过所述第二NAT设备向网络设备发送第二查询信息,所述第二查询信息用于查询所述第一终端对应的外网地址;

所述第二终端接收所述网络设备发送的第二响应信息,所述第二响应信息包括所述第二终端对应的外网地址。

12.一种终端设备,其特征在于,包括:

处理模块,用于设置第一TTL,并确定第一终端在所述第一TTL能否接收到第二终端发送的第一直通消息;

发送模块,用于当所述第一终端在所设置的TTL未接收到所述第一直通消息时,向所述第二终端发送第二直通消息;

所述处理模块,还用于确定未接收到所述第二终端发送的第一响应消息;

所述处理模块,还用于更改所述第一终端对应的外网地址并重新设置所述TTL后,重复上述过程,直至所述第一终端接收到所述第一直通消息或者所述第一响应消息,确定所述NAT穿越成功。

13.根据权利要求12所述的终端设备,其特征在于,所述处理模块重新设置所述TTL后,重复上述过程,包括:所述处理模块设置第二TTL,所述第二TTL大于所述第一TTL;

所述处理模块在所述第二TTL时,确定能否接收到所述第一直通消息;

当所述第一终端未接收到所述第一直通消息时,所述发送模块向所述第二终端发送第二直通消息;

所述处理模块确定是否接收到所述第二终端发送的第一响应消息;

若所述第一终端接收到所述第二终端发送的第一响应消息,所述处理模块,还用于确定NAT穿越成功;

若所述第一终端未接收到所述第二终端发送的第一响应消息,所述处理模块,还用于更改所述第一终端对应的外网地址并重新设置所述TTL。

14.根据权利要求12或13所述的终端设备,其特征在于,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。

15.根据权利要求12‑14中任一项所述的终端设备,其特征在于,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。

16.根据权利要求12‑15中任一项所述的终端设备,其特征在于,所述发送模块,还用于通过所述第一NAT设备向网络设备发送第一查询信息,所述第一查询信息用于查询所述第一终端对应的外网地址;

所述终端还包括接收模块,所述接收模块用于接收所述网络设备发送的第一响应信息,所述第一响应信息包括所述第一终端对应的外网地址。

17.一种通信设备,其特征在于,所述通信设备包括至少一个处理器和通信接口,所述通信接口用于所述通信设备与其他通信设备进行信息交互,当程序指令在所述至少一个处理器中执行时,使得所述通信设备实现如权利要求1‑11中任一项所述的方法在如下任一设备上的功能:所述第一终端和所述第二终端。

18.一种通信系统,其特征在于,包括至少两个终端、至少两个NAT设备和服务器,所述至少两个终端中的一个终端用于执行如权利要求1‑6中任一项所述的方法,所述至少两个终端中的另一个终端用于执行如权利要求7‑11中任一项所述的方法。

19.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1至11中任一项所述的方法。

说明书 :

一种NAT穿越的方法、设备和系统

技术领域

[0001] 本申请涉及通信领域的网络地址转换技术,尤其涉及一种NAT穿越的方法、设备和系统。

背景技术

[0002] 在端对端(peer to peer,P2P)网络实时音视频领域,网络地址转换(network address translation,NAT)穿越是一项非常重要的技术。NAT穿越技术可以使得客户端和客户端直接进行通信,从而减少了端到端的时延,并大大减轻了服务器的压力,降低其成本。
[0003] NAT技术是指把内网地址转换为外网地址的技术,这种技术不仅能够解决互联网协议地址(Internet protocol address,IP)不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的终端。
[0004] NAT的工作流程主要是通过修改数据包的源地址和目的地址来实现地址的映射,并且,只有在内网终端主动向外网发送数据之后,外网才有可能发送数据给内网终端,其中,内网发送到外网的数据包会被修改源地址,外网发送给内网的数据包会被修改目的地址。也就是说,只有数据先从NAT内部发出去,外部数据才有可能通过NAT设备到达内网终端,而如果内部报文没有先发出去,NAT设备则会将收到的外部数据(这种数据成为“不请自来”的数据)丢弃。此外,目前的很多NAT设备具有时序要求,也即当接收到“不请自来”的数据时,除了将该数据丢弃之外,还会将发送该“不请自来”数据的源IP和端口(port)加入黑名单,一旦被加入黑名单,从改地址或者端口发送的数据将无法进入NAT。因此,当NAT设备如果有时序要求,将会导致NAT无法穿越,进而无法实现端到端通信。

发明内容

[0005] 本申请实施例提供了一种NAT穿越的方法、设备和系统,能够解决有时序要求的NAT设备穿越成功率低的问题。
[0006] 第一方面,提供一种NAT穿越的方法,该方法应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:步骤1、所述第一终端设置第一生存时间TTL;步骤2、所述第一终端确定所述第一终端在所设置的TTL时是否接收到所述第二终端发送的第一直通消息;当所述第一终端在所设置的TTL未接收到所述第一直通消息时,所述第一终端向所述第二终端发送第二直通消息,并确定所述第一终端是否接收到所述第二终端发送的第一响应消息;步骤3、若所述第一终端接收到所述第二终端发送的第一响应消息,所述第一终端确定NAT穿越成功;若所述第一终端未接收到所述第二终端发送的第一响应消息,所述第一终端更改所述第一终端对应的外网地址并重新设置所述TTL后,重复步骤2,直至所述第一终端接收到所述第一直通消息或者所述第一响应消息,确定所述NAT穿越成功。
[0007] 结合第一方面,在第一方面的某些实现方式中,所述第一终端重新设置所述TTL的取值后,重复步骤2,包括:所述第一终端设置第二TTL,并确定所述第一终端在所述第二TTL时是否接收到第二终端重新发送的第一直通消息,所述第二TTL与所述第一TTL不同;当所述第一终端在所述第二TTL接收到所述第一直通消息时,确定所述NAT穿越成功;当所述第一终端在所述第二TTL未接收到所述第一直通消息时,所述第一终端向所述第二终端发送第二直通消息,其中,若所述第一终端未接收到所述第二终端发送的所述第一响应消息,则所述第一终端再次更改所述第一终端对应的外网地址并重新设置所述TTL;若所述第一终端接收到所述第二终端发送的所述第一响应消息,所述第一终端确定所述NAT穿越成功。
[0008] 结合第一方面,在第一方面的某些实现方式中,所述方法还包括:当所述第一终端接收到所述第二终端发送的第二直通消息时,所述第一终端向所述第二终端发送第二响应消息。
[0009] 结合第一方面,在第一方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。
[0010] 结合第一方面,在第一方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0011] 结合第一方面,在第一方面的某些实现方式中,所述第一终端通过所述第一NAT设备向网络设备发送第一查询信息,所述第一查询信息用于查询所述第一终端对应的外网地址;所述第一终端接收所述网络设备发送的第一响应信息,所述第一响应信息包括所述第一终端对应的外网地址。
[0012] 第二方面,提供了一种NAT穿越的方法,该方法应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:步骤1、所述第二终端向所述第一终端发送第一直通消息;步骤2、所述第二终端确定所述第二终端是否接收到所述第一终端发送的第二响应消息;若所述第二终端未接收到所述第二响应消息,所述第二终端更换所述第二设备对应的外网地址并设置第一TTL;步骤3、所述第二终端确定所述第二终端在所设置的TTL时是否接收到所述第一终端发送的第二直通消息;若所述第二终端接收到所述第二直通消息,确定所述NAT穿越成功,且向所述第一终端发送第一响应消息;若所述第二终端未接收到所述第二直通消息,所述第二终端重复步骤1和步骤2,直至所述第二终端接收到所述第二直通消息或所述第二响应消息,确定所述NAT穿越成功。
[0013] 结合第二方面,在第二方面的某些实现方式中,所述若所述第二终端未接收到所述第二直通消息,所述第二终端重复步骤1和步骤2,包括:当所述第二终端未接收到所述第二直通消息时,所述第二终端向所述第一终端发送所述第一直通消息,并确定所述第二终端是否接收到所述第一终端发送的所述第一响应消息;当所述第一终端接收到所述第一响应消息时,所述第二终端确定所述NAT穿越成功;当所述第一终端未接收到所述第一响应消息时,所述第二终端再次更换所述第二终端对应的外网地址并设置第二TTL,所述第二TTL与所述第一TTL不同。
[0014] 结合第二方面,在第二方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。
[0015] 结合第二方面,在第二方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0016] 结合第二方面,在第二方面的某些实现方式中,所述第二终端更换所述第二终端对应的外网地址,包括:所述第二终端通过所述第二NAT设备向网络设备发送第二查询信息,所述第二查询信息用于查询所述第一终端对应的外网地址;所述第二终端接收所述网络设备发送的第二响应信息,所述第二响应信息包括所述第二终端对应的外网地址。
[0017] 第三方面,提供了一种NAT穿越的方法,该方法应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:所述第一NAT设备在第一TTL时,确定所述第一NAT设备是否接收到所述第一终端发送的第一打洞消息;若所述第一NAT设备未接收到所述第一打洞消息,当所述第一NAT设备接收到所述第二终端发送的第一直通消息时,将所述第二终端对应的外网地址加入黑名单;所述第一NAT设备向所述第二终端更换后的外网地址发送第二直通消息;当所述第二直通消息未被所述第二终端接收,所述第一NAT设备重新设置所述第一终端对应的外网地址,并在所述TTL重新设置后,重复上述过程,直至所述第一NAT设备接收到所述第一打洞消息或者所述第一直通消息被所述第一终端接收,所述NAT穿越成功。
[0018] 结合第三方面,在第三方面的某些实现方式中,所述TTL重新设置后,重复上述过程,包括:所述第一NAT设备在第二TTL时,确定所述第一NAT设备是否接收到所述第一终端发送的第一打洞消息,所述第二TTL大于所述第一TTL;若所述第一NAT设备未接收到所述第一打洞消息,当所述第一NAT设备接收到所述第二终端发送的第一直通消息时,将所述第二终端对应的更改后的外网地址加入黑名单,并在所述TTL取值再次重新设置后,再次重复上述过程。
[0019] 结合第三方面,在第三方面的某些实现方式中,所述方法还包括:当所述第二直通消息未被所述第二终端接收时,所述第一NAT设备为所述第一终端重新分配外网地址或者端口。
[0020] 结合第三方面,在第三方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。
[0021] 结合第三方面,在第三方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0022] 结合第三方面,在第三方面的某些实现方式中,所述方法还包括:所述第一NAT设备接收所述第一终端发送的第一查询信息,所述第一查询信息用于查询所述第一终端对应的外网地址;所述第一NAT设备向网络设备发送所述第一查询信息;所述第一NAT设备配置所述第一终端对应的外网地址,并向所述网络设备发送所述外网地址;所述第一NAT设备接收所述网络设备发送的所述第一响应信息,所述第一响应信息包括所述第一终端对应的外网地址;所述第一NAT设备向所述第一终端发送所述第一响应信息。
[0023] 第四方面,提供了一种NAT穿越的方法,该方法应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,所述方法包括:所述第二NAT设备向所述第一终端发送第一直通消息;若所述第一直通消息未被所述第一终端接收,所述第二NAT设备重新设置所述第二终端对应的外网地址,并确定所述第二NAT设备是否在第一TTL时接收到所述第二终端发送的第二打洞消息;当所述第二NAT设备未接收到所述第二打洞消息时,若所述第二NAT设备接收到所述第一终端发送的第二直通消息,则所述第二NAT设备将所述第一终端对应的外网地址加入黑名单,并在所述TTL取值重新设置后,重复上述过程,直至所述第一直通消息被所述第一终端接收或者所述第二NAT设备接收到所述第二打洞消息,所述NAT穿越成功。
[0024] 结合第四方面,在第四方面的某些实现方式中,所述在所述TTL取值重新设置后,重复上述过程,包括:所述第二NAT设备在所述第二TTL时,向所述第一终端发送第一直通消息,所述第二TTL大于所述第一TTL;若所述第一直通消息不能被所述第一终端接收,所述第二NAT设备确定是否接收到所述第二终端发送的打洞消息;当所述第二NAT设备未接收到所述打洞消息时,若所述第二NAT设备接收到所述第一终端发送的第二直通消息,则所述第二NAT设备将所述第一终端对应的更换后外网地址加入黑名单,并在所述TTL取值再次重新设置后,重复上述过程。
[0025] 结合第四方面,在第四方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。
[0026] 结合第四方面,在第四方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0027] 结合第四方面,在第四方面的某些实现方式中,所述方法还包括:所述第二NAT设备接收所述第二终端发送的第二查询信息,所述第二查询信息用于查询所述第二终端对应的外网地址;所述第二NAT设备向网络设备发送所述第二查询信息;所述第二NAT设备配置所述第二终端对应的外网地址,并向所述网络设备发送所述外网地址;所述第二NAT设备接收所述网络设备发送的所述第二响应信息,所述第二响应信息包括所述第二终端对应的外网地址;所述第二NAT设备向所述第二终端发送所述第二响应信息。
[0028] 第五方面,提供了一种终端设备,包括:处理模块,用于设置第一TTL,并确定第一终端在所述第一TTL能否接收到第二终端发送的第一直通消息;发送模块,用于当所述第一终端在所设置的TTL未接收到所述第一直通消息时,向所述第二终端发送第二直通消息;所述处理模块,还用于确定是否接收到所述第二终端发送的第一响应消息;若所述第一终端接收到所述第二终端发送的第一响应消息,所述处理模块,还用于确定NAT穿越成功;若所述第一终端未接收到所述第二终端发送的第一响应消息,所述处理模块,还用于更改所述第一终端对应的外网地址并重新设置所述TTL后,重复上述过程,直至所述第一终端接收到所述第一直通消息或者所述第一响应消息,确定所述NAT穿越成功。
[0029] 结合第五方面,在第五方面的某些实现方式中,所述处理模块重新设置所述TTL后,重复上述过程,包括:所述处理模块设置第二TTL,所述第二TTL与所述第一TTL不同;所述处理模块在所述第二TTL时,确定能否接收到所述第一直通消息;当所述第一终端未接收到所述第一直通消息时,所述发送模块向所述第二终端发送第二直通消息;所述处理模块确定是否接收到所述第二终端发送的第一响应消息;若所述第一终端接收到所述第二终端发送的第一响应消息,所述处理模块,还用于确定NAT穿越成功;若所述第一终端未接收到所述第二终端发送的第一响应消息,所述处理模块,还用于更改所述第一终端对应的外网地址并重新设置所述TTL。
[0030] 结合第五方面,在第五方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的网段数量,所述第二跳数为所述第二终端与所述第二NAT设备之间的网段数量。
[0031] 结合第五方面,在第五方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0032] 结合第五方面,在第五方面的某些实现方式中,所述发送模块,还用于通过所述第一NAT设备向网络设备发送第一查询信息,所述第一查询信息用于查询所述第一终端对应的外网地址;所述终端还包括接收模块,所述接收模块用于接收所述网络设备发送的第一响应信息,所述第一响应信息包括所述第一终端对应的外网地址。
[0033] 第六方面,提供了一种NAT设备,该NAT设备应用于第一终端与第二终端进行通信的系统中,所述第一终端为第一NAT设备构建网络中的终端,所述第二终端为第二NAT设备构建的网络中的终端,所述第一NAT设备与所述第二NAT设备不同,包括:发送模块,用于在第一TTL时向所述第一终端发送第一直通消息;处理模块,用于若所述第一直通消息不能被所述第一终端接收,确定是否接收到所述第二终端发送的打洞消息;所述处理模块还用于,当所述第二NAT设备未接收到所述打洞消息时,若所述第二NAT设备接收到所述第一终端发送的第二直通消息,将所述第一终端对应的外网地址加入黑名单,并在所述TTL取值重新设置后,重复上述过程,直至所述第一直通消息被所述第一终端接收或者所述第一NAT设备接收到所述打洞消息。
[0034] 结合第六方面,在第六方面的某些实现方式中,所述在所述TTL取值重新设置后,重复上述过程,包括:所述发送模块在所述第二TTL时,向所述第一终端发送第一直通消息,所述第二TTL大于所述第一TTL;若所述第一直通消息不能被所述第一终端接收,所述处理模块还用于确定是否接收到所述第二终端发送的打洞消息;当所述第二NAT设备未接收到所述打洞消息时,若所述第二NAT设备接收到所述第一终端发送的第二直通消息,则所述处理模块用于将所述第一终端对应的更换后外网地址加入黑名单,并在所述TTL取值再次重新设置后,重复上述过程。
[0035] 结合第六方面,在第六方面的某些实现方式中,所述第一TTL不大于第一跳数和第二跳数中的最小值,其中,所述第一跳数为所述第一终端与所述第一NAT设备之间的跳数,所述第二跳数为所述第二终端与所述第二NAT设备之间的跳数。
[0036] 结合第六方面,在第六方面的某些实现方式中,所述第一NAT设备和所述第二NAT设备为锥型NAT设备。
[0037] 第七方面,提供了一种通信设备,所述通信设备包括至少一个处理器和通信接口,所述通信接口用于所述通信设备与其他通信设备进行信息交互,当程序指令在所述至少一个处理器中执行时,使得所述通信设备实现如上述第一方面或第二方面中任一种实现方式中的方法在如下任一设备上的功能:所述第一终端和所述第二终端。
[0038] 第八方面,提供了一种通信系统,包括至少一个终端、至少一个NAT设备和服务器,所述终端用于执行如第一方面或第二方面中任一实现方式中所述的方法,所述NAT设备用于执行如第三方面或第四方面中任一实现方式所述的方法。
[0039] 根据本申请实施例提供的NAT穿越的方法,通过探测本端和对端发送消息的TTL并动态调整TTL取值,确定端对端通信中的一端实现发送的消息恰能到达该端的NAT设备但同时不到达对端的NAT设备,使得其中一端生成映射表,又不会使该端的外网地址被加入黑名单,最终实现NAT穿越,提高了NAT穿越效率。

附图说明

[0040] 图1示出了NAT设备工作流程的示意图。
[0041] 图2(a)示出了锥型NAT工作原理的示意图。
[0042] 图2(b)示出了对称型NAT工作原理的示意图。
[0043] 图3示出了锥型‑锥型组合的NAT穿越过程示意图。
[0044] 图4示出了一种NAT穿越过程示意图。
[0045] 图5示出了本申请实施例提供的一种NAT穿越过程示意图。
[0046] 图6示出了本申请实施例提供的NAT穿越方法应用于端到端通信场景的示意图。
[0047] 图7示出了本申请实施例提供的一种终端设备的示意性结构图。
[0048] 图8示出了本申请实施例提供的一种NAT设备的示意性结构图。

具体实施方式

[0049] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0050] 本申请实施例的技术方案可以应用于各种通信系统,例如:全球移动通讯(global system of mobile communication,GSM)系统、码分多址(code division multiple access,CDMA)系统、宽带码分多址(wideband code division multiple access,WCDMA)系统、通用分组无线业务(general packet radio service,GPRS)、长期演进(long term evolution,LTE)系统、LTE频分双工(freq终端设备ncy division duplex,FDD)系统、LTE时分双工(time division duplex,TDD)、通用移动通信系统(universal mobile telecommunication system,UMTS)、全球互联微波接入(worldwide interoperability for microwave access,WiMAX)通信系统、未来的第五代(5th generation,5G)系统或新无线(new radio,NR)等。
[0051] 本申请实施例中的终端可以指用户设备、接入终端、用户单元、远程终端、移动设备、用户终端、终端、无线通信设备、用户代理或用户装置。终端设备还可以是蜂窝电话、无绳电话、会话启动协议(session initiation protocol,SIP)电话、无线本地环路(wirelesslocal loop,WLL)站、个人数字处理(personal digital assistant,PDA)、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备,未来5G网络中的终端设备或者未来演进的公用陆地移动通信网络(public land mobile network,PLMN)中的终端设备等,本申请实施例对此并不限定。
[0052] 为便于理解,首先结合附图对NAT技术进行介绍。
[0053] 图1示出了NAT设备工作流程的示意图。
[0054] 如图1所示,NAT设备维护一个地址映射表,该地址映射表中记录有终端的内网地址、映射后的外网地址和目的地址,该映射表初始时为空。示例性的,图1示出的地址映射表记录了终端1和终端2的源地址以及映射后的地址,其中,以终端1的地址为例,其内网地址为192.168.0.100:10000,进行端对端通信的目的地址为210.15.27.166:8000,其中,NAT设备将该终端1的内网地址映射后的外网地址为210.21.12.140:2000,当终端1与目的地址的对端进行通信时,需要通过映射后的外网地址进行通信,其具体通信流程将在下文进行具体介绍。
[0055] 由于NAT类型可以具体分为锥型NAT(cone NAT)(如图2a所示)和对称型NAT(symmetric NAT)(如图2b所示),因此,内网地址和外网地址的映射可以是一对一映射,也可以为一对多映射。例如,当NAT的类型为锥型NAT时,该锥型NAT设备将一个内网地址固定转换为一个外网地址,此时为一对一映射;当NAT的类型为对称型NAT时,该对称型NAT设备可以将一个内网地址转换为多个外网地址,此时为一对多映射。
[0056] 以终端1(内网地址为192.168.0.100:10000)发送数据包给服务器1(目的地址为210.15.27.166:8000)为例,对NAT的工作流程进行介绍,其流程如下。其中,终端的内网地址也可以称为该终端的源地址。
[0057] (1)当终端1需要经过NAT设备向服务器1发送数据包时,NAT设备需要在映射表获取源地址为192.168.0.100:10000的记录,应理解,若终端1首次向服务器1发送数据包,NAT设备的映射表中尚未创建源地址为192.168.0.100:10000的记录,此时,需要在映射表中新建一套关于源地址为192.168.0.100:10000的记录,并分配外网端口或者外网地址,例如该NAT设备为终端1分配的外网地址和端口为210.21.12.140:2000。
[0058] 应理解,NAT设备可以为终端分配外网地址和/或端口,为描述方便,本申请实施例中以NAT设备向终端分配外网地址和端口统一称为NAT设备向终端分配的外网地址。
[0059] (2)NAT设备修改数据包的源地址,然后再将其发送到外网。其中,NAT设备修改数据包的源地址是指,将数据包对应的源地址修改为外网地址,也即将192.168.0.100:10000修改为210.21.12.140:2000。之后,所有源地址为192.168.0.100:10000,且目的地址为210.15.27.166:8000的数据包都做上述修改。
[0060] 由于终端向外网发送了数据包,因此,之后外网可以通过NAT设备向内网终端发送数据包,其流程如下。
[0061] (3)NAT设备接收到服务器1经由目的地址(210.15.27.166:8000)向外网地址(210.21.12.140:2000)发送的数据包,该NAT设备通过查询映射表,可以获取与该外网地址210.21.12.140:2000具有映射关系的内网地址为192.168.0.100.10000。
[0062] (4)NAT修改数据包的目的地址,然后将该数据包发送至内网的终端1。其中,NAT设备修改数据包的目的地址,也即将外网地址(210.21.12.140:2000)修改为该外网地址映射的内网地址(210.15.27.166:8000)。
[0063] 由上述NAT的工作流程可以看出,NAT通过修改数据包的源地址和目的地址来实现地址映射。其工作原理可以总结为:只有内网终端主动向外网发送数据,外网才有可能发送数据给内网终端;内网发送到外网的数据会被修改源地址,外网发送给内网的数据包会被修改目的地址。
[0064] 应理解,在不同NAT设备后面的两个终端,如第一终端和第二终端,如果知道对端NAT设备映射之后的外网地址,就有可能直接发送用户数据报协议(user datagram protocol,UDP)包给对方的外网地址进行通信,也即实现了NAT穿越。但是,终端不能直接获取自身的NAT外网地址,通常来说,需要引入一个网络设备(如服务器)来帮助终端获取自身的外网地址。以下以“锥型NAT‑锥型NAT”组合为例来描述NAT穿越的过程。
[0065] 图3示出了锥型NAT‑锥型NAT组合的NAT穿越过程示意图。包括以下步骤。
[0066] S101,第一终端通过第一NAT设备向网络设备发送查询消息,以询问自身外网地址,网络设备将第一终端的外网地址返回给第一终端。
[0067] 其中,第一终端的外网地址可以由第一NAT设备配置。其具体的过程可以为:当第一终端通过第一NAT设备向网络设备发送查询消息后,第一NAT设备根据该查询消息为第一终端配置该第一终端对应的外网地址,然后由网络设备将该外网地址信息发送给第一终端。
[0068] S102,第二终端通过第二NAT设备向网络设备发送数据包,以询问自身的外网地址,网络设备将第二终端的外网地址返回给第二终端。
[0069] S103,网络设备将第一终端的外网地址发送给第二终端。
[0070] 应理解,网络设备通过第一NAT设备将该第二终端的外网地址发送给第二终端。
[0071] S104,网络设备将第二终端的外网地址发送给第一终端。
[0072] 应理解,网络设备通过第二NAT设备将该第二终端的外网地址发送给第一终端。
[0073] S105,第一终端向第二终端的外网地址发送打洞消息,其中,打洞消息用于在第一NAT设备上生成第二外网地址的映射表。
[0074] S106,第二NAT设备向第一终端发送直通请求消息,尝试建立P2P通道。
[0075] 应理解,当第二NAT设备发出针对第一终端的直通请求消息时,第二NAT设备上生成了第一外网地址的映射表。由于第一NAT设备已经在步骤S105中提前生成了第二外网地址的映射表,因此,该步骤中,经由第二外网地址发送的直通请求消息可以到达第一终端。
[0076] S107,第一终端接收到经由第二外网地址发送的直通请求消息后,向第二外网地址发送直通响应消息。由于在步骤S106中,第二终端经由第二外网地址向第一外网地址发送直通请求消息时生成了第一外网地址的映射表,因此,可以在第二NAT设备上查到第一外网地址的映射表,该直通响应消息能够到达第二终端,实现NAT穿越,P2P通道建立成功。
[0077] 应理解,由于NAT设备的工作原理为:只有当报文先从该NAT设备内部发出去,外部的报文才可以通过该NAT设备到达内网终端;如果内部报文没有先发送出去,该NAT接收到外部报文时,由于查不到映射表,会丢弃该外部报文,为便于理解,我们将这种情形下的外部报文称为“不请自来”的报文。随着技术的发展,目前很多NAT设备都有时序要求,也即在NAT设备丢弃了“不请自来”的报文之后,还会将发送“不请自来”报文的源IP和端口加入黑名单(一段时间以后可以自动删除)。一旦被加入黑名单,从该源IP发出的报文将无法进入该NAT设备的内部,因此,当NAT设备有时序要求时,可能会导致NAT无法穿越。
[0078] 以下结合附图,对NAT设备具有时序要求导致NAT穿越失败的过程进行介绍。
[0079] 图4示出了一种NAT穿越过程示意图。包括以下步骤。
[0080] S201,第一终端向网络设备发送查询消息,以查询自身的外网地址,网络设备将第一终端的第一外网地址返回给第一终端。
[0081] S202,第二终端向网络设备发送查询消息,以查询自身的外网地址,网络设备将第二终端的第二外网地址返回给第二终端。
[0082] S203,网络设备将第一终端的第一外网地址发送给第二终端。
[0083] S204,网络设备将第二终端的第二外网地址发送给第一终端。
[0084] S205,第一终端向第二外网地址发送打洞消息,当该打洞消息发出第一NAT设备时,该第一NAT设备生成第二外网地址的映射表,由于在第二NAT设备上查找不到第一外网地址的映射表,该打洞消息属于“不请自来”的报文,第一外网地址被加入黑名单。
[0085] S206,第二终端向第一终端发送直通请求消息,当该直通请求消息发出第二NAT设备时,该第二NAT设备生成第一外网地址的映射表,由于在步骤S205中,第一NAT设备已经提前生成了第二外网地址的映射表,因此该直通请求消息可以达到第一终端。
[0086] S207,第一终端接收到直通请求消息之后,向第二外网地址发送直通响应消息,应理解,此时虽然在第二NAT设备中可以查到第一外网地址的映射表,但由于第一外网地址已经被加入了黑名单,因此,直通响应消息无法到达第二终端,P2P通道建立失败。
[0087] 针对上述由于NAT设备时序导致的NAT穿越失败的问题,目前可以通过制定生存时间(time to live,TTL),使打洞消息出本端NAT设备,同时不能到达对端NAT设备,从而实现能够在本端NAT设备生成映射表,进而可以让外部报文进来,又不会使打洞消息成为“不请自来”的消息,避免本端外网地址被加入黑名单。
[0088] 然而,由于目前采用的方法中,TTL被设置成固定的经验值,而现有网络设备参差不齐,如终端与NAT设备之间的条数各不相同,如图4所示,第一终端需要经过3跳才能到达本端NAT设备,而第二终端需要经过2跳就能到达本端NAT设备,因此,将TTL设置成固定值局限性很大,只要穿越的一方TTL不符合设定的经验值,穿越就会失败。
[0089] 针对上述问题,本申请实施例提供了一中NAT穿越的方法,通过本端和对端双向动态探测TTL,以适应现有网络中不同TTL的NAT设备,进而解决有时序要求的NAT设备穿越效率低的问题。
[0090] 图5示出了本申请实施例提供的一种NAT穿越过程示意图。
[0091] 应理解,本申请实施例提供的NAT穿越方法可以应用于包括至少一个终端且不同终端位于不同NAT设备构建的网络中的系统中,例如应用于第一终端与第二终端进行通信的系统中,其中,所述第一终端为第一NAT设备构建网络中的终端,第二终端为第二NAT设备构建网络中的终端,第一NAT设备与第二NAT设备不同,且第一NAT设备与第二NAT设备可以均为锥型NAT设备。该NAT穿越过程包括以下步骤。
[0092] S301,第一终端向网络设备发送第一查询消息,以查询该第一终端对应的外网地址;网络设备根据第一查询消息将第一终端的外网地址发送给第一终端。
[0093] 应理解,第一终端为第一NAT设备构建的网络中的至少一个终端中的其中一个终端,其中,该第一NAT设备可以是锥型NAT。
[0094] 在一种实现方式中,第一终端可以通过第一NAT设备向网络设备发送第一查询消息,第一NAT设备根据该第一查询消息自主地为第一终端配置对应的外网地址,再由服务器S通过第一NAT设备向第一终端发送该外网地址。
[0095] S302,第二终端向网络设备发送第二查询消息,以查询该第二终端对应的外网地址;网络设备根据第二查询消息将第二终端的外网地址发送给第二终端。
[0096] 应理解,第二终端为第二NAT设备构建的网络中的至少一个终端中的其中一个终端,其中,该第二NAT设备可以是锥型NAT,且第二NAT设备与第一NAT设备不同。
[0097] 在一种实现方式中,第二终端可以通过第二NAT设备向网络设备发送第二查询消息,第二NAT设备根据该第二查询消息自主地为第二终端配置对应的外网地址,再由服务器S通过第二NAT设备向第二终端发送该外网地址。
[0098] S303,网络设备将第二终端对应的外网地址发送给第一终端。
[0099] 应理解,网络设备通过第一NAT设备将第二终端对应的外网地址发送给第一终端。
[0100] S304,网络设备将第一终端对应的外网地址发送给第二终端。
[0101] 应理解,网络设备通过第二NAT设备将第一终端对应的外网地址发送给第二终端。
[0102] S305,第一终端设置第一TTL。
[0103] 在一种实现方式中,第一TTL的取值可以小于第一跳数和第二跳数中最小值,其中,第一跳数为第一终端与第一NAT设备之间的网段数量,或者第一终端发送的消息到达第一NAT设备需要经过的网段数量;第二跳数为第二终端与第二NAT设备之间的网段数量,或者第二终端发送的消息到达第二NAT设备需要经过的网段数量。其中,第一TTL例如可以为1。
[0104] S306,第一终端确定第一终端在所设置的TTL是否接收到所述第二终端发送的第一直通消息;当第一终端在所设置的TTL未接收到第一直通消息时,第一终端向第二终端发送第二直通消息,并确定第一终端是否接收到第二终端发送的第一响应消息。
[0105] 由于步骤S305中的第一TTL为第一终端探测性设置的值,该第一终端需要根据能否在该第一TTL时接收到对端发送的直通消息确定NAT穿越是否成功。其中,第一终端能否接收到第二终端发送的第一直通消息,取决于第一NAT设备上是否已经提前生成了地址映射表,也即第一NAT设备是否收到第一终端发送的打洞消息。
[0106] 在一种实现方式中,第一终端在设置第一TTL后,向第一NAT设备发送的第一打洞消息。其中,若该第一打洞消息能够在第一TTL时到达第一NAT设备,第一NAT设备可以建立该第一打洞消息对应的目的地址的映射表,也即第二终端对应的外网地址的映射表,则后续第二终端向第一终端发送的第一直通消息可以被成功传输至第一终端,此时,第一终端设备可以向第二终端设备发送第二响应消息;若该第一打洞消息未在第一TTL时达到第一NAT设备,该第一NAT设备不会生成第一终端对应的外网地址的映射表,后续当第一NAT设备接收到第二终端向第一终端发送的第一直通消息时,该消息不会被传输至内网的第一终端,也即第一终端无法接收该第一直通消息,并且由于NAT的时序要求,该第二终端对应的外网地址会被加入黑名单,此时,NAT穿越失败。换句话说,若第一终端设置生存时间为第一TTL时,第一NAT设备未生成目的地址的映射表,则第一NAT设备在接收到第二终端发送的第一直通请求消息时,无法在映射表中找到第二终端对应的外网地址的信息,该直通请求消息被认为是“不请自来”的消息,第一NAT设备将第二终端对应的外网地址加入黑名单。
[0107] 应理解,TTL为数据包被路由器丢弃之前允许通过的最大网段数量(即跳数),当TTL的取值小于终端与NAT设备之间的跳数时,打洞消息不能到达NAT设备,该NAT设备就无法生成关于目的地址的映射表,导致NAT穿越失败,此时,需要重新设置TTL的取值,直至TTL的取值等于第一跳数或者第二跳数中的最小值即可实现NAT穿越成功。示例性的,在图5所示的网络场景中,由于打洞消息由第一终端到达第一NAT设备需要经过的跳数为4,而该打洞消息的TTL为1,因此,无法实现在第一TTL时,使得打洞消息到达第一NAT设备,该第一NAT设备也就无法生成第二终端对应的外网地址的映射表,导致打洞失败。
[0108] 在一种实现方式中,当第一NAT设备将第二终端对应的外网地址加入黑名单后,第二终端无法再接收到第一终端发送的消息。当第二终端判断在一定时间内未接收到第一终端发送的第二响应消息时,可以确定其外网地址被加入黑名单,此时,第二终端可以重新向网络设备请求更改该第二终端对应的外网地址,网络设备可以通过第二NAT设备为该第二终端重新配置外网地址。
[0109] 在一种实现方式中,当第一终端在第一TTL未接收到第一直通消息时,NAT穿越失败。此时,第二终端可以探测在第一TTL时能否实现NAT穿越,具体地,第二终端更改其对应的外网地址之后,设置第一TTL,并在该第一TTL时向第二NAT设备发送第二打洞消息。其中,若在第一TTL时,第二打洞消息能够到达第二NAT设备,则该NAT设备可以生成目的地址的映射表,此时,第二终端可以接收第一终端发送的第二直通消息;若第二打洞消息不能到达第二NAT设备,则该NAT设备无法生成目的地址的映射表,此时,第二终端无法接收到第一终端发送的第二直通消息。
[0110] 应理解,第一终端可以周期性的向第二终端发送第一直通消息,第二终端也可以周期性的向第一终端发送第二直通消息。
[0111] 示例性的,在图5所示的网络场景中,由于第二打洞消息由第二终端到达第二NAT设备需要经过的跳数为5,而该打洞消息的TTL为1,因此,无法实现在TTL为第一TTL时,使得打洞消息到达第二NAT设备,该第二NAT设备也就无法生成第二终端对应的外网地址的映射表,导致打洞失败。
[0112] 在一种实现方式中,若第二终端接收到第一终端发送的第二直通消息时,第二终端确定NAT穿越成功,且该第二终端可以向第一终端发送第一响应消息。此时,第一终端可以根据是否接收到第一响应消息确定第二直通消息是否被第二终端接收,也即NAT穿越是否成功。
[0113] S307,若所述第一终端接收到所述第二终端发送的第一响应消息,所述第一终端确定NAT穿越成功;若所述第一终端未接收到所述第二终端发送的第一响应消息,所述第一终端更改所述第一终端对应的外网地址并重新设置所述TTL后,重复上述过程,直至所述第一终端接收到所述第一直通消息或者所述第一响应消息,确定所述NAT穿越成功。
[0114] 在一种实现方式中,若第二打洞消息在第一TTL时达到第二NAT设备,该第二NAT设备会生成第二终端对应的外网地址的映射表,当后续第二NAT设备接收到第一终端向第二终端发送的第二直通消息时,该消息被传输至第二终端,第二终端向第一终端发送第一响应消息,此时,NAT穿越成功。
[0115] 在一种实现方式中,若第二打洞消息未在第一TTL时达到第二NAT设备,该第二NAT设备不会生成第二终端对应的外网地址的映射表,当后续第二NAT设备接收到第一终端向第二终端发送的第二直通消息时,该消息不会被传输至第二终端,第二终端也就不会向第一终端发送第一响应消息。当第一终端在一定时间内未接收到第一响应消息时,确定该第一终端对应的外网地址被加入黑名单。
[0116] 在一种实现方式中,第一终端对应的外网地址被加入黑名单后,第一终端可以重新向网络设备请求更改外网地址,网络设备可以向第一终端重新分配该第一终端对应的外网地址,也即更换第一终端对应的外网地址。
[0117] 在一种实现方式中,当第二直通消息未被第二终端接收时,第一终端重新设置TTL的值,例如设置为第二TTL,该第二TTL与第一TTL不同,例如第二TTL可以大于第一TTL。
[0118] 在一种实现方式中,第一终端重新设置TTL的取值后,重复确定是否接收到第一直通消息,若接收到第一直通消息,则NAT穿越成功;若未接收到第一直通消息,则第一终端再次向第二终端发送第二直通消息,其中,当第二直通消息被第二终端接收,则第一终端会接收到第二终端发送的第一响应消息,此时NAT穿越成功;当第二直通消息未被第二终端接收,第一终端对应的外网地址被第二NAT设备加入黑名单,此时,第一终端更改自身对应的外网地址,并重新设置TTL,重复上述过程,直至在TTL设置为某一取值时第一终端能够接收到第一直通消息或者第一响应消息,也即直至NAT穿越成功。
[0119] 应理解,第二终端的操作步骤与第一终端对应,此处不再详述。
[0120] 应理解,当通过上述步骤判断在第一TTL时,第一终端和第二终端均未接收到对端发送的直通消息,需要重新设置TTL的取值,如可以增大TTL的取值,并重复以上两端的过程,直至TTL取值能够使得NAT穿越成功。
[0121] 作为一个示例,重新设置第二TTL,其中,第二TTL大于第一TTL,如第二TTL为4。判断在第二TTL时,第一终端发送的打洞消息能否到达第一终端对应的外网地址(该外网地址为更换后的外网地址),由于图5所示的场景中,第一终端发送的打洞消息到达第一NAT设备需要经过4跳,当第二TTL为4时,该打洞消息恰能到达第一NAT设备且不能到达第二NAT设备,因此,打洞消息成功出本端NAT设备,该第一NAT设备可以生成第二终端对应的外网地址的映射表,打洞成功。
[0122] 在一种实现方式中,在打洞成功后,若第二终端通过外网地址向第一终端发送第一直通请求消息,由于第一NAT设备已经提前生成该第二终端对应的外网地址的映射表,因此,第一NAT设备可以在映射表中查找到第二终端对应的外网地址的映射信息,该直通请求消息就可以到达第一终端。在该过程中,由于第二NAT设备发出了针对第一终端的直通请求消息,因此,该第二NAT设备可以生成第一终端对应的外网地址的映射表。
[0123] 根据本申请实施例提供的NAT穿越的方法,通过探测本端和对端发送消息的TTL并动态调整TTL取值,确定端对端通信中的一端实现发送的消息恰能到达该端的NAT设备但同时不到达对端的NAT设备,使得其中一端生成映射表,又不会使该端的外网地址被加入黑名单,最终实现NAT穿越。
[0124] 应理解,TTL的取值可以由TTL能够取得的较小值开始测试,例如,大致判断各端中终端与对应的NAT设备之间的跳数,则TTL的取值应当不大于各端跳数中的最小跳数。当在TTL取较小的值时,各端终端发送的打洞消息均未到达对应的NAT设备时,适当增加TTL的取值,并重复上文的判断过程,直至其中一端终端发送的打洞消息能够到达对应的NAT设备且不到达对端的NAT设备,此时,打洞成功。其中,首先实现打洞消息到达对应的NAT设备且不到达对端的NAT设备的一端可以是终端与对应的NAT设备之间跳数最小的一端。
[0125] 以下结合附图,对本申请实施例提供的NAT穿越方法可以应用的场景进行介绍。
[0126] 图6示出了本申请实施例提供的NAT穿越方法应用于端到端通信场景的示意图。
[0127] 应理解,本申请实施例提供的NAT穿越的方法可以应用于P2P通信场景中,例如用户与用户之间进行网络电话(如语音通话或者视频通话等)的场景中。如图6所示,第一用户所在网络的NAT设备可以为有时序要求的锥型NAT,第二用户所在网络的NAT设备可以也为有时序要求的锥型NAT时,可以采用本申请实施例提供的双向TTL探测方法实现NAT穿越。以下对该场景下应用本申请实施例提供的NAT穿越的方法进行简单介绍。
[0128] S401,第一用户经由服务器向第二用户发起呼叫。
[0129] 应理解,第一用户发起的呼叫例如可以是语音呼叫或者视频呼叫。
[0130] S402,当呼叫请求到达第二用户后,第一用户和第二用户可以通过本申请实施例提供的NAT穿越方法实现NAT穿越,其具体流程可以参见针对图5的相关描述,为避免重复,此处不再赘述。
[0131] S403,第一用户和第二用户进行P2P网络通话,其中,该P2P网络通话不需要经过服务器。
[0132] 根据本申请实施例提供的NAT穿越的方法,通过双向TTL探测方案进行NAT穿越,能够在NAT设备有时序要求时成功完成NAT穿越,实现端对端通信。此外,本申请实施例提供的NAT穿越的方法中,只要进行NAT穿越的两端或多端中的一端TTL满足使得打洞消息出该端的NAT设备且不到达其他端的NAT设备,即可实现NAT穿越成功。
[0133] 图7示出了本申请实施例提供的一种终端设备的示意性结构图。终端设备700包括处理模块710和发送模块720。
[0134] 在一种实现方式中,处理模块710,用于设置第一生存时间TTL,并确定第一终端在该第一TTL时能否接收到第二终端发送的第一直通消息
[0135] 在一种实现方式中,发送模块720,用于当第一终端未接收到第一直通消息时,向第二终端发送第二直通消息。
[0136] 在一种实现方式中,处理模块710,还用于若第二直通消息未被第二终端接收,则处理模块710重新设置TTL的取值,直至第一终端接收到第一直通消息或者第二终端接收到第二直通消息,确定NAT穿越成功。
[0137] 在一种实现方式中,处理模块710重新设置TTL的取值,并重复上述过程,包括:处理模块710设置TTL的取值为第二TTL,该第二TTL大于第一TTL;处理模块710在第二TTL时,确定能否接收到第一直通消息;当第一终端未接收到第一直通消息时,发送模块720通过更换后的外网地址向第二终端发送第二直通消息;当第二直通消息未被第二终端接收时,则处理模块710再次重新设置TTL的取值。
[0138] 在一种实现方式中,第一TTL不大于第一跳数和第二跳数中的最小值,其中,第一跳数为第一终端与第一NAT设备之间的网段数量,第二跳数为第二终端与第二NAT设备之间的网段数量。
[0139] 应理解,本申请实施例中所说的第一NAT设备和第二NAT设备可以为锥型NAT设备。
[0140] 在一种实现方式中,发送模块720,还用于通过所述第一NAT设备向网络设备发送第一查询信息,该第一查询信息用于查询所述第一终端对应的外网地址;所述终端还包括接收模块,该接收模块用于接收网络设备发送的第一响应信息,该第一响应信息包括第一终端对应的外网地址。
[0141] 图8示出了本申请实施例提供的一种NAT设备的示意性结构图。该NAT设备应用于第一终端与第二终端进行通信的系统中,该第一终端为第一NAT设备构建网络中的终端,该第二终端为第二NAT设备构建的网络中的终端,第一NAT设备与第二NAT设备不同。图8所示的NAT的结构可以是本申请实施例中涉及的第一NAT设备的结构图也可以是第二NAT设备的结构图。NAT设备800包括发送模块810和处理模块820。
[0142] 在一种实现方式中,发送模块810,用于在TTL为第一TTL时向第一终端发送第一直通消息;
[0143] 在一种实现方式中,处理模块820,用于若第一直通消息不能被第一终端接收,确定是否接收到第二终端发送的打洞消息;
[0144] 在一种实现方式中,处理模块820,还用于当第二NAT设备未接收到打洞消息时,若第二NAT设备接收到第一终端发送的第二直通消息,将第一终端对应的外网地址加入黑名单,并在TTL取值重新设置后,重复上述过程,直至第一直通消息被第一终端接收或者第一NAT设备接收到打洞消息。
[0145] 在一种实现方式中,发送模块810,还用于在第二TTL时,向第一终端发送第一直通消息,该第二TTL大于第一TTL;若第一直通消息不能被第一终端接收,处理模块820还用于确定是否接收到第二终端发送的打洞消息;当第二NAT设备未接收到该打洞消息时,若第二NAT设备接收到第一终端发送的第二直通消息,则处理模块820用于将第一终端对应的更换后外网地址加入黑名单,并在TTL取值再次重新设置后,重复上述过程。
[0146] 在一种实现方式中,第一TTL不大于第一跳数和第二跳数中的最小值,其中,第一跳数为第一终端与第一NAT设备之间的跳数,第二跳数为第二终端与第二NAT设备之间的跳数。
[0147] 应理解,本申请实施例所说的第一NAT设备和第二NAT设备可以为锥型NAT设备。
[0148] 此外,本申请实施例还提供了一种通信系统,该通信系统包括至少一个终端设备、至少一个NAT设备和服务器,该终端设备和该NAT设备用于执行上述本申请实施例提供的方法。
[0149] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0150] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0151] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0152] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0153] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0154] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read‑only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0155] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。