CN116708358B - P2p穿越方法、设备及存储介质 - Google Patents

P2p穿越方法、设备及存储介质 Download PDF

Info

Publication number
CN116708358B
CN116708358B CN202211349218.9A CN202211349218A CN116708358B CN 116708358 B CN116708358 B CN 116708358B CN 202211349218 A CN202211349218 A CN 202211349218A CN 116708358 B CN116708358 B CN 116708358B
Authority
CN
China
Prior art keywords
nat
terminal device
terminal equipment
type
terminal
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
CN202211349218.9A
Other languages
English (en)
Other versions
CN116708358A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211349218.9A priority Critical patent/CN116708358B/zh
Publication of CN116708358A publication Critical patent/CN116708358A/zh
Application granted granted Critical
Publication of CN116708358B publication Critical patent/CN116708358B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/25Mapping addresses of the same type
    • H04L61/2503Translation of Internet protocol [IP] addresses
    • H04L61/256NAT traversal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W76/00Connection management
    • H04W76/10Connection setup
    • H04W76/15Setup of multiple wireless link connections

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本申请实施例提供一种P2P穿越方法、设备及存储介质,涉及通信技术领域,解决了在蜂窝弱网环境下终端设备无法正常通话的问题。在本申请方案中,在通过主链路传输通话数据包的过程中,若出现移动信号的强度较弱的情况,则终端设备可以通过向STUN服务器的一个端口发送一次探测消息,或向STUN服务器的两个端口发送两次探测消息,以获取STUN服务器返回的NAT地址,并根据NAT地址和本地地址,确定终端设备的NAT类型为公网型、锥型还是对称型;然后根据双方的NAT探测结果,执行与之对应的NAT穿越策略,从而打通P2P辅助链路。

Description

