UDP数据传输的方法、装置、存储介质及终端设备转让专利

申请号 : CN201711433724.5

文献号 : CN108173928B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张全发

申请人 : 北京百度网讯科技有限公司

摘要 :

本发明提出一种UDP数据传输的方法、装置、存储介质及终端设备,其中,所述方法包括:接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;当接收到UDP数据时,查询所述映射表中是否存在可用于传送所述UDP数据的映射地址组;若有,则根据查询到的映射地址组,传送所述UDP数据;若否,则根据所述UDP数据,更新所述映射表中映射地址组的状态。采用本发明,能够在设置网关仅提供一个UDP端口时,采用以往的网关穿透方式来传送UDP数据,准确传输UDP数据。

权利要求 :

1.一种UDP数据传输的方法,用于实时音视频传输,其特征在于,包括:接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;

当接收到UDP数据时,查询所述映射表中是否存在可用于传送所述UDP数据的映射地址组;

若有,则根据查询到的映射地址组,传送所述UDP数据;以及若否,则根据所述UDP数据,更新所述映射表中映射地址组的状态,其中,

所述映射地址组为多个,通过对所述客户端的所有候选UDP端口地址和所述服务端的所有候选UDP端口地址进行排列组合而获得,所述UDP数据包括源UDP端口地址和目标UDP端口地址,以及所述根据所述UDP数据,更新所述映射表中映射地址组的状态,包括:根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;

若存在,则将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态;以及从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。

2.如权利要求1所述的UDP数据传输的方法,其特征在于,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。

3.如权利要求1所述的UDP数据传输的方法,其特征在于,所述方法还包括:当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。

4.如权利要求1所述的UDP数据传输的方法,其特征在于,所述方法还包括:当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;

当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;以及当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中所述映射地址组。

5.一种UDP数据传输的装置,用于实时音视频传输,其特征在于,包括:地址组接收模块,用于接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;

查询地址组模块,用于当接收到UDP数据时,查询所述映射表中是否存在可用于传送所述UDP数据的映射地址组;

UDP数据传送模块,用于当查询到映射地址组时,则根据查询到的映射地址组,传送所述UDP数据;以及映射表更新模块,用于当查询不到映射地址组时,则根据所述UDP数据,更新所述映射表中映射地址组的状态,其中,

所述映射地址组为多个,通过对所述客户端的所有候选UDP端口地址和所述服务端的所有候选UDP端口地址进行排列组合而获得,所述UDP数据包括源UDP端口地址和目标UDP端口地址,以及所述映射表更新模块,包括:

查询单元,用于根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;

活动状态设置单元,用于若存在,则将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态;以及可用状态设置单元,用于从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。

6.如权利要求5所述的UDP数据传输的装置,其特征在于,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。

7.如权利要求5所述的UDP数据传输的装置,其特征在于,所述装置还包括:第一删除模块,用于当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。

8.如权利要求5所述的UDP数据传输的装置,其特征在于,所述装置还包括:计时模块,用于当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;

计时复位模块,用于当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;

第二删除模块,用于当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中所述映射地址组。

9.一种实现UDP数据传输的终端设备,其特征在于,所述终端设备包括:一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-4中任一所述的UDP数据传输的方法。

10.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一所述的UDP数据传输的方法。

说明书 :

UDP数据传输的方法、装置、存储介质及终端设备

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种UDP数据传输的下载方法、装置、存储介质及终端设备。

背景技术

