数据传输方法及装置与流程

文档序号:21640681发布日期:2020-07-29 02:51阅读:228来源:国知局
数据传输方法及装置与流程

本公开涉及数据传输领域,尤其涉及数据传输方法及装置。



背景技术:

p2p即点对点通信,或称为对等联网,与传统的服务器客户端模式有着明显的区别,在即时通讯方案中应用广泛(比如im应用中的实时音视频通信、实时文件传输甚至文字聊天等)。

p2p可以是一种通信模式、一种逻辑网络模型、一种技术、甚至一种理念。在p2p网络中(如图1所示),所有通信节点的地位都是对等的,每个节点都扮演着客户机和服务器双重角色,节点之间通过直接通信实现文件信息、处理器运算能力、存储空间等资源的共享。p2p网络具有分散性、可扩展性、健壮性等特点,这使得p2p技术在信息共享、即时通讯、协同工作、分布式计算、网络存储等领域都有广阔的应用。

通常情况下,p2p网络中,各个节点所使用的是私有ip,但是,私有ip之间是不是能直接进行通信的,如果要进行通信,则需要通过公网上的服务器进行数据的转发,但是,服务器的承受能力有限,如果所有节点之间的通信均通过服务器进行转发,则会加重服务器的负担。这一问题,可以通过p2p打洞技术来克服。

简单来说,p2p打洞技术就是通过中间服务器的协助在各自的nat网关上建立相关的表项,使p2p连接的双方发送的报文能够直接穿透对方的nat网关,从而实现p2p客户端互连。

现有的p2p打洞过程,通常是只要一个p2p或者relay(中继)连通了,就停止打洞。但是,现有网络环境(尤其是企业级网络)大部分是relay先通,因此,往往造成网络中继负载过高。另一方面,通过网络中继进行通信往往需要向第三方支付网络流量费用,因此,这种方式也会使得通信成本增加。



技术实现要素:

本公开实施例提供一种数据传输方法及装置,能够解决背景技术中网络中继负载过高的问题。所述技术方案如下:

根据本公开实施例的第一方面,提供一种数据传输方法,该方法包括:

第一节点按照第一方式发起点对点p2p通信请求,并同时发起中继通信请求,p2p通信请求和中继通信请求用于请求和第二节点建立通信连接通道;

当第一通信连接通道建立成功,判断第一通信连接通道的网络类型,网络类型包括p2p网络和中继网络;

如果第一通信连接通道的网络类型是中继网络,则第一节点通过第一通信连接通道和第二节点进行数据传输,并重新发起p2p通信请求。

在一个实施例中,重新发起p2p通信请求之后,该方法还包括:

当第二通信连接通道建立成功,则第一节点通过第二通信连接通道和第二节点进行数据传输,其中,第二通信连接通道的网络类型是p2p网络。

在一个实施例中,重新发起p2p通信请求之后,该方法还包括:

当第二通信连接通道建立未成功,则第一节点按照第二方式发起点对点p2p通信请求。

在一个实施例中,第一方式为udp或tcp方式,第二方式为端口猜测方式;或者,第一方式为端口猜测方式,第二方式为udp或tcp方式。

采用两种方式进行p2p通信请求,可以在第一方式多次建立通信连接通道不成功的前提下,换地儿方式进行p2p通信请求,可以增加p2p通信连接通道建立成功的概率。

在一个实施例中,判断第一通信连接通道的网络类型包括:

获取第一通信连接通道的ip地址;

根据ip地址确定第一通信连接通路的网络类型。

根据本公开实施例的第二方面,提供一种数据传输装置,该装置用于第一节点,该装置包括:

第一通信请求模块,用于按照第一方式发起点对点p2p通信请求,并同时发起中继通信请求,p2p通信请求和中继通信请求用于请求和第二节点建立通信连接通道;

判断模块,用于当第一通信连接通道建立成功,判断第一通信连接通道的网络类型,网络类型包括p2p网络和中继网络;

传输模块,用于如果第一通信连接通道的网络类型是中继网络,则第一节点通过第一通信连接通道和第二节点进行数据传输,并重新发起p2p通信请求。

在一个实施例中,该装置还包括:

切换模块,用于重新发起p2p通信请求之后当第二通信连接通道建立成功,则第一节点通过第二通信连接通道和第二节点进行数据传输,其中,第二通信连接通道的网络类型是p2p网络。

在一个实施例中,该装置还包括:

第二通信请请求模块,用于重新发起p2p通信请求之后,当第二通信连接通道建立未成功,则第一节点按照第二方式发起点对点p2p通信请求。

在一个实施例中,第一方式为udp或tcp方式,第二方式为端口猜测方式;或者,第一方式为端口猜测方式,第二方式为udp或tcp方式。

