一种多端口组播方法、设备及计算机可读存储介质与流程

文档序号:16977820发布日期:2019-02-26 19:11阅读:276来源:国知局
一种多端口组播方法、设备及计算机可读存储介质与流程

本发明涉及通信技术领域,特别是涉及一种多端口组播方法、设备及计算机可读存储介质。



背景技术:

在互联网传输领域,随着多媒体视频技术的发展,组播传输技术的应用越来越广泛,比如iptv的频道传输,新兴的vr(virtualreality,虚拟现实)直播技术,都使用组播传输媒体数据。而且,这些组播传输需要支持一路组播需要传输多路码流,比如ott(overthetop)组播传输需要传输不同码率的码流,vr组播传输需要支持传输多视角的码流等。

目前的windows和linux系统对组播组的管理是依附于udpsocket。而udpsocket必须指定组播ip和端口,才能完成组播组的加入和离开。这种情况下,udpsocket只能接收目的端口为绑定端口(或者系统默认端口)的组播报文。

在传统协议栈实现情况下,如果同一组播组要接收不同端口的组播报文,需要创建多个udp组播socket,每个socket接收包含一种端口的组播报文,增加了应用层udp组播socket的管理复杂度。并且,由于cdn(contentdeliverynetworks,内容分发网络)服务器接口网卡、协议栈的组播路由条目和承载网路由器上组播组的数量(即组播路由条目数量)都是有限的,也就是说,组播资源是非常紧缺的。因此,亟需一种新的组播组的通信方法,以实现同一组播组中多端口组播通信问题。



技术实现要素:

本发明提供一种多端口组播方法、设备及计算机可读存储介质,用以解决现有技术中组播组无法实现多端口组播通信的问题。

为实现上述发明目的,本发明采用下述的技术方案:

依据本发明的一个方面,提供一种多端口组播方法,包括:

在加入组播组后,在本地配置多端口列表;

根据所述多端口列表对接收到的组播报文中的目的端口进行匹配,当匹配成功时,处理所述组播报文。

可选的,所述在本地配置多端口列表,包括:

在组播协议栈中预先增加端口配置接口;

通过所述端口配置接口将多个端口以哈希列表形式添加至所述组播协议栈中。

可选的,所述根据所述多端口列表对接收到的组播报文中目的端口进行匹配,包括:

对所述组播报文中的组播地址进行验证;

当验证成功时,判断所述组播报文中的任一目的端口是否位于所述多端口列表中;当位于时,则匹配成功,将所述组播报文添加至接收队列中。

可选的,所述方法还包括:

当所述组播地址验证失败或者当所述组播报文中的任一目的端口不在所述多端口列表中时,则将所述组播报文丢弃。

可选的,所述方法还包括:

当需要发送多端口的组播报文时,将不同的端口配置至所述组播报文中的目的端口字段中。

依据本发明的一个方面,提供一种多端口组播设备,包括存储器和处理器;其中,所述存储器中存储有多端口组播程序,当所述多端口组播程序被所述处理器执行时,以实现如下步骤:

在加入组播组后,在本地配置多端口列表;

根据所述多端口列表对接收到的组播报文中目的端口进行匹配,当匹配成功时,处理所述组播报文。

可选的,当所述多端口组播程序被所述处理器执行时,以实现如下步骤:

在组播协议栈中预先增加端口配置接口;

通过所述端口配置接口将多个端口以哈希列表形式添加至所述组播协议栈中。

可选的,当所述多端口组播程序被所述处理器执行时,以实现如下步骤:

对所述组播报文中的组播地址进行验证;

当验证成功时,判断所述组播报文中的任一目的端口是否位于所述多端口列表中;当位于时,则匹配成功,将所述组播报文添加至接收队列中。

可选的,当所述多端口组播程序被所述处理器执行时,以实现如下步骤:

当需要发送多端口的组播报文时,将不同的端口配置至所述组播报文中的目的端口字段中。