[0002] 在实时音视频通信(Webrtc)应用中,为保证实时性,和高可控性,往往采用UDP(User Datagram Protocol,用户数据报协议)传输音视频数据。Webrtc给出了一种使用P2P的通信架构,即,使用可靠的TCP(Transmission Control Protocol,传输控制协议)传输信令数据,以及使用UDP传输音视频媒体数据流;其中,Webrtc使用了ICE协议解决UDP数据NAT(Network Address Translation,网络地址转换)网关穿越的问题。在实际的产品需求中,需要利用一个对接Webrtc的Server端,来实现汇聚和分发多个端的流媒体数据;例如,结构由原来的Client-A和Client-B直接通信,变为了Client-A和Client-B通过Server端间接通信,具体参阅如图1所示的网络拓扑图。
[0003] 其中,Client-A和Client-B处于同一个NAT网络内,分别拥有内网IP和外网IP两个不同的地址;Server端是直接放在公网上的,提供可以直接访问的公网ip。当Client-A和Client-B均分别与Server端连接建立之后,Client-A与Server端的UDP通道(即映射地址组)为(220.181.30.11:50001,14.215.178.179:60001);Client-B与Server端的UDP通道为(220.181.30.11:50002,14.215.178.179:60002)。但是,此时做为对外服务的Server端,并不能直接为Client-A和Client-B服务,需增设一网关,例如,负载均衡网关,可以保证数据传输的安全和可靠。此时,Server端并不会直接暴露在公网上,而是部署在负载均衡网关之后,那么Server端所处的网络并不同于Client端所处的NAT网络,则由于负载均衡网关的存在,Client端与Server端之间传送UDP数据采用以往的NAT网关穿透方法并不能直接使用。
[0004] 现有技术为了解决上述技术问题提供的方案是:
[0005] 在系统中增设网关之后,为了能继续采用以往的NAT网关穿透方式,提供的方案一是:在Server端增设多个UDP端口,并网关上开辟多个UDP端口与Server端增设的端口一一对应。但本方案对部署的网络环境要求较高,例如,申请网关提供UDP端口的数目和Server端提供UDP端口的最大连接数均有限制,以及,网关提供如此多的外放开放端口,会有很大的安全隐患。以图2为例,若采用以往的网关穿透方式传送UDP数据,则需要在网关开辟两个UDP端口,分别与Client-A与Server的UDP通道和Client-B与Server端的UDP通道一一对应。如若仅在网关中设置一个UDP端口,虽然能够避免前述在网关中增设多个UDP端口产生的问题,但无法采用以往的网关穿透方式传送UDP数据。
[0006] 进而,提供方案二是:在系统中增设网关,并在网关设置一个UDP端口,并在Server端提供一个UDP端口。本方案是常规的Server端的实现方式,既可以解决在网关中仅设置一个UDP端口并采用以往的网关穿透方式传送UDP数据,但是其存有两个缺陷:其一,Server端需要支持对Webrtc Server的对接,实现复杂度较高;其二,不利于扩展和修改Server端。

发明内容