采用两种方式进行p2p通信请求,可以在第一方式多次建立通信连接通道不成功的前提下,换第二方式进行p2p通信请求,可以增加p2p通信连接通道建立成功的概率。

在一个实施例中,判断模块包括:

获取子模块,用于获取第一通信连接通道的ip地址;

确定子模块,用于根据ip地址确定第一通信连接通路的网络类型。

本公开实施例提供的数据传输方法和装置,可以提高p2p连接的成功率,从而降低网络中继的负载,并降低网络通信成本。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是本公开实施例提供的背景技术节点关系示意图;

图2是本公开实施例提供的一种使用场景示意图;

图3是本公开实施例提供的一种使用场景示意图;

图4是本公开实施例提供的一种使用场景示意图;

图5是本公开实施例提供的一种使用场景示意图;

图6是本公开实施例提供的一种数据传输方法流程图;

图7是本公开实施例提供的一种数据传输装置的结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

以下描述的一部分明确地或者暗含地涉及算法和对计算机存储器内数据的操作的功能或者符号表示。这些算法的描述和功能或者符号表示是数据处理领域内技术人员用于更有效地向本领域内其它技术人员表达他们工作实质的方法。此处通常将算法设想为生成期望结果的一系列有条理的步骤。这些步骤是需要对诸如能够存储、传送、组合、对比以及通过其它方式操控的电、磁或者光信号的物理量进行物理操控的步骤。

除非特别说明,否则如以下可显而易见地,应该理解本说明书通篇使用的诸如“请求”、“发送”、“传输”、“发送”、“获取”等术语的讨论,涉及计算机系统或者类似电子设备的动作和处理,上述的电子设备将表示为计算机系统内物理量的数据操控和转换成同样表示为计算机系统或者其它信息存储、传输或者显示设备内物理量的其它数据。

说明书还公开了用于执行方法操作的设备。这种设备为所需的目的而特别构成,或者可以包括通用计算机或者其它存储在计算机中的计算机程序选择性启动或者重新配置的其它设备。本文介绍的算法和显示不是固有地与任何具体计算机或者其它设备相关。各种通用机器可以根据本文教导的程序一起使用。可替换地,用于执行所要求的方法步骤的更特殊的设备构造是可以适用的。常规的通用计算机的结构将在以下描述中介绍。

此外,由于可以由计算机代码实施本文描述方法的各步骤对本领域技术人员是显而易见的,因此本说明书还暗含地公开计算机程序。该计算机程序不试图限制于任何具体的编程语言及其执行。应该理解,可以使用多种编程语言及其代码以执行本文包含的公开的教导。此外,该计算机程序不试图限制于任何具体的控制流。在不脱离本发明精神或者范围的情况下,存在许多其它种类的、可以使用不同控制流的计算机程序。

而且,可以并行地而不是顺序地执行计算机程序的一个或者多个步骤。这种计算机程序可以存储在任何计算机可读介质上。计算机可读介质可以包括的存储设备诸如为磁盘或者光盘、存储器芯片或者适于与通用计算机接口的其它存储设备等。计算机可读介质还可以包括诸如在因特网系统中的硬接线介质,或者无线介质。当在这种通用计算机上加载和执行计算机程序时,计算机程序有效地产生实施优选方法的步骤的设备。

本发明还可被实施为硬件模块。更具体地,在硬件意义下,模块是被设计为与其它部件或模块一起使用的功能性硬件单元。例如,模块可使用分立电子部件实施,或者其可以形成整个电子电路诸如特定用途集成电路(asic)的一部分。还存在许多其它可能。本领域技术人员应理解,该系统还可被实施为硬件和软件模块的组合。

本公开实施例可以应用于多种应用场景,图2-图5是本公开实施例提供的使用场景示意图,

(1)通信双方中只有一方位于网络地址转换(networkaddresstranslation,nat)设备后面(参考图2);

(2)通信双方均位于同一nat(网络地址转换)设备后面(参考图3);

(3)通信双方位于不同的nat设备后面(参考图4);

(4)通信双方位于多层nat设备后面(参考图5)。

参照图2-图5,server为集中服务器,集中服务器本质上是一台被设置在公网上的服务器,建立p2p的双方都可以直接访问到这台服务器。位于nat网关后面的客户端a和b都可以与一台已知的集中服务器建立连接,并通过这台集中服务器了解对方的信息并中转各自的信息。

图6是本公开实施例提供的一种数据传输方法,如图6所示的数据传输方法包括以下步骤:

步骤601、第一节点按照第一方式发起点对点p2p通信请求,并同时发起中继通信请求,p2p通信请求和中继通信请求用于请求和第二节点建立通信连接通道;