依据本发明的一个方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有多端口组播程序,当所述多端口组播程序被所述处理器执行时,以实现上述所述的多端口组播方法中的步骤。

本发明有益效果如下:

本发明实施例所提供的多端口组播方法、设备及计算机可读存储介质,通过在建立组播组通信后,配置用于多端口通信的多端口列表;在接收到携带不同的端口号的组播报文时,根据该多端口列表可以确定组播报文是否需要处理,以实现同一组播组中不同端口报文的接收。可知,基于本发明通过配置多端口列表无需建立多个udpsocket,减少socket的创建,降低了应用层socket的管理复杂度。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

为了更清楚地说明本发明实施例或现有中的方案,下面将对实施例或现有描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中多端口组播方法的流程图;

图2为本发明一具体实施例中多端口组播方法的流程图;

图3为本发明体实施例中多端口组播设备的原理框图。

具体实施方式

以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

在windows和linux这些通用操作系统的协议栈中,通过igmp(internetgroupmanagementprotocol)协议来控制和管理组播组。只有igmp协议直接与组播主机联系,运行igmp的路由器负责管理组成员的加入、离开,维护组成员关系。对于igmp报文格式参见下表,包括版本字段,包含igmp版本标识,目前有v1、v2和v3三个版本;类型字段,包括成员关系查询(0x11),成员关系报告(0x12);校验和字段,用于igmp协议报文的校验和;组地址;当一个成员关系报告正被发送时,组地址字段包含组播地址。当用于成员关系查询时,本字段为0,并被主机忽略。

表1

而组播组在进行udpsocket通信时,采用的udp报文格式如下:

在udp报文中,只有源和目的端口,表示数据报文长度的字段,udp数据报文校验和,以及udp数据。

表2

从igmp协议规范和报文格式可以看到,igmp协议在控制和管理组播组的时候,只跟组播组的ip地址有关系,跟ip上承载的udp协议的端口没有关系。组播报文是承载在ip和udp协议之上的,因此,在某个组播组上传输多端口的数据流是可行的,也不影响igmp本身协议族的正常运行。基于上述的思路,提出了本发明的多端口组播方法。

方法实施例

本发明实施例所提供的多端口组播方法,如图1所示,具体包括如下步骤:

步骤101,在加入组播组后,在本地配置多端口列表。

在该步骤中,在组播主机要加入某个组播组时,需要创建udpsocket,设置组播协议栈中的ip_add_membership属性。而后向交换机发送igmp协议加入报文,用于完成加入组播组的动作。如果主机要退出某个组播组,需要再次设置该udpsocketip层的ip_drop_membership属性,向交换机发送igmp协议的离开报文,用于完成离开组播组的动作。

其中,组播主机加入组播组后,建立了udpsocket通信。在该实施例中,对组播组协议栈进行了改进。具体地,在协议栈中增加了多端口配置接口。在建立组播组通信后,通过多端口配置接口配置可接收的端口号,并将端口号以哈希列表的形式保存至组播协议栈中针对udpsocket通信相应的数据结构中。

步骤102,根据所述多端口列表对接收到的组播报文中的端口进行匹配,当匹配成功时,处理所述组播报文。

在加入组播组进行通信后,当接收到交换机发送的组播报文中,根据udpsocket通信中的多端口列表对组播报文进行匹配。

由于在组播组内进行通信(组播主机与交换机间)时,采用ip协议进行承载udp协议,因此当接收到组播报文后,首先对组播报文中的组播地址(也是组播ip地址)进行验证,当验证通过后,再进行下一步的端口号的验证处理;当验证失败后,则说明当前的组播报文并非所属组内的报文,则丢弃该组播报文即可。

其中,在对接收到的组播报文中的端口进行匹配时,通过扫描多端口列表中设置的端口号与组播报文中的目的端口号进行匹配,当目的端口号为多端口列表中的任一端口号时,则说明该组播报文为可处理报文,并将该报文添加至接收队列中,以供后续进一步处理;而当目的端口号不存在于多端口列表中时,则将该组播报文直接丢弃接口。