[0007] 本发明实施例提供一种UDP数据传输的方法、装置、存储介质及终端设备,能够在设置网关仅提供一个UDP端口时,采用以往的网关穿透方式来传送UDP数据,准确地传输UDP数据。
[0008] 第一方面,本发明实施例提供了一种UDP数据传输的方法,包括:
[0009] 接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;
[0010] 当接收到UDP数据时,查询所述映射表中是否存在可用于传送所述UDP数据的映射地址组;
[0011] 若有,则根据查询到的映射地址组,传送所述UDP数据;以及
[0012] 若否,则根据所述UDP数据,更新所述映射表中映射地址组的状态。
[0013] 结合第一方面,本发明在第一方面的第一种实施方式中,所述UDP数据包括源UDP端口地址和目标UDP端口地址,以及
[0014] 所述根据所述UDP数据,更新所述映射表中映射地址组的可用状态,包括:
[0015] 根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;
[0016] 若存在,则将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态;以及
[0017] 从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。
[0018] 结合第一方面,本发明在第一方面的第二种实施方式中,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。
[0019] 结合第一方面,本发明在第一方面的第三种实施方式中,,所述方法还包括:
[0020] 当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。
[0021] 结合第一方面,本发明在第一方面的第四种实施方式中,,所述方法还包括:
[0022] 当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;
[0023] 当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;以及
[0024] 当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中的所述映射地址组。
[0025] 第二方面,本发明实施例提供一种UDP数据传输的装置,包括:
[0026] 地址组接收模块,用于接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;
[0027] 查询地址组模块,用于当接收到UDP数据时,查询所述映射表中是否存在可用于传送与所述UDP数据的映射地址组;
[0028] UDP数据传送模块,用于当查询到映射地址组时,则根据查询到的映射地址组,传送所述UDP数据;以及
[0029] 映射表更新模块,用于当查询不到映射地址组时,则根据所述UDP数据,更新所述映射表中映射地址组的状态。
[0030] 结合第三方面,本发明在第三方面的第一种实施方式中,所述UDP数据包括源UDP端口地址和目标UDP端口地址,以及
[0031] 所述映射表更新模块,包括:
[0032] 查询单元,用于根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;
[0033] 活动状态设置单元,用于若存在,则将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态;以及
[0034] 可用状态设置单元,用于从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。。
[0035] 结合第二方面,本发明在第二方面的第二种实施方式中,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。
[0036] 结合第二方面,本发明在第二方面的第三种实施方式中,所述装置还包括:
[0037] 第一删除模块,用于当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。
[0038] 结合第二方面,本发明在第二方面的第四种实施方式中,所述装置还包括:
[0039] 计时模块,用于当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;
[0040] 计时复位模块,用于当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;
[0041] 第二删除模块,用于当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中的所述映射地址组。
[0042] 所述装置的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
[0043] 在一个可能的设计中,UDP数据传输的装置的结构中包括处理器和存储器,所述存储器用于存储支持UDP数据传输的装置执行上述第一方面中UDP数据传输的方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述UDP数据传输的装置还可以包括通信接口,用于UDP数据传输的装置与其他设备或通信网络通信。
[0044] 第三方面,本发明实施例提供了一种计算机可读存储介质,用于存储UDP数据传输的装置所用的计算机软件指令,其包括用于执行上述第一方面中UDP数据传输的方法为UDP数据传输的装置所涉及的程序。
[0045] 上述技术方案中的任一个技术方案具有如下优点或有益效果:
[0046] 本发明实施例,在客户端和服务端增设网关且该网关提供一个UDP端口的前提下,按以往的网关穿透方式来传送UDP数据时,通过增设一映射表,记录当前会话的所占用的UDP端口地址组,进而每当接收到客户端网络或服务端网络传送过来的UDP数据时,根据映射表记录的该UDP数据可用的映射地址组来分发该UDP数据,并选择性地更新映射表内的映射地址组的状态,如此满足每一个会话均拥有一个对应的UDP传输通道,从而,使得在网关设置一个出口的情况下,采用以往的网关穿透方式来传送UDP数据,也可使得UDP数据可以在客户端与服务端之间准确传输。而且,当系统扩展和修改Server端时,也不影响前述会话的UDP数据传输。
[0047] 上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。

附图说明

[0048] 在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本发明公开的一些实施方式,而不应将其视为是对本发明范围的限制。
[0049] 图1是本发明提供的UDP数据传输的系统的一个实施例的结构示意图;
[0050] 图2是本发明提供的UDP数据传输的系统的另一个实施例的结构示意图;
[0051] 图3是本发明第二实施例提供的UDP数据的方法的流程示意图;
[0052] 图4是本发明第二实施例提供的UDP数据的方法的映射地址组生成过程的流程示意图;
[0053] 图5是本发明第二实施例提供的调度单元更新映射表中的映射地址组的流程示意图;
[0054] 图6是本发明第三实施例提供的客户端与服务端建立会话与传送UDP数据的流程示意图;
[0055] 图7是本发明第四实施例提供的UDP数据传输的装置的结构示意图;
[0056] 图8是本发明第七实施例提供的终端设备的结构示意图。

具体实施方式