P2P穿越方法、设备及存储介质
技术领域
本申请涉及通信技术领域,尤其涉及一种点对点(peer-to-peer,P2P)穿越方法、设备及存储介质。
背景技术
在网际互连协议多媒体子系统(internet protocol multimedia subsystem,IMS)等传统通话方式中,两个终端设备可以通过基站和核心网设备等建立蜂窝链路,并传输通信数据包。但是,当终端设备位于地铁站、高铁站、办公楼、商场或住宅楼等封闭空间时,蜂窝信号覆盖较弱,导致终端设备接收到的信号强度较弱,使得在蜂窝链路中传输的通话数据包可能会出现丢失、时延过大或者抖动过大等情况,从而影响了终端设备的正常通话。
发明内容
本申请提供了一种P2P穿越方法、设备及存储介质,解决了在蜂窝弱网环境下终端设备无法正常通话的技术问题。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请实施例提供一种P2P穿越方法。该方法包括:
第一终端设备通过移动通信链路与第二终端设备传输通话数据包。当移动通信链路的通话质量不满足质量条件时,第一终端设备向第一服务器的一个或两个端口发送探测消息,并接收由一个或两个端口返回的NAT地址,以及根据第一终端设备的本地地址、及由一个或两个端口返回的NAT地址,确定第一终端设备的NAT类型,第一终端设备的NAT类型为公网型、锥型或对称型。然后,第一终端设备向第二终端设备发送第一终端设备的NAT类型,并接收由第二终端设备发送的第二终端设备的NAT类型,第二终端设备的NAT类型为公网型、锥型或对称型。之后,第一终端设备采用与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略,在第一终端设备和第二终端设备之间建立辅助链路。
第一服务器可以为一个STUN服务器,STUN服务器设置有两个用于NAT探测的端口。
上述方案包括两个部分:NAT探测部分和NAT穿越部分。在NAT探测部分,与传统NAT类型探测不同,本申请简化了探测类型,仅区分公网型、锥型和对称型,简化了交互逻辑;另外,STUN服务器仅需配置一个公网IP地址,最多仅需要发送两次探测消息即可确定NAT类型到底是锥型,对称型还是公网IP,提升探测效率。在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类型为对称型。
在一种可能的实现方式中,第一终端设备向第一服务器(如TRS服务器)的第一端口发送第一探测消息之前,该方法还可以包括:第一终端设备向第二服务器发送请求消息。第一终端设备接收来自第二服务器的响应消息,响应消息包括第一服务器的IP地址、第一端口的端口号和第二端口的端口号。应理解,由于终端设备并未获知STUN服务器的IP地址等相关信息,无法向STUN服务器发送探测消息,而TRS服务器预先存储了STUN服务器的相关信息,因此终端设备可以先向TRS服务器发送一个请求消息,TRS服务器可以向终端设备返回一个数据包。
在一种可能的实现方式中,响应消息还可以包括挑战码。第一探测消息和第二探测消息均可以为用户数据报协议包。用户数据报协议包可以包括:挑战码、消息序号和重传次数。其中,挑战码用于校验探测消息是否合法,消息序号用于唯一标识探测消息,重传次数用于表示允许向第一服务器重新发送探测消息的最大次数。应理解,STUN服务器通过对事务标识中的挑战码进行校验,能够确定消息是否合法。由于终端设备可能向STUN服务器多次发送探测消息,因此可以通过添加消息序号的方式能够保证消息的唯一性。另外,通过设置重传次数,可以避免因网络故障或STUN服务器故障等各种原因导致的持续无效探测。
在一种可能的实现方式中,当移动通信链路的通话质量不满足质量条件时,第一终端设备向第一服务器的一个或两个端口发送探测消息,可以包括:当移动通信链路的通话质量不满足质量条件时,第一终端设备检测本地是否缓存有第一终端设备的NAT类型和第二终端设备的NAT类型。在未缓存有第一终端设备的NAT类型和第二终端设备的NAT类型的情况下,或者,在第一终端设备的NAT类型和第二终端设备的NAT类型的缓存时长大于或等于预设时长的情况下,第一终端设备分别向第一服务器的一个或两个端口发送探测消息。应理解,当终端设备没有在本地缓存NAT参数,或缓存的NAT参数已经失效时,终端设备无法成功进行NAT穿越,因此需重新NAT探测。
在一种可能的实现方式中,该方法还可以包括:在缓存有第一终端设备的NAT类型和第二终端设备的NAT类型,且第一终端设备的NAT类型和第二终端设备的NAT类型的缓存时长小于预设时长的情况下,第一终端设备直接采用与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略,在第一终端设备和第二终端设备之间建立辅助链路。应理解,当终端设备本地缓存有NAT参数,且缓存的NAT参数未超过预设时长时,这些参数可以直接被用来进行NAT穿越,而无需重新NAT探测,从而提高了P2P穿越效率。
在一种可能的实现方式中,在第一终端设备和第二终端设备之间建立辅助链路之后,该方法还可以包括:第一终端设备在本地缓存第一终端设备的NAT类型和第二终端设备的NAT类型。应理解,对于需要频繁补包的通话场景,通过在本地缓存NAT探测参数,可以直接使用缓存的NAT探测参数进行NAT穿越,从而提高了P2P穿透效率。
在一种可能的实现方式中,若第一终端设备的NAT类型为公网型,第二终端设备的NAT类型为公网型、锥型或对称型,则与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略可以为第一策略。其中,第一策略为:第一终端设备监听本地端口,并在接收到来自第二终端设备的直连请求消息后,在第一终端设备和第二终端设备之间建立辅助链路。应理解,无论终端设备是IPV4公网型,还是IPV6公网型,由于终端设备的本地地址就是公网地址,因此另一终端设备均可以直接访问该终端设备的公网地址。即,只要一方的NAT类型为公网型,那么无论另一方为何种NAT类型,均可以通过直连方式建立辅助链路。
在一种可能的实现方式中,若第一终端设备的NAT类型为锥型,第二终端设备的NAT类型为锥型,则与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略可以为第二策略。其中,第二策略为:采用第一算法穿越;在采用第一算法穿越失败的情况下,采用第二算法穿越;在采用第二算法穿越失败的情况下,采用第三算法穿越。
第一算法是针对一个终端设备的NAT类型为全锥型,另一个终端设备的NAT类型为任意锥型或对称型设计的穿越算法。示例性地,第一算法可以包括:第一终端设备向第二终端设备的任意一个外部端口发送第一访问请求消息;在第二终端设备接收到第一访问请求消息后,第二终端设备向第一终端设备的任意一个外部端口返回第一访问响应消息;在第一终端设备接收到第一访问响应消息后,第一终端设备在第一终端设备和第二终端设备之间建立辅助链路。
第二算法是针对一个终端设备的NAT类型为IP受限锥型,另一个终端设备的NAT类型为IP受限锥型、端口受限锥型或对称型设计的穿越算法。示例性地,第二算法可以包括:第一终端设备通过NAT探测获得第一终端设备的外部端口;第一终端设备通过第一终端设备的外部端口,向第二终端设备的任意一个外部端口发送第二访问请求消息;在第二终端设备接收到第二访问请求消息后,第二终端设备向第一终端设备的外部端口,返回第二访问响应消息;在第一终端设备接收到第二访问响应消息后,第一终端设备在第一终端设备和第二终端设备之间建立辅助链路。
第三算法是针对两个终端设备的NAT类型均为端口受限锥型设计的穿越算法。示例性地,第三算法可以包括:第一终端设备通过NAT探测获得第一终端设备的外部端口;第二终端设备通过NAT探测获得第二终端设备的外部端口;第一终端设备通过第一终端设备的外部端口向第二终端设备的外部端口发送第三访问请求消息;在第二终端设备接收到第三访问请求消息后,第二终端设备向第一终端设备的外部端口,返回第三访问响应消息;在第一终端设备接收到第三访问响应消息后,在第一终端设备和第二终端设备之间建立辅助链路。
应理解,对于P2P而言,全锥型是友好的类型,易于穿透;端口受限锥型的穿透难度最大;IP受限锥型的穿透难度介于全锥型和端口受限锥型之间。基于这三种锥型的特点,各个锥型的使用概率由高到低依次为:全锥型、IP受限锥型、端口受限锥型。由于本申请不对锥型的具体类型进行探测,因此无法确定具体是全锥型、IP受限锥型或端口受限锥型,在这种情况下,可以按照各个锥型的使用概率由高到低的顺序,依次采用与各个锥型对应的穿越算法尝试进行穿越,即:先尝试使用与全锥型对应的第一算法进行穿越;如果使用第一算法穿越不成功,再尝试使用与IP受限锥型对应的第二算法进行穿越;如果使用第二算法穿越不成功,再尝试采用与端口受限锥型对应的第三算法进行穿越。
在一种可能的实现方式中,若第一终端设备的NAT类型为锥型,第二终端设备的NAT类型为对称型,则与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略可以为第二策略或第三策略。其中,第三策略包括:第一终端设备通过NAT探测获得第一终端设备的外部端口;第二终端设备通过NAT探测得知第二终端设备的外部端口的分配规律;第二终端设备向第一终端设备的外部端口发送打洞消息和第二终端设备的外部端口的分配规律;第一终端设备向第二终端设备的外部端口的分配规律中的目标端口发送第四访问请求消息;在第二终端设备接收到第四访问请求消息后,第二终端设备向第一终端设备的外部端口返回第四访问响应消息;在第一终端设备接收到第四访问响应消息后,在第一终端设备和第二终端设备之间建立辅助链路。
应理解,由于本申请不对锥型的具体类型进行探测,因此当一方是锥型时,无法确定其具体是全锥型、IP受限锥型或端口受限锥型,在这种情况下,可以按照各个锥型的使用概率由高到低的顺序,先尝试采用第二策略进行穿越,如果使用第二策略穿越不成功,再尝试使用第二策略进行穿越。当然,如果一方的NAT类型为锥型,另一方的NAT类型为对称型,也可以先尝试采用第二策略进行穿越,如果使用第二策略穿越不成功,再尝试使用第二策略进行穿越。
在一种可能的实现方式中,若第一终端设备和第二终端设备的NAT类型均为对称型,则与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略可以为第四策略。其中,第四策略为不建立辅助链路。应理解,当双方的NAT类型均为对称型时,倘若对称型NAT设备的端口分配策略没有按照预设规则进行,如没有按照端口标识连续递增或连续递减的方式分配,则预测对称型NAT设备为其私网主机分配的外部端口的成功率很低,因此可以暂时不做穿越。
在一种可能的实现方式中,移动通信链路的通话质量不满足质量条件可以包括:移动通信链路的通话质量低于第一预设通话质量。在第一终端设备和第二终端设备之间建立辅助链路之后,该方法还可以包括:当移动通信链路的通话质量低于第二预设通话质量时,第一终端设备通过移动通信链路和辅助链路分别与第二终端设备传输通话数据包。其中,第二预设通话质量低于第一预设通话质量。应理解,如果不考虑是否有必要建立并使用辅助链路,可能会导致资源消耗。由于本申请在满足条件时才会建立辅助链路并在必要时才会使用辅助链路,因此可以减少辅助链路资源消耗。
在一种可能的实现方式中,该方法还可以包括:当移动通信链路的通话质量高于或等于第二预设通话质量时,第一终端设备与第二终端设备停止使用辅助链路。这样可以减少辅助链路资源消耗。
在一种可能的实现方式中,该方法还可以包括:当移动通信链路的通话质量高于或等于第一预设通话质量,并且持续时长大于或等于预设值时,第一终端设备关闭并释放辅助链路。
第二方面,本申请提供一种P2P穿越装置,该装置包括用于执行上述第一方面的方法的单元/模块。该装置可对应于执行上述第一方面描述的方法,该装置中的单元/模块的相关描述请参照上述第一方面的描述,为了简洁,在此不再赘述。
第三方面,提供一种终端设备,包括处理器,通信接口,以及与处理器和通信接口耦合的存储器。其中,存储器中存储有指令,处理器执行指令时,使得终端设备实现如第一方面中任一项的P2P穿越方法。
第四方面,提供一种通信系统,包括至少两个如第三方面提供的终端设备。
第五方面,提供一种芯片,该芯片与存储器耦合,该芯片用于读取并执行该存储器中存储的计算机程序,以实现如第一方面中任一项的P2P穿越方法。
第六方面,提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序。当计算机程序在终端设备上运行时,使得终端设备执行如第一方面中任一项的P2P穿越方法。
第七方面,提供一种计算机程序产品。当计算机程序产品在计算机上运行时,使得计算机执行如第一方面中任一项的P2P穿越方法。
可以理解的是,上述第二方面至第七方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
图1为本申请实施例提供的三种锥型NAT的示意图;
图2为本申请实施例提供的一种探测NAT类型的流程示意图;
图3为本申请实施例提供的通过主链路和辅助链路分别传输通话数据包的架构示意图;
图4为本申请实施例提供的终端设备的结构示意图;
图5为本申请实施例提供的终端设备的软件结构框图;
图6为本申请实施例提供的P2P穿越所采用的系统架构的示意图;
图7为本申请实施例提供的终端设备1进行NAT探测的流程示意图;
图8为本申请实施例提供的3种NAT探测的具体流程示意图;
图9为本申请实施例提供的缓存探测参数的流程示意图;
图10为本申请实施例提供的NAT探测和NAT穿越的总流程的示意图;
图11为本申请实施例提供的采用端口预测算法进行NAT穿越的流程示意图;
图12为本申请实施例提供的P2P穿越装置的结构示意图。
具体实施方式
下面对本申请中涉及的一些名词或者术语进行解释说明。
1、P2P
P2P又称对等式网络,是一种不依赖中心服务器,依靠用户群(peers)直接交换信息的互联网体系。与设置有中心服务器的中央网络系统有所不同,P2P的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。在P2P模式中,主机之间可以直接通信以实现资源共享和信息交换,从而为用户之间的沟通和交流提供了更大的便利。
2、网络地址转换(network address translation,NAT)
NAT网关,又称为NAT设备,可以将私有网络(又称为私网网络、内部网络、本地网络)地址转换为公有网络(又称为外部网络、外网)地址。具体地,NAT网关可以将同一私网中的不同主机的私网地址转换为同一公网地址,并通过该公网地址间接地与公网中的其他主机通信。其中,公网地址可以包括公网IP地址和公网端口(port)。公网IP地址也称为外部IP地址,公网端口也称为外部端口。
在实际通信中,公网IP地址通常不会频繁改变,而外部端口会随私网主机和/或公网主机的变化而变化。尽管NAT网关解决了互联网协议版本4(internet protocol version4,IPv4)的网络地址不足的问题,但同时引入了另一问题:NAT网关使得处于不同私网的主机之间难以建立P2P直接通信,这在很大程度上限制了P2P的应用和发展。相关技术提出了NAT穿越(NAT traversal)技术,比如采用用户数据报协议(user datagram protocol,UDP)打洞,在处于不同私网之间的主机建立起UDP连接,从而实现直接通信。
目前,NAT会话穿越应用程序(session traversal utilities for NAT,STUN)协议允许位于NAT或多重NAT后的客户端查找自己的公网地址,以确定位于哪种类型的NAT之后以及NAT网关为某一个本地端口所绑定的外部端口。
常用的NAT类型包括:公网型(open net NAT)、对称型(symmetric NAT)和锥型(cone)等。公网型的特点是:没有NAT网关,主机直接使用公网IP。对称型的特点是:NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在网关上创建一个公网“地址端口对”映射进行转换,只有收到报文的外部主机从对应的端口对发送回应的报文才能被转换,即使内部主机使用之前用过的地址端口对去连接不同外部主机或端口时,NAT网关也会建立新的映射关系。锥型的特点是:将一个内网IP:Port固定映射到一个外网IP:Port,对于所有会话即不同的目的IP:Port都不变。
其中,锥型又分为全锥型(full-cone NAT)、IP受限型(restricted cone NAT)和端口受限型(restricted port cone NAT)。下面将IP和端口标记为(nAddr:nPort),n代表主机或NAT网关的不同角色。
图1中的(a)示出了一种全锥型NAT的示意图。全锥型的特点为:一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort),即使内部主机之前没有向外部主机发送过数据。
图1中的(b)示出了一种IP受限型NAT的示意图。IP受限型的特点为,一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机hAddr发送过数据,主机hAddr从任意端口发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
图1中的(c)示出了一种端口受限型NAT的示意图。端口受限型的特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机端口对(hAddr:hPort)发送过数据,由(hAddr:hPort)发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
根据STUN协议约定,STUN客户端需要向STUN服务器多次发送请求消息,以确定NAT类型。示例性地,在如图2所示的探测NAT类型的流程中,测试1为:STUN客户端向STUN服务器发送UDP请求包,STUN服务器以原地址发送响应包,并返回STUN服务器看到的请求包的公网IP和Port。测试2为:STUN客户端向STUN服务器发送请求包,要求STUN服务器挑战IP(changeIP)和挑战端口(change port)发送响应包,响应包包含看到的请求包的公网IP和Port。测试3:STUN客户端向STUN服务器发送请求包,要求STUN服务器挑战端口(change port)发送响应包,响应包包含看到的请求包的公网IP和Port。在经过这些探测流程后,STUN客户端可以确定具体的NAT类型:公网型、对称型、全锥型、IP受限型或端口受限型。由于上述NAT探测流程需要探测出详细的NAT类型,因此交互逻辑复杂,交互次数多,导致探测效率低。
有鉴于此,本申请实施例提供了一种P2P穿越方案:终端设备1和终端设备2在通过移动通信链路(也称为主链路)传输通话数据包的过程中,若出现移动信号(比如蜂窝信号)的强度较弱的情况,则可以基于无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),采用本申请实施例提供的NAT探测方式和NAT穿越方式,打通除主链路外的第二条通路(也称为辅助链路、辅链路)。通过主链路和辅助链路分别传输通话数据包,并对主链路和辅助链路分别传输通话数据包进行整合来提升通话质量。
下面结合图3至图12对本申请实施例涉及的P2P穿越方案进行说明。
图3示出了一种通过主链路和辅助链路分别传输通话数据包的架构示意图。如图3所示,在终端设备1和终端设备2之间建立了两路通话链路:主链路和辅助链路。其中,主链路涉及如下设备:终端设备1、基站1、核心网设备、基站2以及终端设备2。在终端设备1和终端设备2通话过程中,终端设备1和终端设备2分别通过基站提供的蜂窝网络接入核心网设备,以连接形成主链路。辅助链路涉及如下设备:终端设备1、Wi-Fi设备1、STUN服务器、Wi-Fi设备2以及终端设备2。在终端设备1和终端设备2通话过程中,若出现网络信号的强度较弱的情况下,终端设备1和终端设备2分别通过Wi-Fi设备与STUN服务器建立连接,以进行NAT探测和NAT穿越方式,建立辅助链路,并通过辅助链路传输通话数据包。此外,终端设备1和终端设备2接收到主链路的通话数据包和辅助链路的通话数据包后,可以对两种通话数据包进行去重以及合并处理,从而提高通话质量。
需要说明的是,上述STUN服务器可以为云服务器、服务器集群等。
本申请实施例提供的P2P穿越方法,可以应用在具备通话功能的终端设备中,可以理解,终端设备即为本申请实施例提供的P2P穿越方法的执行主体。终端设备也可以称为终端(terminal)、用户设备(user equipment,UE)、移动台(mobile station,MS)或移动终端(mobile terminal,MT)等。
为了能够更好地理解本申请实施例,下面对本申请实施例的终端设备的结构进行介绍。
图4示出了本申请实施例提供的终端设备的结构示意图。终端设备可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中,传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,触摸传感器180K,环境光传感器180L等。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。例如,处理器110用于执行本申请实施例中的P2P穿越方法。
其中,控制器可以是终端设备的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
外部存储器120一般指外存储器,在本申请实施例中,外部存储器是指除终端设备的内存及处理器的高速缓存以外的储存器,该储存器一般为非易失性存储器。
内部存储器121,也可以称为“内存”,可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用有机发光二极管(organic light-emitting diode,OLED)。在一些实施例中,终端设备可以包括1个或N个显示屏194,N为大于1的正整数。
终端设备还包括各类传感器,可以将各种不同的物理信号转换为电信号。示例性的,压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。陀螺仪传感器180B可以用于确定终端设备的运动姿态。气压传感器180C用于测量气压。磁传感器180D包括霍尔传感器。加速度传感器180E可检测终端设备在各个方向上(一般为三轴)加速度的大小。距离传感器180F,用于测量距离。终端设备可以通过红外或激光测量距离。接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。环境光传感器180L用于感知环境光亮度。终端设备可以根据感知的环境光亮度自适应调节显示屏194亮度。指纹传感器180H用于采集指纹。终端设备可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。温度传感器180J用于检测温度。在一些实施例中,终端设备利用温度传感器180J检测的温度,执行温度处理策略。骨传导传感器180M可以获取振动信号。
终端设备的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
终端设备可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
终端设备通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
终端设备可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
以上是以终端设备为例对本申请实施例做出的具体说明。应该理解的是,本申请实施例示意的结构并不构成对终端设备的具体限定。终端设备可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
需要说明的是,本申请实施例提供的终端设备可以是移动终端(例如用户手机)、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtualreality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等具有通话功能或支持远场SIM卡功能的终端设备上,本申请实施例对终端设备的具体类型不作任何限制。
可以理解的是,本申请实施例示意的结构并不构成对终端设备的具体限定。在本申请另一些实施例中,终端设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
另外,在上述部件之上,运行有操作系统,例如iOS操作系统,Android开源操作系统或者Windows操作系统等。在该操作系统上可以安装运行应用程序。
终端设备的操作系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明终端设备的软件结构。
图5示出了本申请实施例提供的终端设备的软件结构框图。如图5所示,终端设备可以采用分层架构,将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将软件结构的软件层从上至下依次划分为:应用程序(application,APP)层、应用程序框架(framework,FW)层、系统库(FWK LIB)层和内核(kernel)层。
应用程序层,也称为应用层,可以包括一系列应用程序包。例如,应用程序层可以包括通话APP,相机APP,日历APP,地图APP,音乐APP,图库APP,短信APP,导航APP,蓝牙APP,视频APP等应用程序。当这些应用程序包被运行时,可以通过应用编程接口(applicationprogramming interface,API)访问应用程序框架层提供的各个服务模块,并且执行相应的智能化业务。
应用程序框架层为应用程序层的应用程序提供API和编程框架。应用程序框架层包括一些预先定义的函数。如图5所示,应用程序框架层可以包括NAT探测模块、NAT穿越模块、通话(Telephony)服务模块,以及连接管理(ConnectivityManager)模块等。NAT探测模块用于向STUN服务器探测终端设备的NAT类型。NAT穿越模块用于根据探测到的NAT类型,进行NAT穿越,建议辅助链路。通话服务模块用于提供通话服务,例如负责IMS服务注册,以及电话的接通及挂断等事项。连接管理模块用于负责终端设备的无线局域网连接以及蜂窝网络注册及连接的事项。
系统库层可以包括多个功能模块,例如表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。2D图形引擎是2D绘图的绘图引擎。
在系统库层中,安卓运行时(Android Runtime)包括核心库和虚拟机。AndroidRuntime负责安卓系统的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
内核层是硬件和软件之间的层,属于安卓系统的底层部分。内核层可以包含各种驱动(drivers)接口,比如读写驱动、显示驱动,摄像头驱动,音频驱动及传感器驱动。内核层还可以包含电源管理、进程/线程等。
需要说明的是,本申请实施例虽然以Android系统为例进行说明,但是其基本原理同样适用于基于iOS或Windows等操作系统的终端设备。
在终端设备1和终端设备2通过主链路传输通话数据包的过程中,若出现蜂窝信号的强度较弱的情况,则可以通过本申请实施例提供的NAT探测方式和NAT穿越方式,打通除主链路外的辅助链路。由于本申请实施例提供的P2P穿越方案主要涉及辅助链路,下面将对用于建立辅助链路的系统架构进行具体说明。
图6示出了本申请实施例提供的P2P穿越所采用的系统架构的示意图。如图6所示,与传统的P2P穿越所采用的系统架构有所不同,在本申请实施例中,P2P穿越所采用的系统架构不但对STUN服务器(也称为第一服务器)进行了改进,为STUN服务器设置了用于NAT探测的两个端口,还增加了一个信息管理(TRS)服务器(也称为第二服务器)。
其中,TRS服务器可以用于为终端设备1和终端设备2提供STUN服务器的IP、STUN服务器的两个端口、挑战码以及挑战码的有效期等。STUN服务器可以用于通过两个端口向终端设备1和终端设备2提供NAT地址。终端设备1和终端设备2可以用于根据STUN服务器返回的NAT地址和本地地址,确定NAT类型,然后根据NAT探测结果,采用不同的NAT穿越方式。
如果终端设备1探测到NAT类型为公网型,那么说明不存在为终端设备1提供NAT服务的NAT网关1。如果终端设备1探测到NAT类型为对称型或锥型,那么说明存在为终端设备1提供NAT服务的NAT网关1。
如果终端设备2探测到NAT类型为公网型,那么说明不存在为终端设备2提供NAT服务的NAT网关2。如果终端设备2探测到NAT类型为对称型或锥型,那么说明存在为终端设备2提供NAT服务的NAT网关2。
需要说明的是,为了图示清楚简洁,在图6中未示出无线局域网设备。应理解,在实际实现时,还可以包括如图3所示的Wi-Fi设备1和Wi-Fi设备2,以及其他任意可能的中继设备、核心网设备等,本申请实施例不作限定。
下面结合图6所示的系统架构,通过下述实施例一和实施例二详细地说明本申请实施例提供的P2P穿越方案。其中,实施例一主要描述了NAT探测流程,实施例二主要描述了NAT穿越流程。
实施例一
在终端设备1和终端设备2通过主链路传输通话数据包的过程中,若出现蜂窝信号的强度较弱的情况,则终端设备1和终端设备2需要进行NAT探测,以确定NAT类型。由于两者的探测流程类似,因此下面以终端设备1为NAT探测的执行主体为例进行描述。可以理解,在实际实现时,终端设备2也可以采用相同方式进行NAT探测。
图7示出了终端设备1进行NAT探测的流程示意图。如图7所示,该NAT探测流程可以包括S11至S16。
S11.终端设备1向TRS服务器发送请求消息。该请求消息用于请求获取STUN服务器的相关信息。
S12.终端设备1接收来自TRS服务器的响应消息。该响应消息包括了STUN服务器的相关信息。
在终端设备1向STUN服务器发送探测消息之前,由于终端设备1尚未获知STUN服务器的IP地址等相关信息,无法向STUN服务器发送探测消息,而TRS服务器预先存储了STUN服务器的相关信息,因此终端设备1可以先向TRS服务器发送一个请求消息。在TRS服务器获取到请求消息信息后,可以向终端设备返回一个数据包。
在一些实施例中,TRS服务器返回的数据包可以包括STUN服务器的IP地址、STUN服务器的两个端口的端口号。如此,终端设备1可以根据STUN服务器的IP地址、STUN服务器的两个端口的端口号,向STUN服务器的某个端口发送探测消息。
在另一些实施例中,TRS服务器返回的数据包还可以包括挑战码(challenge)。挑战码也称为挑战口令,是指遵循握手验证协议(challenge-handshake authenticationprotocol,CHAP)生成的一组加密口令,用于在传输过程中保证用户信息不被篡改或泄露。
在又一些实施例中,TRS服务器返回的数据包还可以包括有效期,比如若有效期是5分钟,则即使消息被劫持,只能攻击服务器5分钟,5分钟后该消息为无效消息,从而保证了数据的有效性。
S13.终端设备1根据STUN服务器的IP,向STUN服务器的第一端口发送第一探测消息,该第一探测消息用于请求获取终端设备1的外网地址。STUN服务器向终端设备1返回第一NAT地址。
上述第一端口为终端设备1从STUN服务器的两个端口中随机选择的一个端口。
在一些实施例中,第一探测消息可以为UDP包。
UDP包的消息头中的事务标识(transaction ID)可以包括下述至少一项:
①挑战码。
STUN服务器解析事务标识中的挑战码进行校验,以确定消息是否合法。只有在消息合法的情况下,STUN服务器才会向终端设备1返回第一NAT地址。
②由终端设备1自定义生成的消息序号seq。消息序号seq用于唯一标识一个探测消息。
由于终端设备1可能向STUN服务器多次发送探测消息,因此可以通过添加消息序号seq的方式保证消息的唯一性。具体地,在每次交互时,可以在上一次交互的消息序号seq的基础上+1。
③重传次数retryNum。
④软件版本号。
终端设备1安装有NAT探测和NAT穿越的应用程序。由于该应用程序可能升级至不同版本,使得向STUN服务器发送的探测消息编码方式、编码内容等可能存在差异,为了便于STUN服务器对来自不同版本的应用程序的探测消息进行解析,可以在UDP包中携带软件版本号,从而提高了兼容性。
在终端设备1向STUN服务器发送探测消息后,如果在有效期内没有收到服务器返回的NAT地址,则会触发超时重发,再次向STUN服务器发送探测消息。
在一些实施例中,终端设备1设置了一个重传次数retryNum,即允许终端设备1向STUN服务器重新发送探测消息的最大次数。应理解,通过设置最大重发次数,可以避免因网络故障或STUN服务器故障等各种原因导致的持续无效探测。
示例性地,以最大重发次数为2次为例。在终端设备1第一次向STUN服务器发送探测消息后,如果在有效期内没有收到服务器返回的NAT地址,触发超时重发,第二次向STUN服务器发送探测消息。在终端设备1第二次向STUN服务器发送探测消息后,如果在有效期内没有收到服务器返回的NAT地址,触发超时重发,第三次向STUN服务器发送探测消息。在终端设备1第三次向STUN服务器发送探测消息后,如果在有效期内仍没有收到服务器返回的NAT地址,那么停止NAT探测。
在一些实施例中,终端设备1还设置了相邻两次重复发送对应的时间间隔的计算算法。
假设与第i次重复发送对应的时间间隔为ti,则与第i+1次重复发送对应的时间间隔为ti+1,则两者满足下述式1或式2。其中,i用于表示重复发送次数。
ti+1=ti+Δt (式1)
ti+1=ti+i*Δt (式2)
以终端设备1采用上述式1为例。假设Δt=1s,t0=0,最大重发次数为3次。在第一次向STUN服务器发送探测消息后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t1=1s后,触发第一次超时重发,向STUN服务器发送探测消息。在第一次超时重发后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t2=2s后,触发第二次超时重发,向STUN服务器发送探测消息。在第二次超时重发后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t2=3s后,触发第三次超时重发,向STUN服务器发送探测消息。
以终端设备1采用上述式2为例。假设Δt=1s,t0=0,最大重发次数为3次。在第一次向STUN服务器发送探测消息后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t1=1s后,触发第一次超时重发,向STUN服务器发送探测消息。在第一次超时重发后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t2=3s后,触发第二次超时重发,向STUN服务器发送探测消息。在第二次超时重发后,如果在有效期内没有收到服务器返回的NAT地址,开始计时,在计时时长达到t2=6s后,触发第三次超时重发,向STUN服务器发送探测消息。
S14.终端设备1判断第一NAT地址与终端设备1的本地地址是否相同。
需要说明的是,本申请实施例可以只对IPv4或互联网协议版本6(internetprotocol version 6,IPv6)探测,也可以对IPv4和IPv6同时探测。
如果第一NAT地址与终端设备1的本地地址相同,那么可以确定终端设备1的本地地址为公网地址,终端设备1没有位于NAT网关后,即不存在为终端设备1提供NAT服务的NAT网关,从而确定NAT类型为公网型,并结束探测流程。
如果第一NAT地址与终端设备1的本地地址不同,那么可以确定终端设备1位于NAT网关后,即存在为终端设备1提供NAT服务的NAT网关1,从而确定NAT类型为非公网型,并继续判断NAT类型为为锥型还是对称型,即执行下述S15。
S15.终端设备1根据STUN服务器的IP地址,向STUN服务器的第二端口发送第二探测消息,该第二探测消息用于请求获取终端设备1的外网地址。STUN服务器向终端设备1返回第二NAT地址。
在一些实施例中,第二探测消息可以为UDP包。该UDP包的消息头中的事务标识可以包括下述至少一项:挑战码、由终端设备1自定义生成的消息序号seq,以及重传次数retryNum组成。
需要说明的是,在第二探测消息中包括的消息序号seq与在第一探测消息中包括的消息序号seq不同。STUN服务器可以根据这两个探测消息分别包括的消息序号seq,对这两个消息进行区分。比如,若在第一探测消息的消息序号seq为1,则第二探测消息的消息序号seq为2。再比如若第一探测消息的消息序号seq为100,则第二探测消息的消息序号seq为101。
对于S15的具体实现方式可以参照上述S13的描述,此处不再赘述。
本申请实施例是以终端设备1先向STUN服务器的第一端口发送探测消息,再向STUN服务器的第二端口发送探测消息为例进行示例说明的。在实际实现时,终端设备1也可以先向STUN服务器的第二端口发送探测消息,再向STUN服务器的第一端口发送探测消息。
S16.终端设备1判断第一NAT地址与第二NAT地址是否相同。
如果第一NAT地址与第二NAT地址相同,那么终端设备1可以确定NAT类型为锥型,并结束探测流程。如果第一NAT地址与第二NAT地址不同,那么终端设备1可以确定NAT类型为对称型,并结束探测流程。
需要说明的是,上述实施例是以终端设备1先发送第一探测消息,再发送第二探测消息为例进行示例说明的,其并不对本申请实施例形成限定。在实际实现时,终端设备1也可以同时向STUN服务器的第一端口和第二端口分别发送第一探测消息和第二探测消息,并同时接收由第一端口和第二端口分别返回的第一NAT地址和第二NAT地址,然后对第一NAT地址、第二NAT地址与本地地址进行比较。若第一NAT地址、第二NAT地址与本地地址相同,则确定为公网型;或者,若第一NAT地址、第二NAT地址均与本地地址不同,则确定为锥型;或者,若第一NAT地址与第二NAT地址不同,则第一终端设备确定NAT类型为对称型。
在一些实施例中,终端设备1的本地地址、STUN服务器返回的NAT地址可以由IP地址和端口号组成。
根据上述实施例的描述,NAT探测部分主要是为了确定当前客户端的NAT类型。与传统NAT类型探测不同,这里简化了探测类型,仅区分锥型和对称型,简化了交互逻辑。另外,STUN服务器仅需配置一个公网IP地址,最多仅需要发送两次探测消息即可确定NAT类型到底是锥型,对称型还是公网IP,提升探测效率。
下面以IP:Port表示IP地址和端口号为例,结合图8示例说明NAT探测的具体流程。
图8中的(a)示出了当不存在为终端设备1提供NAT服务的NAT网关时,NAT探测的具体流程。假设终端设备1的IP地址为192.168.0.100,终端设备1的端口号为100,STUN服务器的IP地址为210.12.27.166,STUN服务器的端口号为1000和2000。该NAT探测可以包括下述步骤A1至步骤A3。
步骤A1.终端设备1直接由源地址192.168.0.100:100(即本地地址),向目的地址210.12.27.166:1000发送UDP包1。该步骤是以终端设备1向STUN服务器的端口1000发送UDP包1为例进行说明的,在实际实现时,终端设备1也可以向STUN服务器的端口2000发送UDP包1,可以根据使用需求进行调整。
步骤A2.STUN服务器的端口1000接收到UDP1后,若对挑战码校验成功,则直接向源地址192.168.0.100:100返回第一NAT地址192.168.0.100:100。
步骤A3.由于第一NAT地址与本地地址相同,因此终端设备1确定NAT类型为公网型,并结束探测流程。
应理解,当不存在为终端设备1提供NAT服务的NAT网关时,终端设备1的本地地址即为外网地址,因此在终端设备1进行第一次NAT探测时,从STUN服务器获取的第一NAT地址与本地地址相同,从而能够确定NAT类型为公网型。
图8中的(b)示出了当存在为终端设备1提供NAT服务的锥型NAT网关时,NAT探测的具体流程。假设终端设备1的IP地址为192.168.0.100,终端设备1的端口号为100,NAT网关1的IP地址为210.21.12.140,NAT网关1的端口号为7000,STUN服务器的IP地址为210.12.27.166,STUN服务器的端口号为1000和2000。其中,NAT网关1的NAT类型为锥型,该锥型NAT网关可以将一个本地地址固定转换为一个外网地址,此时为一对一映射。该NAT探测可以包括下述步骤B1至步骤B9。
步骤B1.当终端设备1由源地址192.168.0.100:100(即本地地址)向目的地址210.12.27.166:1000(即STUN服务器的端口1000)发送UDP包1时,UDP包1先达到NAT网关1。
步骤B2.NAT网关1将UDP包1的源地址修改为210.21.12.140:7000,然后通过NAT网关1的端口7000将其发送到目的地址210.12.27.166:1000,即STUN服务器的端口1000。
步骤B3.STUN服务器的端口1000接收到UDP1后,若对挑战码校验成功,则向NAT网关1的端口7000返回第一NAT地址210.21.12.140:7000。
步骤B4.NAT网关1将第一NAT地址210.21.12.140:7000转发至终端设备1。
步骤B5.由于第一NAT地址210.21.12.140:7000与本地地址192.168.0.100:100不同,因此终端设备1确定NAT类型为非公网型,并继续判断为锥型还是对称型,由源地址192.168.0.100:100(即本地地址)向目的地址210.12.27.166:2000(即STUN服务器的端口2000)发送UDP包2。
步骤B6.NAT网关1将UDP包2的源地址修改为210.21.12.140:7000,然后通过NAT网关1的端口7000将其发送到目的地址210.12.27.166:2000。
步骤B7.STUN服务器的端口2000接收到UDP2后,若对挑战码校验成功,则向NAT网关1的端口7000返回第二NAT地址210.21.12.140:7000。
步骤B8.NAT网关1将第二NAT地址210.21.12.140:7000转发至终端设备1。
步骤B9.由于第一NAT地址210.21.12.140:7000与第二NAT地址210.21.12.140:7000相同,因此终端设备1确定NAT类型为锥型,并结束探测流程。
应理解,当存在为终端设备1提供NAT服务的锥型NAT网关时,终端设备1的本地地址与外网地址不同。由于锥型NAT网关的特点是将一个本地地址固定转换为一个外网地址,因此在终端设备1进行两次NAT探测后,从STUN服务器获取的两个NAT地址相同,从而能够确定NAT类型为锥型NAT。
图8中的(c)示出了当存在为终端设备1提供NAT服务的对称型NAT网关时,NAT探测的具体流程。假设终端设备1的IP地址为192.168.0.100,终端设备1的端口号为100,NAT网关1的IP地址为210.21.12.140,NAT网关1的端口号为7000和8000,STUN服务器的IP地址为210.12.27.166,STUN服务器的端口号为1000和2000。其中,NAT网关1的NAT类型为对称型,该对称型NAT网关可以将一个本地地址固定转换为多个外网地址,此时为一对多映射。该NAT探测可以包括下述步骤C1至步骤C9。
步骤C1.当终端设备1由源地址192.168.0.100:100(即本地地址)向目的地址210.12.27.166:1000(即STUN服务器的端口1000)发送UDP包1时,UDP包1先达到NAT网关1。
步骤C2.NAT网关1将UDP包1的源地址修改为210.21.12.140:7000,然后通过NAT网关1的端口7000将其发送到目的地址210.12.27.166:1000,即STUN服务器的端口1000。
步骤C3.STUN服务器的端口1000接收到UDP1后,若对挑战码校验成功,则向NAT网关1的端口7000返回第一NAT地址210.21.12.140:7000。
步骤C4.NAT网关1将第一NAT地址210.21.12.140:7000转发至终端设备1。
步骤C5.由于第一NAT地址210.21.12.140:7000与本地地址192.168.0.100:100不同,因此终端设备1确定NAT类型为非公网型,并继续判断为锥型还是对称型,由源地址192.168.0.100:100(即本地地址)向目的地址210.12.27.166:2000(即STUN服务器的端口2000)发送UDP包2。
步骤C6.NAT网关1将UDP包2的源地址修改为210.21.12.140:8000,然后通过NAT网关1的端口8000将其发送到目的地址210.12.27.166:2000。
步骤C7.STUN服务器的端口2000接收到UDP2后,若对挑战码校验成功,则向NAT网关1的端口8000返回第二NAT地址210.21.12.140:8000。
步骤C8.NAT网关1将第二NAT地址210.21.12.140:8000转发至终端设备1。
步骤C9.由于第一NAT地址210.21.12.140:7000与第二NAT地址210.21.12.140:8000不同,因此终端设备1确定NAT类型为对称型,并结束探测流程。
应理解,当存在为终端设备1提供NAT服务的对称型NAT网关时,终端设备1的本地地址与外网地址不同。由于对称型NAT网关的特点是将一个本地地址转换为多个外网地址,因此在终端设备1进行两次NAT探测后,从STUN服务器获取的两个NAT地址不同,从而能够确定NAT类型为对称型NAT。
上述实施例介绍了NAT探测的具体流程。在终端设备1探测到NAT类型后,终端设备1还可以在本地缓存探测参数。示例性地,结合图7,图9示出了缓存探测参数的流程示意图。其中,S11至S16可参见上述图7相关描述,此处不再赘述。不同之处在于,在S11之前还可以包括S17和S18,在S11之后还可以包括S19。
S17.当终端设备1监听到主链路通话质量不满于预设条件时,终端设备1检测本地是否缓存有相关参数。相关参数可以包括:终端设备1的NAT类型,比如终端设备1的NAT类型为公网型、锥型或对称型。
在本地没有缓存有相关参数的情况下,终端设备1需要探测终端设备1的NAT类型,即执行S11至S16。在本地缓存有相关参数的情况下,终端设备1执行下述S18。
S18.终端设备1检测相关参数的缓存时长是否超过预设时长。如果没有超过预设时长,那么相关参数仍有效,可以直接将相关参数中的NAT类型,确定终端设备1的NAT类型。如果超过预设时长,那么终端设备1需要重新进行NAT探测,即执行S11至S16。
在一些实施例中,相关参数还可以包括:终端设备1的NAT类型的获取时间。如果终端设备1的NAT类型的获取时间距离终端设备1的系统时间大于或等于预设时长,需要重新探测终端设备1的NAT类型。比如,预设时长为7天,当终端设备1的NAT类型的获取时长超过7天时,终端设备1需要重新进行NAT探测。
S19.终端设备1在本地缓存本次的NAT探测参数,比如本次探测到的NAT类型,以及本次探测到的NAT类型的时间等。
应理解,对于需要频繁补包的通话场景,通过在本地缓存NAT探测参数,可以直接使用缓存的NAT探测参数进行NAT穿越,从而提高了P2P穿透效率。
实施例二
上述实施例一介绍了在终端设备1和终端设备2通过主链路传输通话数据包的过程中,如果出现蜂窝信号的强度较弱的情况,终端设备1和终端设备2如何通过NAT探测,确定NAT类型的具体方式。在完成NAT探测后,终端设备1和终端设备2将根据NAT探测结果,采用与之对应的策略进行打洞穿越。
图10示出了NAT探测和NAT穿越的总流程的示意图。如图10所示,该NAT探测和NAT穿越的总流程可以包括S21至S26。
S21.终端设备1和终端设备2建立移动通信链路,即建立主链路。
示例性地,如图3所示,主链路为由终端设备1、基站1、核心网设备、基站2和终端设备2等实体设备组建的虚拟链路。终端设备1采集的通话数据包1依次经过基站1、核心网设备、基站2发送至终端设备2,终端设备2采集的通话数据包2依次经过基站2、核心网设备、基站1发送至终端设备1。
S22.终端设备1、终端设备2分别检测主链路的通话质量,以确定是否满足质量条件。
上述通话质量可以是参考信号接收功率(reference signal receiving power,RSRP)、参考信号接收质量(reference signal receiving quality,RSRQ)等蜂窝信号质量参数,也可以是主链路的通话数据包丢包率、时延和抖动等参数。例如,若RSRP或RSRQ越大,则通话质量越优。再例如,若通话数据包丢包率越大,则通话质量越差。又例如,若通话数据包时延越大,则通话质量越差。
示例性地,以通话信号强度来衡量通话质量是否优劣为例。通话信号强度可以采用信号格或条的数量表示。信号格数越多,则表示通话质量越好;信号格数越少,则表示通话质量越差。例如,5格信号表示通话质量最好,0格信号表示通话质量最差。由于通话时信号不稳定,因此信号格数会在0格到5格之间发生变化。终端设备1检测通话信号强度是否低于第一预设值(例如以5格信号强度为例)。当终端设备1检测到当前信号强度下降到4格信号强度时,表明通话质量不稳定,可以认为终端设备1目前处于可能需要使用辅助链路进行通信补偿的场景,因此可以建立辅助链路。而当终端设备1检测到当前信号强度保持在5格信号强度时,表明通话质量满足质量条件,暂时无需建立辅助链路。
S23.当任意一方不满足质量条件时,终端设备1和终端设备2判断是否需要重新进行NAT探测。
由于NAT穿越需要探测终端设备1和终端设备2的NAT类型,因此当终端设备1和终端设备2中的任意一方检测到不满足质量条件时,需要通知对方当前的主链路的通话质量不满足质量条件,以便终端设备1和终端设备2判断各自是否需要重新进行NAT探测。
结合上述实施例S17和S18的描述,终端设备1和终端设备2可以先检测本地是否缓存有相关参数。相关参数可以包括:终端设备1的NAT类型和终端设备2的NAT类型。
在终端设备1/终端设备2本地没有缓存有相关参数的情况下,终端设备1/终端设备2需要探测终端设备1/终端设备2的NAT类型,即执行下述S24。
在终端设备1/终端设备2本地缓存有相关参数的情况下,终端设备1/终端设备2检测相关参数的缓存时长是否超过预设时长。如果没有超过预设时长,那么相关参数仍有效,可以直接将相关参数中的NAT类型,确定终端设备1/终端设备2的NAT类型。如果超过预设时长,那么终端设备1/终端设备2需要重新进行NAT探测,即执行下述S24。
需要说明的是,在上次NAT穿越时,终端设备1和终端设备2相互交换了各自的NAT类型,因此终端设备1还可能存储有终端设备2的NAT类型,终端设备2还可能存储有终端设备1的NAT类型。当终端设备1和终端设备2均存储有终端设备1的NAT类型和终端设备2的NAT类型,且这两个NAT类型的缓存时长均没有超出预设时长时,终端设备1和终端设备2无需重新进行NAT探测,可以直接进行NAT穿越,即执行S26。否则,终端设备1和/或终端设备2需要重新进行NAT探测。
S24.当终端设备1需要重新进行NAT探测时,终端设备1先向TRS服务器发送请求消息,以从TRS服务器获取STUN服务器的相关信息,比如STUN服务器的IP地址、STUN服务器的两个端口的端口号、挑战码和有效期,再向STUN服务器发送一次或两次探测消息,然后根据STUN服务器返回的NAT地址,确定NAT类型。
当终端设备2需要重新进行NAT探测时,终端设备2先向TRS服务器发送请求消息,以从TRS服务器获取STUN服务器的相关信息,比如STUN服务器的IP地址、STUN服务器的两个端口的端口号、挑战码和有效期,再向STUN服务器发送一次或两次探测消息,然后根据返STUN服务器回的NAT地址,确定NAT类型。
对于S24的具体实现方式可以参照上述S11至S16的描述,此处不再赘述。
S25.终端设备1和终端设备2相互告知对方各自的NAT类型。
第1种场景是:终端设备1和终端设备2均重新进行了NAT探测。
如果终端设备1重新进行了NAT探测,那么在终端设备1探测到NAT类型后,终端设备1向终端设备2发送通知消息,告知终端设备1的NAT类型。
如果终端设备2重新进行了NAT探测,那么在终端设备2探测到NAT类型后,终端设备2向终端设备1发送通知消息,告知终端设备2的NAT类型。
第2种场景是:仅终端设备1重新进行了NAT探测。
如果终端设备1重新进行了NAT探测,那么在终端设备1探测到NAT类型后,终端设备1向终端设备2发送通知消息,告知终端设备1的NAT类型。
终端设备2直接将在本地缓存的终端设备2的NAT类型告知终端设备1。
第3种场景是:仅终端设备2重新进行了NAT探测。
如果终端设备2重新进行了NAT探测,那么在终端设备2探测到NAT类型后,终端设备2向终端设备1发送通知消息,告知终端设备2的NAT类型。
终端设备1直接将在本地缓存的终端设备1的NAT类型告知终端设备2。
S26.终端设备1和终端设备2采用与双方的NAT类型对应的策略建立辅助链路。
在本申请实施例中,不同的NAT探测结果对应不同的穿越策略。
下面结合表1说明如何根据双方的NAT类型,确定与之对应的策略。
表1
参照表1,终端设备1和终端设备2的NAT类型具体分为下述四种情况:
(1)无论终端设备1是IPV4公网型,还是IPV6公网型,由于终端设备1的本地地址就是公网地址,因此终端设备2均可以直接访问终端设备1的公网地址。即,只要一方的NAT类型为公网型,那么无论另一方的NAT类型为何种NAT类型,均可以采用策略1建立辅助链路。
其中,策略1包括步骤:终端设备1监听本地端口port1。终端设备2直接向终端设备1的本地IP+本地端口port1(即公网地址)发送请求消息,以请求建立辅助链路。终端设备1监听到请求消息后,在终端设备1和终端设备2之间建立辅助链路。
(2)如果双方的NAT类型均为锥型,那么采用策略2建立辅助链路。
其中,策略2包括下述步骤:先采用穿越算法1。如果采用穿越算法1(也称为第一算法)穿越成功,建立辅助链路;如果采用穿越算法1穿越不成功,再采用穿越算法2(也称为第二算法)。如果采用穿越算法2穿越成功,建立辅助链路;如果采用穿越算法2穿越不成功,采用穿越算法3(也称为第三算法)。
下面对穿越算法1、穿越算法2和穿越算法3进行示例说明。
穿越算法1是针对一方的NAT类型为全锥型,另一方的NAT类型为任意锥型或对称型设计的穿越算法。结合上述实施例的描述,全锥型NAT的特点为:一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort)。
利用全锥型NAT的特点,穿越算法1具体可以包括下述步骤:
a1.终端设备1向终端设备2的任意一个外部端口发送请求消息(比如UDP包),即尝试终端设备2的任意一个外部端口。
a2.在终端设备2的某个端口接收到该请求消息后,终端设备2向终端设备1的公网地址+任意一个外部端口返回响应消息,即向NAT网关1的任意一个外部端口发送响应消息。
a3.NAT网关1将该响应消息转发至终端设备1,终端设备1在终端设备1和终端设备2之间建立辅助链路。
穿越算法2是针对一方的NAT类型为IP受限锥型,另一方的NAT类型为IP受限锥型、端口受限锥型或对称型设计的穿越算法。结合上述实施例的描述,IP受限锥型的特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机hAddr发送过数据,主机hAddr从任意端口发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
利用IP受限锥型NAT的特点,穿越算法2具体可以包括下述步骤:
b1.终端设备1通过NAT探测得知终端设备1的外部端口port1,即终端设备1的本地地址被映射到NAT网关1的外部地址。
b2.终端设备1通过外部端口port1向终端设备2的任意一个外部端口发送请求消息(比如UDP包),即尝试终端设备2的任意一个外部端口。另外,终端设备1开始监听外部端口port1,以确定终端设备2是否返回响应消息。
b3.在终端设备2接收到该请求消息后,终端设备2向终端设备1的公网地址+外部端口port1返回响应消息,即向NAT网关1的端口port1发送响应消息。
b4.NAT网关1的外部端口port1将响应消息转发至终端设备1,终端设备1在终端设备1和终端设备2之间建立辅助链路。
穿越算法3是针对双方的NAT类型为端口受限锥型设计的穿越算法。结合上述实施例的描述,端口受限锥型的特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机端口对(hAddr:hPort)发送过数据,由(hAddr:hPort)发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
利用端口受限锥型的特点,穿越算法3具体可以包括下述步骤:
c1.终端设备1通过NAT探测得知终端设备1的外部端口port1,即终端设备1的本地地址被映射到NAT网关1的外部地址。此外,在终端设备1完成NAT探测后,可以向终端设备2发送消息,以告知终端设备1的外部端口port1。
c2.终端设备2通过NAT探测得知终端设备2的外部端口port2,即终端设备2的本地地址被映射到NAT网关2的外部地址。此外,在终端设备2完成NAT探测后,可以向终端设备1发送消息,以告知终端设备2的外部端口port2。
c3.终端设备1通过外部端口port1向终端设备2的外部端口port2发送请求消息(比如UDP包),即尝试终端设备2的外部端口port2。另外,终端设备1开始监听外部端口port1,以确定终端设备2是否返回响应消息。
c4.在终端设备2接收到该请求消息后,终端设备2向终端设备1的公网地址+外部端口port1返回响应消息,即向NAT网关1的端口port1发送响应消息。
c5.NAT网关1的外部端口port1将响应消息转发至终端设备1,终端设备1在终端设备1和终端设备2之间建立辅助链路。
至此,本申请实施例已经完成对穿越算法1、穿越算法2和穿越算法3的说明。对于P2P而言,全锥型是友好的类型,易于穿透;端口受限锥型的穿透难度最大;IP受限锥型的穿透难度介于全锥型和端口受限锥型之间。基于这三种锥型的特点,各个锥型的使用概率由高到低依次为:全锥型、IP受限锥型、端口受限锥型。结合实施例的描述,由于本申请不对锥型的具体类型进行探测,因此无法确定具体是全锥型、IP受限锥型或端口受限锥型,在这种情况下,可以按照各个锥型的使用概率由高到低的顺序,依次采用与各个锥型对应的穿越算法尝试进行穿越,即:先尝试使用与全锥型对应的穿越算法1进行穿越;如果使用穿越算法1穿越不成功,再尝试使用与IP受限锥型对应的穿越算法2进行穿越;如果使用穿越算法2穿越不成功,再尝试采用与端口受限锥型对应的穿越算法3进行穿越。
(3)如果一方的NAT类型为锥型,另一方的NAT类型为对称型,那么采用策略2或策略3建立辅助链路。
具体分为下述几种类型:
类型1.一方的NAT类型为全锥型,另一方的NAT类型为对称型。
对于类型1,在上述实施例(2)中已经介绍可以采用穿越算法1。在这种情况下,可以尝试采用策略2进行穿越。
类型2.一方的NAT类型为IP受限锥型,另一方的NAT类型为对称型。
对于类型2,在上述实施例(2)中已经介绍可以采用穿越算法2。在这种情况下,可以尝试采用策略2进行穿越。
类型3.一方的NAT类型为端口受限锥型,另一方的NAT类型为对称型。
对于类型3,可以采用策略3建立辅助链路。其中,策略3为端口预测算法,比如哈希(hash)桶算法。
如图11所示,端口预测算法具体可以包括下述步骤:
d1.终端设备1通过NAT探测得知终端设备1的外部IP和外部端口port1,即终端设备1的本地地址被映射到NAT网关1的外部地址。此外,在终端设备1完成NAT探测后,可以向终端设备2发送消息,以告知终端设备1的外部端口port1。
d2.终端设备2通过NAT探测得知终端设备2的外部端口的分配规律。其中,终端设备2的外部端口的分配规律可以包含桶号、桶高、块间距和/或块高等参数,可以根据实际使用需求进行调整,本申请实施例不作任何限定。
d3.终端设备2向终端设备1的外部端口port1发送打洞消息(比如UDP包),限制到NAT网关2(即生存时间(time to live,TTL))进行打洞。同时,终端设备2将外部端口的分配规律发送到终端设备1的外部端口port1。
d4.在终端设备1接收到由NAT网关1转发的请求消息和外部端口的分配规律后,向终端设备2的公网地址+外部端口的分配规律中的某个端口port(比如port2)发送请求消息(比如UDP包),以请求建立辅助链路。NAT网关2将请求消息转发至终端设备。
d5.如果终端设备2在TTL内收到该请求消息,那么终端设备2向终端设备1的公网地址+外部端口port1返回响应消息,即向NAT网关1的端口port1发送响应消息。
d6.NAT网关1的外部端口port1将响应消息转发至终端设备1,终端设备1在终端设备1和终端设备2之间建立辅助链路。
至此,本申请实施例已经完成对3种类型的说明。由于本申请不对锥型的具体类型进行探测,因此当一方是锥型时,无法确定其具体是全锥型、IP受限锥型或端口受限锥型,在这种情况下,可以按照各个锥型的使用概率由高到低的顺序,先尝试采用策略2进行穿越,如果使用策略2穿越不成功,再尝试使用策略3进行穿越。
当然,如果一方的NAT类型为锥型,另一方的NAT类型为对称型,也可以先尝试采用策略3进行穿越,如果使用策略3穿越不成功,再尝试使用策略2进行穿越,本申请实施例不作限定。
(4)如果双方的NAT类型均为对称型,那么暂时不建立辅助链路,即不做穿越。
当双方的NAT类型均为对称型时,倘若对称型NAT设备的端口分配策略没有按照预设规则进行,如没有按照端口标识连续递增或连续递减的方式分配,则预测对称型NAT设备为其私网主机分配的外部端口的成功率很低,因此可以不做穿越。
假设上述S22中的主链路的通话质量不满足质量条件具体包括:主链路的通话质量低于第一预设通话质量(比如5格信号)。在终端设备1和终端设备2之间建立辅助链路之后,一种方式为,终端设备1和终端设备2可以立即基于主链路和辅助链路传输通话数据包。另一种方式为,终端设备1和终端设备2可以暂时不启用辅助链路传输通话数据包,直到当主链路的通话质量低于第二预设通话质量(比如4格信号)时,第一终端设备基于主链路和辅助链路传输通话数据包。
在终端设备1和终端设备2之间建立辅助链路之后,终端设备1和终端设备2可以在本地缓存终端设备1的NAT类型和终端设备2的NAT类型,从而终端设备1和终端设备2可以在下次补包场景时,直接使用本地存储的NAT类型,无需重新探测,因此提高了P2P穿越效率。
上述主要从终端设备的角度对本申请实施例提供的方案进行了介绍。可以理解的是,终端设备为了实现上述功能,其包含了执行每一个功能相应的硬件结构或软件模块,或两者结合。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对终端设备进行功能模块的划分,例如,可以对应每一个功能划分每一个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以采用对应每一个功能划分每一个功能模块为例进行说明。
图12示出了本申请实施例提供的一种P2P穿越装置的结构示意图。该装置可以为第一终端设备、第一终端设备中的芯片、片上系统、或者其他能够实现上述方法中第一终端设备的功能的装置等,该装置可以用于执行上述方法实施例中涉及的第一终端设备的功能。如图12所示,该装置120可以包括:数据传输模块121、NAT探测模块122、共享模块123和NAT穿越模块124。
数据传输模块121,用于通过移动通信链路与第二终端设备传输通话数据包。
NAT探测模块122,用于当移动通信链路的通话质量不满足质量条件时,向STUN服务器的一个或两个端口发送探测消息,并接收由一个或两个端口返回的NAT地址,以及根据第一终端设备的本地地址、及由一个或两个端口返回的NAT地址,确定第一终端设备的NAT类型。其中,第一终端设备的NAT类型为公网型、锥型或对称型。
共享模块123,用于向第二终端设备发送第一终端设备的NAT类型,并接收由第二终端设备发送的第二终端设备的NAT类型。其中,第二终端设备的NAT类型为公网型、锥型或对称型。
NAT穿越模块124,用于采用与第一终端设备的NAT类型和第二终端设备的NAT类型对应的策略,在第一终端设备和第二终端设备之间建立辅助链路。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序;当该计算机可读存储介质在小型智能设备或服务器上运行时,使得该小型智能设备或服务器执行如上所示的方法。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘或磁带),光介质或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序代码,当计算机程序代码在计算机上运行时,使得计算机执行上述各实施例中的方法。
本申请实施例还提供了一种芯片,该芯片与存储器耦合,该芯片用于读取并执行存储器中存储的计算机程序或指令,以执行上述各实施例中的方法。该芯片可以为通用处理器,也可以为专用处理器。需要说明的是,该芯片可以使用下述电路或者器件来实现:一个或多个现场可编程门阵列(field programmable gate array,FPGA)、可编程逻辑器件(programmable logic device,PLD)、控制器、状态机、门逻辑、分立硬件部件、任何其他适合的电路、或者能够执行本申请通篇所描述的各种功能的电路的任意组合。
需要说明的是,本申请的说明书、权利要求书及附图中的术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上,“至少两个”是指两个或三个及三个以上,“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”或其类似表达,是指这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b或c中的至少一项,可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
应理解,在本申请实施例中,“与A对应的B”表示B与A相关联。例如,可以根据A可以确定B。还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。此外,本申请实施例中出现的“连接”是指直接连接或者间接连接等各种连接方式,以实现设备间的通信,本申请实施例对此不做任何限定。
本申请实施例中出现的“传输”(transmit/transmission)如无特别说明,是指双向传输,包含发送和/或接收的动作。具体地,本申请实施例中的“传输”包含数据的发送,数据的接收,或者数据的发送和数据的接收。或者说,这里的数据传输包括上行和/或下行数据传输。数据可以包括信道和/或信号,上行数据传输即上行信道和/或上行信号传输,下行数据传输即下行信道和/或下行信号传输。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备,如:可以是单片机,芯片等,或处理器执行本申请各个实施例提供方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (19)