基于上述可知,在进行组播组通信时,不再局限于对特定目的端口的报文进行处理,通过在本地的协议栈中配置多端口列表,根据该多端口列表可以实现不同目的端口的报文的处理,实现的同一组播组中不同端口数据流的接收。在该实施例中,无需配置多个socket,通过单个socket即可实现,有效降低通信的复杂度,节省组播资源。

进一步的,该方法还包括组播报文的发送,具体实现方式如下:

当需要发送多端口的组播报文时,在所述组播报文中的目的端口字段中配置不同的端口即可。

其中,在该步骤中,当需要发送时,可以根据实际需要配置所需发送的端口号,将该携带多端口号的数据报文中,而后在将数据报文通过组播地址所用的协议进行封装,而后发送至组播组中即可。

下面结合附图和具体实施例对本发明的技术内容做进一步的详细说明。

在该实施例中,组播主机采用linux协议栈,当然本发明不局限于linux协议栈,还可以为windows协议栈,这里仅做说明。在本实施例中,利用igmp协议报文管理加入和离开组播组,并上报组播信息。组播主机利用ip和udp协议进行通信,通过ip协议承载udp协议携带的数据内容;其中,在ip协议报文头中指定目的地址为组播地址(组播ip地址),在udp协议报文头中指定不同的目的端口,以表示不同的数据流。具体地,如图2所示,包括如下步骤:

步骤201,组播主机创建udpsocket,设置该udpsocketip层的ip_add_membership接口。

步骤202,组播主机采用linux协议栈,通过ip_add_membership接口通知本地的操作系统发生igmp协议报文,发送至交换机,以使交换机上生成一个组播条目。

具体地,在发生igmp协议报文时,在本地系统的网口上创建组播mac和组播ip地址,并携带至igmp协议报文发送至交换机中。

步骤203,组播主机加入组播组后,通过ip_add_memberport接口将配置多个端口添加至udpsocket中。

在linux协议栈中需要增加一个ip_add_memberport接口,通过该接口通知本地的操作系统添加指定的端口到该组播udpsocket中。

在linux协议栈中,structinet_sock数据结构中__be16inet_sport字段表示socket源端口;structip_mc_socklistmc_list字段表示加入的组播组列表;在structip_mc_socklist结构体中,structip_mreqnmulti字段表示组播组的信息。

为了使得组播udpsocket能够接收多个端口的组播报文,本发明实施例中,在linux协议栈的structip_mc_socklist数据结构中,添加组播多端口hash(哈希)表,即structinet_mc_hashbucketport_bucket,存放能该组播udpsocket的端口信息,具体地,实现代码方式如下:

步骤205,组播主机接收组播报文,匹配组播报文中udpsocket所属的组播ip地址多端口hash表,当匹配通过时,将组播报文添加至接收队列中。

在建立组播组通信后,交换机将属于该组播组的组播报文发送到加入组播组的所有组播主机中。这里,交换机采用udpsocket进行通信,只根据组播ip地址完成报文的转发,对于报文的处理则由组播主机完成。

具体地,linux协议栈通过内核接收函数可以接收包含多端口的组播报文。当接收到组播报文时,通过检查udpsocket所属的组播ip地址,确认该udpsocket是否属于所属组播组的报文;

若属于所属组播组,再扫描udpsocket的structinet_sock成员的多端口hash表,并匹配组播报文中的目的端口;

若组播报文中目的端口与udpsocket的多端口hash表中的某个端口匹配,则把相应的数据报文添加到udpsocket的接收队列上,等待应用层程序接收该udpsocket的组播报文。

其中,当组播报文中目的端口包括多个时,则检测到任一目的端口位于多端口hash表中,则匹配通过,将相应的数据报文添加至接收队列中。