[0057] 在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
[0058] 本发明实施例以应用在Webrtc实时通信项目中为例,并以客户端网络中的一个客户端Client端和服务端网络的一个服务端Server端为例,进行详细地描述:本发明实施例使用了C/S结构,其中,
[0059] Client端:支持Webrtc协议,功能包括流媒体数据采集,例如音视频,并推送到Server端或从Server端获取流媒体并播放;
[0060] Server端:作为Webrtc的一个网关,负责Client端之间的流媒体的转发和处理;并提供TCP和UDP的公网接口。
[0061] Client端与Server端的网络传输包括:信令传输和流媒体数据传输;其中信令使用可靠的TCP协议传输,流媒体数据使用UDP协议传输。整个传输和控制完全使用了Webrtc的协议。
[0062] Webrtc协议会对每一对通信双方,建立个session,此session会包含一个独立信令状态,和一条UDP的流媒体传输通道。本发明实施例的实现过程中,Server端会为每一个请求连接的Client端分配一个UDP的端口,用于实现流媒体的通信。Webrtc使用ICE协议实现了UDP的连通操作;其大致步骤如下:
[0063] (1)Client端收集自身的所有可用地址(使用Stun协议),作为一组为candidates信息;
[0064] (2)Client端将自身的媒体信息和地址信息candidate列表,通过x信令发送给Server端;
[0065] (3)Server端收到Client的信令信息后,返回自己的媒体信息和candidate地址列表(此地址为公网地址);
[0066] (4)Client端和Server端分别向对端发送UDP的数据包,当分别收到对端的UDP包,表示UDP通道打通。
[0067] 下面分实施例进行本发明技术方案的展开描述:
[0068] 实施例一
[0069] 如图2所示,本发明实施例在客户端(Client端)与服务端(Server端)之间设置一个网关,该网关仅为客户端与服务端之间的UDP数据传输提供一个UDP端口地址,以及在网关与Server端之间设置一个调度单元,当然,当Server端仅包含一个服务器时,可将该调度单元设置在服务器硬件设备内部。客户端可以基于NAT网络组成一个内网。
[0070] 其中,Server端为Client端提供对外服务,Client端之间的用户交互的所有流量通过Server端传送,其实,如此设置Server端也起到为Client端之间的用户起到了负载均衡和安全防护的作用,本质上也可看作成一个网关。系统中的网关可以提供少量的对外网络接口(IP+Port),通过设置映射关系,关联内网的一个网络接口(local IP+Port),网关将此接口上的数据做一次转发。本发明实施例中,网关均以百度的BGW网关为例进行描述。在BGW网关上,申请一个对外的公网UDP端口地址称为VIP,并映射到内网服务的Local IP。本发明实施例提供的UDP数据,从Client端依次穿越NAT服务器、BGW网关、调度单元传送至相应的Server端,或者从Server端依次穿调度单元、BGW网关、NAT服务器传送到相应的Client端。
[0071] 本发明实施例在增设一个网关,例如BGW网关,且该网关仅提供一个对外UDP端口的前提下,通过增设一调度单元执行UDP数据的分发,使得Client端与Server端之间的UDP通道是一一对应的,即采用了以往网关穿透方式传送UDP数据,能够准确传输Client端与Server端之间的UDP数据。
[0072] 实施例二
[0073] 以下将结合图3以调度单元执行的UDP数据的方法为例描述本发明实施例提供的技术方案,其中实施例一提供的调度单元执行本实施例二提供的方法。本发明实施例提供的方法包括步骤S10至S40,具体如下:
[0074] S10,接收服务端新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址。在本发明实施例中,client端请求server端新建UDP会话之后,即此时client端与server端两对端均获知对方的UDP端口地址,[0075] 如图2所示,在BGW上申请两个对外VIP出口,分别用于TCP和UDP的通信。例如,TCP-VIP的IP地址和端口为:14.215.178.179:8080,该地址映射到Server端的http接口,其该http接口的IP地址和端口为:10.115.62.20:8088。以下将结合图2和图4,描述映射地址组生成的过程:
[0076] 步骤S11,Client-A和Client-B通过Http协议,即TCP连接,分别向Server端发起连接请求;Server端接受到请求后,分别创建Session-A和Session-B两个会话。Server端会为每一个Client创建一个独立的UDP接口,用于传输媒体数据,即UDP数据。
[0077] 步骤S12,Client端和Server端分别获取各自用于传输UDP数据的候选UDP端口地址candidates。例如:Client-A的候选UDP端口地址:candidate1:192.168.0.1:10001,candidate2:220181.30.11:50001;Client-B候选UDP端口地址:candidate1:192.168.0.2:10011,candidate2:220.181.30.11:50002。以及Server端为Session-A会话提供的候选UDP端口地址Serversession-A为:candidate1:10.115.62.20:60001,candidate2:
14.215.178.179:10010;Server端为Session-B会话提供的候选UDP端口地址
Serversession-B为:candidate1:10.115.62.20:60002,candidate2:14.215.178.179:
10010。
[0078] 步骤S13,通过信令层,即通过TCP连接,Client端和Server端将自身的address candidates通知给对端。即,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。此时client端与server端两对端均获知对方的UDP端口地址,优选地,Server端或Client端将每个session会话下的Client candidates和Server candidates通过排列组合的方式匹配出多组src-dst的映射地址组,存入映射表Map table中,由于调度单元与Server端共处网关的另一侧网关,优选由Server端执行,即由前述步骤S10由服务端发送新建UDP会话的映射地址组给调度单元并写入映射表中。优选地,所述排列组合的方式包括:从client端的Client candidates中选取一个UDP端口地址与从server端的Server candidates中选取一个UDP端口地址中组成一个匹配对,作为该UDP会话的一个映射地址组。在本发明实施例中,服务端可以将该UDP会话生成的一个映射地址组传送给调度单元进行存储,也可将该UDP会话生成的多个或所有映射地址组传送给调度单元,调度单元将接收到的映射地址组存储于映射表Map table中。
[0079] 在Client端和Server端建立UDP会话,并存储两端的映射地址组于映射表Map table中之后,Client端和Server端可以相互传送UDP数据,具体地,调度单元执行后续步骤步骤S20至步骤S40实现UDP数据的分发。
[0080] S20,当接收到UDP数据时,查询所述映射表中是否存在可用于传送所述UDP数据的映射地址组。
[0081] 需要说明的是,本发明实施例中映射表存储有所述UDP会话的至少一个映射地址组,但并不是所有的映射地址组均为可用的,只有在映射表中UDP端口地址与接收到的UDP数据的两个UDP端口地址相同且两地址均标识为可用的映射地址组,才认为其可用于传送所述UDP数据,所述可用的具体表示处于活动状态。或者,直接标识映射表中UDP端口地址与接收的UDP数据的两个UDP端口地址相同的映射地址组为可用的,也可认为该标识对应的映射地址组可用于传送所述UDP数据。通过步骤S20查询到的映射地址组可包括一个或多个,可从中随机选择一个用于步骤S30的数据传送。
[0082] S30,若有,则根据查询到的映射地址组,传送所述UDP数据;以及
[0083] S40,若否,则根据所述UDP数据,更新所述映射表中映射地址组的状态。
[0084] 在本发明实施例中,当查询不到可用于传送所述UDP数据的映射地址组时,如若更新完的映射表中存在有可用于传送所述UDP数据的映射地址组,则根据该映射地址组传送UDP数据,如若不存在,则丢弃该UDP数据。
[0085] 通常UDP数据除了包括流媒体数据之外,为了准确传输数据,其还包括源UDP端口地址和目标UDP端口地址。参阅图5,以下将详细描述调度单元更新映射表中的映射地址组的具体过程:
[0086] S41,根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;若不存在,则丢弃所述UDP数据,即执行步骤S42;若存在,则执行步骤S43;
[0087] S43,将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态,例如在映射表相应的记录位置上标识该UDP端口地址为active;以及
[0088] S44,从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。
[0089] 其中,从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,本质上选取的映射地址组所包含的两个UDP端口地址的状态均为活动状态。另一方面,这个选取的过程,应该是先查询是否存在步骤S44要求的映射地址组,若不存在,则调度单元丢弃前述接收到的UDP数据,如若存在,再从中选取出查询到的映射地址组,并设置选取到的映射地址组为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。
[0090] 因而,通过上述更新映射表中的地址组的方式,假设client端传送一UDP数据A给调度单元,其会先查询是否有与该UDP数据A相同的地址的映射地址组,若有,说明这个client端与server端之间是建立了会话的,则提取可用的映射地址组进行传送UDP数据,如果没有可用的映射地址组,则设置与该UDP数据A相同的源UDP端口地址为活动状态,进而看当前更新后的映射地址组是否可用,若可用以该映射地址组传送UDP包,如仍不可用则丢弃该UDP数据A。此时,假设更新后的映射地址组仍不可用,但基于上述已建立会话,会会中的server端类似前述的方式传送一UDP数据B给调度单元,那么即使当前查询到的映射地址组不可用,但由于UDP数据A与UDP数据B的UDP端口地址是相同,仅是源端与目标端的地址互换了,则在前述最后一步丢弃该UDP数据A的基础上,即,与UDP数据A的源UDP端口地址相同的端口地址设为活动状态,而在server端传送给调度单元调度的过程中,与UDP数据B的源UDP端口地址相同的端口地址设其状态至少设置为活动状态,那么本传输UDP数据B的过程中至少一个映射地址组的两个UDP端口地址均为活动状态,则server端传送UDP数据B给client端时调度单元调度时可以顺利转发,后续的client端与server端两者传送到调度单元的UDP数据均可以顺利转发。在本发明实施例中,可认为“可用于传送接收到的UDP数据的映射地址组”为用于传送与该UDP数据的地址一致的UDP数据的UDP通道已建立。
[0091] 当client端与server端建立的会话结束时,调度单元也会相应地销毁映射表Map Table中记录该会会话的映射地址组,而与该映射地址组相关的状态信息也会销毁。具体地:当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。
[0092] 同时,调度单元还具有超时更新的机制,即对于记录在映射表中的任一个映射地址组,对应该映射地址组的状态一直没更新,则说明基于该映射地址组所建立的UDP会话很久没有传输UDP数据了,那么此时该映射地址组的信息也会超时删除。调度单元的具体实施过程如下:
[0093] 当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;
[0094] 当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;以及
[0095] 当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中的所述映射地址组。
[0096] 实施三
[0097] 以下将结合图6,基于前述实施一和实施例描述本发明提供的客户端与服务端建立会话与传送UDP数据的过程:
[0098] S51,设置client端、Server端的端口地址,以及将相关端口关联网关BGW。
[0099] S52,client端向Server端发起TCP连接,创建UDP会话,例如session1。
[0100] S53,client端通过ICE协议将当前会话使用的UDP端口地址address1发送给Server端。
[0101] S54,Server端为该UDP会话创建UDP端口地址address2。
[0102] S55,调度单元汇总session1中client端和Server端的UDP端口地址,建立匹配对,即映射地址组,记录于映射表中。
[0103] S56,client端和Server端可同时分别向调度单元传送UDP数据;该UDP数据包括流媒体数据。
[0104] S57,调度单元根据映射表传送UDP数据。
[0105] 实施例四
[0106] 请参阅图7,本发明实施例提供一种UDP数据传输的装置,所述装置设置前述实施例提供UDP数据传输的系统中,所述系统还包括客户端、服务端和设置在所述客户端和所述服务端之间的网关;所述装置设在所述系统中的调度单元中或直接作为调度单元,转发服务端或客户端通过网关发送过来的UDP数据,以及接收服务端发送过的来的映射地址组,并且根据接收到的数据可实现上述实施一至实施三任一实施例提供的方法,所述装置包括:
[0107] 地址组接收模块10,用于接收新建UDP会话的映射地址组,并将接收到的映射地址组记录于映射表中;其中,所述映射地址组包括请求建立所述UDP会话的客户端的UDP端口地址和为所述UDP会话创建的服务端的UDP端口地址;
[0108] 查询地址组模块20,用于当接收到UDP数据时,查询所述映射表中是否存在可用于传送与所述UDP数据的映射地址组;
[0109] UDP数据传送模块30,用于当查询到映射地址组时,则根据查询到的映射地址组,传送所述UDP数据;以及
[0110] 映射表更新模块40,用于当查询不到映射地址组时,则根据所述UDP数据,更新所述映射表中映射地址组的状态。
[0111] 结合实施例四,本发明在实施例的第一种实施方式中,所述UDP数据包括源UDP端口地址和目标UDP端口地址,以及
[0112] 所述映射表更新模块,包括:
[0113] 查询单元,用于根据所述UDP数据的源UDP端口地址和目标UDP端口地址,查询所述映射表中是否存在与所述UDP数据的源UDP端口地址和目标UDP端口地址一致的映射地址组;
[0114] 活动状态设置单元,用于若存在,则将在查询到的映射地址组中与所述UDP数据的源UDP端口地址相同的UDP端口地址的状态均设置为活动状态;以及
[0115] 可用状态设置单元,用于从查询到的映射地址组中选取设置为活动状态的与所述UDP数据的目标UDP端口地址相同的UDP端口地址对应的映射地址组,并将选取的映射地址组的状态设置为可用于传送UDP端口地址与选取的映射地址组的UDP端口地址一致的UDP数据。。
[0116] 结合实施例四,本发明在实施例四的第二种实施方式中,所述请求建立所述UDP会话的客户端的UDP端口地址通过TCP连接传送给建立所述UDP会话的服务端;所述为所述UDP会话创建的服务端的UDP端口地址通过所述TCP连接传送给所述请求建立所述UDP会话的客户端。
[0117] 结合实施例四,本发明在实施例四的第三种实施方式中,所述装置还包括:
[0118] 第一删除模块,用于当监听到结束所述UDP会话时,删除记录于所述映射表中所述UDP会话的映射地址组。
[0119] 结合实施例四,本发明在实施例四的第四种实施方式中,所述装置还包括:
[0120] 计时模块,用于当将接收到的映射地址组记录于所述映射表中或对所述映射地址组的状态进行更新时,对所述映射地址组启动计时;
[0121] 计时复位模块,用于当在计时阈值内检测到对所述映射地址组的状态进行更新时,对计时值复位;
[0122] 第二删除模块,用于当在计时阈值内未检测到对所述映射地址组的状态进行更新时,删除记录于所述映射表中的所述映射地址组。
[0123] 所述装置的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
[0124] 实施例五
[0125] 本发明实施例五提供一种终端设备,如图8所示,该设备包括:存储器21和处理器22,存储器21内存储有可在处理器22上运行的计算机程序。处理器22执行所述计算机程序时实现上述实施例中的UDP数据传输的方法。存储器21和处理器22的数量可以为一个或多个。
[0126] 该设备还包括:
[0127] 通信接口23,用于存储器21和处理器22之间的通信。
[0128] 存储器21可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0129] 如果存储器21、处理器22和通信接口23独立实现,则存储器21、处理器22和通信接口23可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,Peripheral Component)总线或扩展工业标准体系结构(EISA,Extended Industry Standard Component)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0130] 可选的,在具体实现上,如果存储器21、处理器22及通信接口23集成在一块芯片上,则存储器21、处理器22及通信接口23可以通过内部接口完成相互间的通信。
[0131] 在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0132] 此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0133] 流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0134] 在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
[0135] 本发明实施例所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质的更具体的示例至少(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读存储介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0136] 在本发明实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于指令执行系统、输入法或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、射频(Radio Frequency,RF)等等,或者上述的任意合适的组合。
[0137] 应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0138] 本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0139] 此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
[0140] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。