p2p通信请求为p2p打洞请求,例如节点1(可参照图2-5中的client1或client2)发起针对节点2的p2p打洞流程;

第一方式发起p2p通信请求的p2p打洞流程,可以是基于udp的打洞流程,也可以是基于tcp的打洞流程。

具体的,所述节点1发起针对节点2的打洞流程,同时采用p2p和relay方式执行打洞流程。

在一种可选实施方式中,p2p方式执行打洞流程可以包括以下步骤:

步骤6011、节点1使用其与信令转发服务器的连接向信令转发服务器发送请求,要求信令转发服务器协助其连接节点2;

参照图2-5,其中集中服务器内部包括:信令转发服务器和relay(中继服务器);其中,信令转发服务器能够协助网络中的节点实现基于p2p的通信连接,而中继服务器能够协助网络中的节点实现基于relay的通信连接。

步骤6012、信令转发服务器将节点2的公网和内网的tcp地址的二元组信息返回给节点1,同时,信令转发服务器将节点1的公网和内网的地址二元组也发送给节点2;

步骤6013、节点1和节点2使用连接信令转发服务器的端口异步地发起向对方的公网、内网地址二元组的tcp连接,同时监听各自的本地tcp端口是否有外部的连接联入;

步骤6014、节点1和节点2等待向外的连接是否成功,如果成功,则开始通信。

在另一种可选实施方式中,p2p方式执行打洞流程可以包括以下步骤:

步骤6011’、节点1收集本地ip地址,并发送与节点2进行连接的request请求到信令转发服务器,获取信令转发服务器反射地址;

步骤6012’、节点1收集自身的二元组信息,之后,携带自身的二元组信息主动向节点2发起呼叫;

步骤6013’、节点2接收到节点1发送的二元组信息之后,开始收集本地ip地址,并发送request请求到信令转发服务器,获取信令转发服务器反射地址;

步骤6014’、节点2收集自身的二元组信息,并将收集到的二元组信息发送给发起呼叫响应的节点1;

步骤6015’、节点1和节点2分别发送request请求到对端,两端分别等待对方响应自身所发送的request请求,如果响应成功,则成功建立连接。

在一种可选实施方式中,relay打洞流程可以包括以下步骤:

步骤601a、节点1和节点2分别发送allocate请求到中继服务器,获取中继地址;

步骤601b、节点1收集自身的二元组信息,之后,携带自身的二元组信息主动向节点2发起呼叫;

步骤601c、节点2接收到节点1发送的二元组信息后,向中继服务器发起allocate请求,获取中继地址;

步骤601d、节点2收集自身的二元组信息,之后,向节点1(呼叫请求的发起端)返回自身的二元组信息;

步骤601e、节点1和节点2分别通过中继地址发送request请求到对端,两端分别等待向外发送的请求是否收到成功的响应,如果响应成功,则成功建立连接。

实际应用中,p2p打洞成功的标志是程序内部打印p2p打洞成功,开始数据传输;p2p打洞结束的标志也是程序日志打印p2p打洞停止。因此,可以通过检测是否打印p2p打洞成功或者检测是否开始数据传输来确定p2p打洞是否成功,当打印p2p打洞成功或者检测到开始数据传输,则确定p2p打洞成功。相应的,当程序日志打印p2p打洞停止,则可以确定p2p打洞停止。

步骤602、当第一通信连接通道建立成功,判断第一通信连接通道的网络类型,网络类型包括p2p网络和中继网络;

可选的,判断第一通信连接通道的网络类型包括:

步骤6021、获取第一通信连接通道的ip地址;

步骤6022、根据ip地址确定第一通信连接通路的网络类型。

如果网络ip地址是中继地址类型,则确定当前所建立的通信连接的网络类型为relay类型;如果网络ip地址是p2p地址类型,则确定当前所建立的通信连接的网络类型是p2p类型。

步骤603、如果第一通信连接通道的网络类型是中继网络,则第一节点通过第一通信连接通道和第二节点进行数据传输,并重新发起p2p通信请求。

可选的,重新发起p2p通信请求,需要延长p2p打洞时长。

两端刚开时分别发送request请求到对方,然后以间隔50ms100ms200ms400ms800ms1600ms阶梯式总共发送7个请求到对方,如果在整体的5s内没收到回复就说明打洞不成功,然后等待5s,双方重新执行整个打洞流程,可以设置循环的次数,设置5次或者10次,执行打洞。总的时长就是次数*10s。

如果类型是中继relay,然后后台继续执行下面的p2p打洞流程。10次或者次数设置的更多,如果打洞不成功,判定网络p2p打不成功,使用relay中继传输。