进一步地,当组播主机通过udpsocket发送组播报文时,按照udp协议报文格式,如果udpsocket需要发送包含多个端口的udp组播报文,只需要在目的端口字段填写不同的端口值即可,通过ip协议将组播ip地址进行封装,这样可以实现udpsocket多端口的组播报文的发送。

基于上述可知,在该具体实施例中对现有驻留操作系统组播组管理应用进行了扩展。在该实施例中,组播组的加入和离开,兼容linux协议栈udpsocket的ip_add_membership命令。同时,增加ip_add_memberport接口,可以向组播udpsocket中添加多个端口,并且修改udpsocket接收组播报文的流程,使得linux协议栈可以接收多个包含不同端口的组播报文。

设备实施例

根据本发明的实施例,提供了一种多端口组播设备,用于实现上述的多端口组播方法。如图3所示。该设备括处理器32以及存储有处理器32可执行指令的存储器31。

其中,处理器32可以是通用处理器,例如中央处理器(centralprocessingunit,cpu),还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。

存储器31,用于存储程序代码,并将该程序代码传输给cpu。存储器31可以包括易失性存储器(volatilememory),例如随机存取存储器(randomaccessmemory,ram);存储器31也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-onlymemory,rom)、快闪存储器(flashmemory)、硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd);存储器31还可以包括上述种类的存储器的组合。

具体地,本发明所提供的多端口组播设备,包括存储器31和处理器32;其中,所述存储器31中存储有多端口组播程序,当所述多端口组播程序被所述处理器32执行时,以实现如下步骤:

在加入组播组后,在本地配置多端口列表;

根据所述多端口列表对接收到的组播报文中目的端口进行匹配,当匹配成功时,处理所述组播报文。

可选的,当所述多端口组播程序被所述处理器32执行时,以实现如下步骤:

在组播协议栈中预先增加端口配置接口;

通过所述端口配置接口将多个端口以哈希列表形式添加至所述组播协议栈中。

可选的,当所述多端口组播程序被所述处理器32执行时,以实现如下步骤:

对所述组播报文中的组播地址进行验证;

当验证成功时,判断所述组播报文中的任一目的端口是否位于所述多端口列表中;当位于时,则匹配成功,将所述组播报文添加至接收队列中。

当所述组播地址验证失败或者当所述组播报文中的任一目的端口不在所述多端口列表中时,则将所述组播报文丢弃。

可选的,当所述多端口组播程序被所述处理器32执行时,以实现如下步骤:

当需要发送多端口的组播报文时,将不同的端口配置至所述组播报文中的目的端口字段中。

需要说明的是,在设备实施例中,仅对各个步骤进行简单的说明,对于具体的实现,可以参见方法实施例中的详细说明,在该实施例中不再进行赘述。

存储介质实施例

本发明实施例还提供了一种计算机可读存储介质。这里的计算机可读存储介质存储有一个或者多个程序。其中,计算机可读存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。当计算机可读存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现方法实施例所提供的多端口组播方法中的全部步骤和部分步骤。对于步骤具体的实现,可以参见方法实施例中的详细说明,在该实施例中不再进行赘述。

综上所述,本发明实施例所提供的多端口组播方法、设备及计算机可读存储介质,具有以下有益效果:

本发明对linux协议进行了补充,有效解决一路组播组可以接收多路组播流的问题。通过linux协议栈增加ip_add_memberport接口,使得linux协议栈udpsocket组播报文的接收功能增强,在同一个组播udpsocket下接收包含不同端口的组播报文;采用单个udpsocket通信,可以实现多端口组播报文的发送和接收,有效减少socket的创建,同时降低了应用层socket管理的复杂度,减少流媒体服务器节点与交换机之间的igmp协议报文交互,节省了相关设备上组播组条目的占用数量。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。

虽然通过实施例描述了本申请,本领域的技术人员知道,本申请有许多变形和变化而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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