1.一种P2P穿越方法,其特征在于,所述方法包括:
第一终端设备通过移动通信链路与第二终端设备传输通话数据包;
当所述移动通信链路的通话质量不满足质量条件时,所述第一终端设备向第一服务器的一个或两个端口发送探测消息,并接收由所述一个或两个端口返回的NAT地址,以及根据所述第一终端设备的本地地址、及由所述一个或两个端口返回的NAT地址,确定所述第一终端设备的NAT类型,所述第一终端设备的NAT类型为公网型、锥型或对称型;
所述第一终端设备向所述第二终端设备发送所述第一终端设备的NAT类型,并接收由所述第二终端设备发送的所述第二终端设备的NAT类型,所述第二终端设备的NAT类型为公网型、锥型或对称型;
所述第一终端设备采用与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略,在所述第一终端设备和所述第二终端设备之间建立辅助链路。
2.根据权利要求1所述的方法,其特征在于,所述第一终端设备向第一服务器的一个或两个端口发送探测消息,并接收由所述一个或两个端口返回的NAT地址,以及根据所述第一终端设备的本地地址、及由所述一个或两个端口返回的NAT地址,确定所述第一终端设备的NAT类型,包括:
所述第一终端设备向所述第一服务器的第一端口发送第一探测消息,并接收由所述第一端口返回的第一NAT地址;
若所述第一NAT地址与所述第一终端设备的本地地址相同,则所述第一终端设备确定所述第一终端设备的NAT类型为公网型;或者,若所述第一NAT地址与所述第一终端设备的本地地址不同,则所述第一终端设备向所述第一服务器的第二端口发送第二探测消息,并接收由所述第二端口返回的第二NAT地址;
若所述第一NAT地址与所述第二NAT地址相同,则所述第一终端设备确定所述第一终端设备的NAT类型为锥型;或者,若所述第一NAT地址与所述第二NAT地址不同,则所述第一终端设备确定所述第一终端设备的NAT类型为对称型。
3.根据权利要求2所述的方法,其特征在于,所述第一终端设备向所述第一服务器的第一端口发送第一探测消息之前,所述方法还包括:
所述第一终端设备向第二服务器发送请求消息;
所述第一终端设备接收来自所述第二服务器的响应消息,所述响应消息包括所述第一服务器的IP地址、所述第一端口的端口号和所述第二端口的端口号。
4.根据权利要求3所述的方法,其特征在于,所述响应消息还包括挑战码;
所述第一探测消息和所述第二探测消息为用户数据报协议包,所述用户数据报协议包包括:所述挑战码、消息序号和重传次数,所述挑战码用于校验探测消息是否合法,所述消息序号用于唯一标识探测消息,所述重传次数用于表示允许向所述第一服务器重新发送探测消息的最大次数。
5.根据权利要求1所述的方法,其特征在于,当所述移动通信链路的通话质量不满足质量条件时,所述第一终端设备向第一服务器的一个或两个端口发送探测消息,包括:
当所述移动通信链路的通话质量不满足所述质量条件时,所述第一终端设备检测本地是否缓存有所述第一终端设备的NAT类型和所述第二终端设备的NAT类型;
在未缓存有所述第一终端设备的NAT类型和所述第二终端设备的NAT类型的情况下,或者,在所述第一终端设备的NAT类型和所述第二终端设备的NAT类型的缓存时长大于或等于预设时长的情况下,所述第一终端设备分别向所述第一服务器的一个或两个端口发送探测消息。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在缓存有所述第一终端设备的NAT类型和所述第二终端设备的NAT类型,且所述第一终端设备的NAT类型和所述第二终端设备的NAT类型的缓存时长小于所述预设时长的情况下,所述第一终端设备直接采用与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略,在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
7.根据权利要求1至6中任一项所述的方法,其特征在于,在所述第一终端设备和所述第二终端设备之间建立辅助链路之后,所述方法还包括:
所述第一终端设备在本地缓存所述第一终端设备的NAT类型和所述第二终端设备的NAT类型。
8.根据权利要求1至6中任一项所述的方法,其特征在于,若所述第一终端设备的NAT类型为公网型,所述第二终端设备的NAT类型为公网型、锥型或对称型,则与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略为第一策略;
其中,所述第一策略为:所述第一终端设备监听本地端口,并在接收到来自所述第二终端设备的直连请求消息后,在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
9.根据权利要求1至6中任一项所述的方法,其特征在于,若所述第一终端设备的NAT类型为锥型,所述第二终端设备的NAT类型为锥型,则与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略为第二策略;
其中,所述第二策略为:采用第一算法穿越;在采用所述第一算法穿越失败的情况下,采用第二算法穿越;在采用所述第二算法穿越失败的情况下,采用第三算法穿越;
所述第一算法是针对一个终端设备的NAT类型为全锥型,另一个终端设备的NAT类型为任意锥型或对称型设计的穿越算法;
所述第二算法是针对一个终端设备的NAT类型为IP受限锥型,另一个终端设备的NAT类型为IP受限锥型、端口受限锥型或对称型设计的穿越算法;
所述第三算法是针对两个终端设备的NAT类型均为端口受限锥型设计的穿越算法。
10.根据权利要求9所述的方法,其特征在于,所述第一算法包括:
所述第一终端设备向所述第二终端设备的任意一个外部端口发送第一访问请求消息;
在所述第二终端设备接收到所述第一访问请求消息后,所述第二终端设备向所述第一终端设备的任意一个外部端口返回第一访问响应消息;
在所述第一终端设备接收到所述第一访问响应消息后,所述第一终端设备在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
11.根据权利要求9所述的方法,其特征在于,所述第二算法包括:
所述第一终端设备通过NAT探测获得所述第一终端设备的外部端口;
所述第一终端设备通过所述第一终端设备的外部端口,向所述第二终端设备的任意一个外部端口发送第二访问请求消息;
在所述第二终端设备接收到所述第二访问请求消息后,所述第二终端设备向所述第一终端设备的外部端口,返回第二访问响应消息;
在所述第一终端设备接收到所述第二访问响应消息后,所述第一终端设备在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
12.根据权利要求9所述的方法,其特征在于,所述第三算法包括:
所述第一终端设备通过NAT探测获得所述第一终端设备的外部端口;
所述第二终端设备通过NAT探测获得所述第二终端设备的外部端口;
所述第一终端设备通过所述第一终端设备的外部端口向所述第二终端设备的外部端口发送第三访问请求消息;
在所述第二终端设备接收到所述第三访问请求消息后,所述第二终端设备向所述第一终端设备的外部端口,返回第三访问响应消息;
在所述第一终端设备接收到所述第三访问响应消息后,在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
13.根据权利要求9所述的方法,其特征在于,若所述第一终端设备的NAT类型为锥型,所述第二终端设备的NAT类型为对称型,则与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略为所述第二策略或第三策略;
其中,所述第三策略包括:
所述第一终端设备通过NAT探测获得所述第一终端设备的外部端口;
所述第二终端设备通过NAT探测得知所述第二终端设备的外部端口的分配规律;
所述第二终端设备向所述第一终端设备的外部端口发送打洞消息和所述第二终端设备的外部端口的分配规律;
所述第一终端设备向所述第二终端设备的外部端口的分配规律中的目标端口发送第四访问请求消息;
在所述第二终端设备接收到所述第四访问请求消息后,所述第二终端设备向所述第一终端设备的外部端口返回第四访问响应消息;
在所述第一终端设备接收到所述第四访问响应消息后,在所述第一终端设备和所述第二终端设备之间建立所述辅助链路。
14.根据权利要求1至6中任一项所述的方法,其特征在于,若所述第一终端设备和所述第二终端设备的NAT类型均为对称型,则与所述第一终端设备的NAT类型和所述第二终端设备的NAT类型对应的策略为第四策略;
其中,所述第四策略为不建立所述辅助链路。
15.根据权利要求1至6中任一项所述的方法,其特征在于,所述移动通信链路的通话质量不满足质量条件包括:所述移动通信链路的通话质量低于第一预设通话质量;
在所述第一终端设备和所述第二终端设备之间建立辅助链路之后,所述方法还包括:
当所述移动通信链路的通话质量低于第二预设通话质量时,第一终端设备通过所述移动通信链路和所述辅助链路分别与所述第二终端设备传输通话数据包;
其中,所述第二预设通话质量低于所述第一预设通话质量。
16.根据权利要求15所述的方法,其特征在于,所述方法还包括:
当所述移动通信链路的通话质量高于或等于所述第二预设通话质量时,所述第一终端设备与所述第二终端设备停止使用所述辅助链路。
17.根据权利要求15所述的方法,其特征在于,所述方法还包括:
当所述移动通信链路的通话质量高于或等于所述第一预设通话质量,并且持续时长大于或等于预设值时,所述第一终端设备关闭并释放所述辅助链路。
18.一种终端设备,其特征在于,包括处理器,通信接口,以及与所述处理器和所述通信接口耦合的存储器;其中,所述存储器中存储有指令,所述处理器执行所述指令时,使得所述终端设备执行如权利要求1至17中任一项所述的P2P穿越方法。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在终端设备上运行时,使得所述终端设备执行如权利要求1至17中任一项所述的P2P穿越方法。
CN202211349218.9A 2022-10-31 2022-10-31 P2p穿越方法、设备及存储介质 Active CN116708358B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211349218.9A CN116708358B (zh) 2022-10-31 2022-10-31 P2p穿越方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211349218.9A CN116708358B (zh) 2022-10-31 2022-10-31 P2p穿越方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116708358A CN116708358A (zh) 2023-09-05
CN116708358B true CN116708358B (zh) 2024-04-05