相应的,如果所确定的网络类型为p2p类型,则直接使用当前所建立的p2p通道进行数据转发,并结束p2p打洞。

也就是说,当所连通的是relay通道时,使用所述relay通道进行数据中继转发,但不结束p2p打洞流程,继续进行p2p打洞,直到p2p打洞成功。

在一个实施例中,重新发起p2p通信请求之后,该方法还包括:

步骤604、当第二通信连接通道建立成功,则第一节点通过第二通信连接通道和第二节点进行数据传输,其中,第二通信连接通道的网络类型是p2p网络。

当第二通信连接通道建立未成功,则第一节点按照第二方式发起点对点p2p通信请求。

在一个实施例中,第一方式为udp或tcp方式,第二方式为端口猜测方式;或者,第一方式为端口猜测方式,第二方式为udp或tcp方式。

在一种可选实施方式中,采用端口猜测算法执行p2p打洞流程具体包括:

步骤6041、节点1和节点2同时采用端口猜测算法猜测对端的端口号;

可以根据对端的二元组信息和nat类型来采用相应的端口猜测算法猜测对端的端口号。

步骤6042、并向所猜测到的端口号发送request请求,同时,节点1和节点2都在接收到request请求时,向对端返回响应消息;

步骤6043、如果两端都接收到对端发送的响应消息,则表示端口猜测成功,节点1和节点2建立p2p连接。

实际应用中,可以采用现有端口猜测算法来执行p2p打洞流程。

采用两种方式进行p2p通信请求,可以在第一方式多次建立通信连接通道不成功的前提下,换地儿方式进行p2p通信请求,可以增加p2p通信连接通道建立成功的概率。

如果采用端口猜测算法打洞成功后,则将数据转发通道切换至当前所打通的p2p通道进行数据转发;如果端口猜测失败,也就是,端口猜测算法打洞成功后,所建立的通信连接的网络类型为relay类型,则继续使用当前所使用的relay通道进行数据转发,不进行通道切换。

实际应用时,在启动一次端口猜测算法未能成功连接p2p通道时,还可以二次启动端口猜测算法,如果仍未成功,还可以进行第三次尝试,但如果尝试次数达到次数阈值,则直接结束端口猜测流程,仍采用当前所使用的relay通道进行数据转发。实际应用时,端口猜测的次数不宜过多,一般不建议超过5次,比如,可以根据实际需要将次数阈值设置为3或者4或者5等等。

该实施例中虽然只记载了在第一次p2p打洞未能成功接通p2p通道时,只再进行一次p2p打洞的技术方案,但是,在实际应用时,第二次打洞后仍未接通p2p通道时,还可以进行第三次尝试,或者第三次打洞后仍未接通p2p通道时,还可以进行第四次尝试,但是,尝试两三次之后,如果仍未成功,则继续连接的成功率非常低,效率较低。

图7是本公开实施例提供的一种数据传输装置,该装置用于第一节点,如图7所示的数据传输该装置70包括:

第一通信请求模块701,用于按照第一方式发起点对点p2p通信请求,并同时发起中继通信请求,p2p通信请求和中继通信请求用于请求和第二节点建立通信连接通道;

判断模块702,用于当第一通信连接通道建立成功,判断第一通信连接通道的网络类型,网络类型包括p2p网络和中继网络;

传输模块703,用于如果第一通信连接通道的网络类型是中继网络,则第一节点通过第一通信连接通道和第二节点进行数据传输,并重新发起p2p通信请求。

在一个实施例中,该装置还包括:

切换模块704,用于重新发起p2p通信请求之后当第二通信连接通道建立成功,则第一节点通过第二通信连接通道和第二节点进行数据传输,其中,第二通信连接通道的网络类型是p2p网络。

在一个实施例中,该装置还包括:

第二通信请请求模块705,用于重新发起p2p通信请求之后,当第二通信连接通道建立未成功,则第一节点按照第二方式发起点对点p2p通信请求。

在一个实施例中,第一方式为udp或tcp方式,第二方式为端口猜测方式;或者,第一方式为端口猜测方式,第二方式为udp或tcp方式。

采用两种方式进行p2p通信请求,可以在第一方式多次建立通信连接通道不成功的前提下,换第二方式进行p2p通信请求,可以增加p2p通信连接通道建立成功的概率。

在一个实施例中,判断模块702包括:

获取子模块7021,用于获取第一通信连接通道的ip地址;

确定子模块7022,用于根据ip地址确定第一通信连接通路的网络类型。

基于上述图6对应的实施例中所描述的数据传输方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:readonlymemory,rom)、随机存取存储器(英文:randomaccessmemory,ram)、cd-rom、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图6对应的实施例中所描述的数据传输方法,此处不再赘述。

本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

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