Family

ID=87828142

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211349218.9A Active CN116708358B (zh) 2022-10-31 2022-10-31 P2p穿越方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116708358B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116939003B (zh) * 2023-09-19 2023-11-14 敏于行(北京)科技有限公司 跨nat的端到端网络连接建立方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101938532A (zh) * 2010-09-17 2011-01-05 北京神州泰岳软件股份有限公司 基于udp的穿越nat设备的方法及系统
CN105187567A (zh) * 2015-06-24 2015-12-23 东莞市南星电子有限公司 一种基于sip和ice的音视频通信方法
CN110113439A (zh) * 2019-04-09 2019-08-09 华南理工大学 一种nat穿越的方法
CN112073553A (zh) * 2020-08-31 2020-12-11 腾讯科技(深圳)有限公司 网络地址转换类型的检测方法、装置、设备及存储介质
WO2022148361A1 (zh) * 2021-01-06 2022-07-14 上海哔哩哔哩科技有限公司 建立p2p连接的方法、客户端及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101938532A (zh) * 2010-09-17 2011-01-05 北京神州泰岳软件股份有限公司 基于udp的穿越nat设备的方法及系统
CN105187567A (zh) * 2015-06-24 2015-12-23 东莞市南星电子有限公司 一种基于sip和ice的音视频通信方法
CN110113439A (zh) * 2019-04-09 2019-08-09 华南理工大学 一种nat穿越的方法
CN112073553A (zh) * 2020-08-31 2020-12-11 腾讯科技(深圳)有限公司 网络地址转换类型的检测方法、装置、设备及存储介质
WO2022148361A1 (zh) * 2021-01-06 2022-07-14 上海哔哩哔哩科技有限公司 建立p2p连接的方法、客户端及系统

Also Published As

Publication number Publication date
CN116708358A (zh) 2023-09-05

Similar Documents

Publication Publication Date Title
EP3472992B1 (en) Network path probing using available network connections
CN109088799B (zh) 一种客户端接入方法、装置、终端以及存储介质
CN101540769A (zh) 信息处理单元、客户端设备、信息处理方法和系统
US10367893B1 (en) Method and apparatus of performing peer-to-peer communication establishment
US10084679B2 (en) Standalone network probing using available network connections
CN116708358B (zh) P2p穿越方法、设备及存储介质
US9307555B2 (en) Method and system for mobile terminal to access the network through cell phone
CN112954406B (zh) 数据下载方法、装置、计算机设备和存储介质
CN113765846A (zh) 一种网络异常行为智能检测与响应方法、装置及电子设备
CN114301676A (zh) 一种电力监控系统的无损化资产探测方法
US20210279126A1 (en) Empty data packet hard align
CN110691110A (zh) 一种通信方法、装置、系统、终端、设备及介质
KR101775325B1 (ko) Nat 장치를 탐지하기 위한 방법 및 장치
CN115914164A (zh) 一种隧道连接方法、装置、电子设备和存储介质
CN109587028B (zh) 一种控制客户端流量的方法和装置
Jiang et al. Design of real time multimedia platform and protocol to the internet of things
CN102088399B (zh) 对等网络的流量控制方法、路由设备和通信系统
EP2922338A1 (en) Method and apparatus for providing content according to type of communication network
KR20210085425A (ko) 네트워크 은닉 장치 및 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램
Garai et al. IOT Securities: A Review
CN116708532B (zh) 局域网连接方法、装置、计算机设备和可读存储介质
CN114553965B (zh) 内网设备的调度方法、网络设备及存储介质
KR101139537B1 (ko) 이동통신망의 스캐닝 트래픽 탐지방법
WO2024021714A1 (zh) 一种网络地址转换nat穿越的方法、设备和系统
US20240152502A1 (en) Data authentication and validation across multiple sources, interfaces, and networks

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