著录项信息
专利名称 | 一种基于Linux系统服务器的语音数据内核转发方法 |
申请号 | CN201210066376.3 | 申请日期 | 2012-03-13 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2012-08-15 | 公开/公告号 | CN102638453A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/06 | IPC分类号 | H;0;4;L;2;9;/;0;6;;;H;0;4;L;2;9;/;0;8查看分类表>
|
申请人 | 广州华多网络科技有限公司 | 申请人地址 | 广东省广州市番禺区南村镇万博二路79号3108
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 广州方硅信息技术有限公司 | 当前权利人 | 广州方硅信息技术有限公司 |
发明人 | 胡建强;蒋德为;林正显;王国光;李新辉;陶思明 |
代理机构 | 广州新诺专利商标事务所有限公司 | 代理人 | 刘菁菁 |
摘要
本发明涉及一种基于Linux系统服务器的语音数据内核转发方法,包括在应用层设定过滤及转发规则、内核转发模块截获网络数据包、内核转发模块辨识网络数据包及转发等步骤完成,本发明通过在Linux系统服务器内核中转发语音包,大大缩短了语音包在Linux系统服务器中经过的路径,提高了单机转发效率,减少了服务器的使用量,节省运营成本,同时也降低了转发的时间延迟;通过将实时性低的命令发送至应用层进行处理,实现了对转发相关任务的分类管理,最大限度地提高了转发效率。
1.一种基于Linux系统服务器的语音数据内核转发方法,其特征在于,包括以下步骤实现:
s1:通过应用层设置内核转发模块的网络数据包过滤规则及转发规则;
s2:Linux系统把网卡驱动收到的网络数据包传送至内核转发模块,内核转发模块的过滤单元对网络数据包进行扫描,并基于步骤s1设置的过滤规则截获网络数据包;
s3:将上一步骤中截获的网络数据包转发到内核转发模块的转发单元;
s4:内核转发模块基于步骤s2中截获的网络数据包的目标端口信息调用与该端口对应的端口处理函数对网络数据包进行辨识处理;
s5:如上一步骤的端口处理函数判断网络数据包可以被转发,则转发网络数据包,如上一步骤的端口处理函数判断网络数据包不可以被转发,则将网络数据包发送给Linux协议栈;
所述步骤s5中,所述转发网络数据包又包括以下步骤:
s51:内核转发模块对网络数据包进行修改、计算和校验;
s52:内核转发模块调用预设驱动程序转发经修改后的当前数据包。
2.如权利要求1所述的基于Linux系统服务器的语音数据内核转发方法,其特征在于,所述步骤s52中,预定驱动程序对当前数据包的转发包括一对一转发和一对多转发,所述一对多转发时,内核转发模块先复制网络数据包并为每个复制体写入目标地址。
3.如权利要求1所述的基于Linux系统服务器的语音数据内核转发方法,其特征在于,所述步骤s52中,内核转发模块完成转发后,将转发的当前数据包传递给应用程序。
4.如权利要求3所述的基于Linux系统服务器的语音数据内核转发方法,其特征在于,所述步骤s3-s5中,应用程序定期对内核转发模块的工作状态信息进行采集,如内核转发模块处于非正常工作状态,则设定应用程序直接将数据包发送至应用层。
一种基于Linux系统服务器的语音数据内核转发方法\n技术领域\n[0001] 本发明属于互联网信息传播领域,更具体地,涉及一种基于Linux系统服务器的语音数据内核转发方法。\n背景技术\n[0002] 随着网络技术的发展以及网络带宽的提高,互联网语音技术越来越被广泛使用,当前一款成功的互联网即时语音通信产品,需要同时支持几十万上百万、甚至上千万的同时在线用户,尤其对于团队语音软件来说,需要实现一个用户到多个目标用户(可能是上万用户)的广播,只有通过服务器中转完成语音广播。而目前的语音服务器中,其语音转发过程都是通过应用层来进行,参见图1,在现有典型的语音服务器中,语音转发都通过以下路径实现:网卡→驱动程序→协议栈→API(应用层、内核层切换,即上下文切换)→应用程序,再由应用层应用程序→API(应用层、内核层切换,即上下文切换)→协议栈→驱动程序→网卡发送至网络,即语音数据包的转发过程要在内核层和应用层之间切换,两次经过协议栈和Linux上下文切换,由于Linux上下文切换非常费时,这导致现有基于应用层的转发方案经过的路径长,延时高,使得语音服务器性能低下,而且非常耗时,对于延时敏感的语音数据来说,转发质量得不到保证,同时另外由于语音服务器性能不高,需要部署大量的服务器,增加了资金投入。\n发明内容\n[0003] 本发明的目的,就是克服现有技术的不足,提供一种基于Linux系统服务器的语音数据内核转发方法,采用该方法可以大大节省服务器资源,提高服务器转发的工作效率。\n[0004] 为了达到上述目的,采用如下技术方案:\n[0005] 一种基于Linux系统服务器的语音数据内核转发方法,包括以下步骤实现:\n[0006] s1:通过应用层设置内核转发模块的网络数据包过滤规则及转发规则;\n[0007] s2:Linux系统把网卡驱动收到的网络数据包传送至内核转发模块,内核转发模块的过滤单元对网络数据包进行扫描,并基于步骤s1设置的过滤规则截获网络数据包;\n[0008] s3:将上一步骤中截获的网络数据包转发到内核转发模块的转发单元;\n[0009] s4:内核转发模块基于步骤s2中截获的网络数据包的目标端口信息调用与该端口对应的端口处理函数对网络数据包进行辨识处理;\n[0010] s5:如上一步骤的端口处理函数判断网络数据包可以被转发,则转发网络数据包,如上一步骤的端口处理函数判断网络数据包不可以被转发,则将网络数据包发送给Linux协议栈处理。\n[0011] 进一步地,所述步骤s5中,所述转发网络数据包又包括以下步骤:\n[0012] s51:内核转发模块对网络数据包进行修改、计算和校验;\n[0013] s52:内核转发模块调用预设驱动程序转发经修改后的当前数据包。\n[0014] 更进一步地,所述步骤s52中,预定驱动程序对当前数据包的转发包括一对一转发和一对多转发,所述一对多转发时,内核转发模块先复制网络数据包并为每个复制体写入目标地址。\n[0015] 再进一步地,所述步骤s52中,内核转发模块完成转发后,将转发的当前数据包传递给应用程序。\n[0016] 还进一步地,所述步骤s3-s5中,应用程序定期对内核转发模块的工作状态信息进行采集,如内核转发模块处于非正常工作状态,则设定应用程序直接将数据包发送至应用层。\n[0017] 与现有技术相比,本发明的有益效果在于:\n[0018] 通过在Linux系统服务器内核中转发语音包,大大缩短了语音包在Linux系统服务器中经过的路径,提高了单机转发效率,减少了服务器的使用量,节省运营成本,同时也降低了转发的时间延迟;通过将实时性低的命令发送至应用层进行处理,实现了对转发相关任务的分类管理,最大限度地提高了转发效率。\n附图说明\n[0019] 图1是现有技术中语音转发的流程示意图。\n[0020] 图2是本发明所述基于Linux系统服务器的语音数据内核转发方法的流程示意图。\n[0021] 图3是本发明所述基于Linux系统服务器的语音数据内核转发方法的原理示意图。\n[0022] 图4是本发明所述基于Linux系统服务器的语音数据内核转发方法的应用层和内核模块的数据交换示意图。\n[0023] 图5是本发明所述基于Linux系统服务器的语音数据内核转发方法的数据包结构示意图。\n具体实施方式\n[0024] 下面参见附图和具体实施例,对本发明做进一步说明:\n[0025] 参见图2,本发明所述的于Linux系统服务器的语音数据内核转发方法,其特征在于,包括以下步骤实现:\n[0026] s1:通过应用层设置内核转发模块的网络数据包过滤规则及转发规则;\n[0027] 在Linux系统服务器内,与语音转发功能对应的是语音转发应用程序,用户可以在应用程序中可以对内核转发模块的数据包过滤规则和转发规则进行设置,该应用程序会提供专门界面以方便用户执行上述设置操作。更具体地,用户通过应用程序至少可以对以下项目进行设置和管理:Linux系统服务器需要拦截的端口、允许转发的目的地、数据需要被复制的份数、网络数据包的目的地数量等,参见图3,上述配置数据都是通过应用程序编程接口(Application Programming Interface,简称API)经由路径⑤→⑥写入内核控制器,该路径是通过Linux的文件操作接口实现的,应用程序通过写一个虚拟的文件,完成对内核的配置。图4所示为应用程序和内核的一个数据交换示意图,其中应用程序(Application)通过文件操作接口与内核模块(Kernel Module)交互,应用层通过与其他服务器节点交互,完成各种配置数据(包含但不仅限于过滤规则和转发规则)的获取和组装,然后传输到内核。\n[0028] s2:Linux系统把网卡驱动收到的网络数据包传送至内核转发模块,内核转发模块的过滤单元对网络数据包进行扫描,并基于步骤s1设置的过滤规则截获网络数据包;\n[0029] 与Linux系统服务器相对应往往设置有多个与之相配合的客户端,在Linux系统服务器接入网络后,这些客户端将录制好的语音打包发送至服务器进行转发,Linux的Netfilter模块提供了一种Hook挂载方式,该方式可以通过在内核模块中设置回调函数,截获网卡收到的所有数据包。客户端送来的数据包被该回调函数收到后被送至内核转发模块的过滤单元,过滤单元按照应用层设置的过滤规则对数据包进行拦截,所述过滤规则目的是判断那些数据包需要被转发,在本实施例中,上述过滤规则基于对网络数据包的特征信息识别来完成,所述特征信息可以是数据包包头中的信息,也可是数据包中的某个特征,具体地说,上述特征信息可以是写入数据包里的几个字段,如1)源、目的IP;2)源、目的端口;3)数据包中数据部分的特定字节,如第0~4字节是否等于某一个值。这些特征字段由客户端在制作网络数据包时一并写入,当Linux服务器的网卡驱动扫描网络数据包的过程即是获取上述字段并进行判断,以决定哪些包需要被拦截转发。\n[0030] 现有的Linux操作系统提供的Netfilter开发接口提供了5个点供模块开发人员截获网络数据包并做相应的处理,该接口的5个点分别如下:\n[0031] 1)、NF_INET_PRE_ROUTING,接收报文做路由之前的网络数据;\n[0032] 2)、NF_INET_FORWARD,接收路由后,数据包转到另个一个网络适配器(Network Interface Card,简称NIC)之前的网络数据;\n[0033] 3)、NF_INET_POST_ROUTING,接收报文送出之前的网络数据;\n[0034] 4)、NF_INET_LOCAL_IN,接收路由后,流入本地的报文;\n[0035] 5)、NF_INET_LOCAL_OUT,接收(复制)本地输出的报文;\n[0036] s3:将上一步骤中截获的网络数据包转发到内核转发模块的转发单元;\n[0037] 需要注意的是,本发明所述的基于Linux系统服务器的语音数据内核转发方法只用到NF_INET_PRE_ROUTING接口,在网卡驱动收到网络数据包且在做路由之前,Linux系统服务器立即就会调用NF_INET_PRE_ROUTING,该方式是经过路径最少的接口,因此使得Linux服务器性能也非常高。\n[0038] s4:内核转发模块基于网络数据包的目标端口信息调用与该端口对应的端口处理函数对网络数据包进行识别;\n[0039] 客户端在发送语音包时会给每个语音包设置端口信息,具体地说,就是用户数据报协议(User Datagram Protocol,简称UDP)制定的目的端口,当内核转发模块截获NF_INET_PRE_ROUTING送来的用户数据报协议数据包后,内核转发模块读取该网络数据包并查询预置于内核转发模块的端口代码数据库得到目标的端口信息,再根据端口信息调用端口处理函数对接收到的网络数据包进行辨识处理。\n[0040] s5:如上一步骤的端口处理函数判断网络数据包可以被转发,则转发网络数据包,如上一步骤的端口处理函数判断数据包不可以被转发,则将网络数据包转发给Linux协议栈处理。\n[0041] 在本步骤中,如上一步骤的端口处理函数认为语音数据包可以被转发,则调用预定驱动程序制作路由并由内核发送模块发送语音数据包,如上一步骤的端口处理函数发现数据包不可以被转发,则转发给应用层处理,即使数据包被内核转发,也可以同时交由应用程序继续做各种处理,包含但不限于转发处理。本步骤中端口处理函数对网络数据包的判断基于步骤s1中设置的转发规则,其实质是决定被拦截的网络数据包应该如何被转发,其转发规则主要有以下两种方式:\n[0042] 1)根据数据包的数据部分(非IP、TCP或UDP的包头部分)的特定字段设置的转发地址或端口转发;\n[0043] 2)根据数据部分的一些字段,如某几个字节等于某一个值,应用层设定对应的值需要被转发到的目标地址和端口(可能是一个地址,也可以是多个地址),网络数据包被复制多份,并由转发单元一一转发到这些地址。\n[0044] 如果本步骤中端口处理函数对网络数据包的判断结果是可以被转发,其后续过程又可以分为以下两个阶段:\n[0045] s51:内核转发模块对网络数据包进行修改、计算和校验;\n[0046] 本步骤主要是更改网络数据包的目标地址,对数据包的内容也可能做相应改变,其对数据包的更改包含但不限于1)在数据包末尾增加序号信息;2)如果数据包中制定了该数据包的最终目标地址,该目标地址会被放到数据包的包头信息中,然后目标地址字段会被修改为转发服务器的地址,并对修改后的当前数据包进行校验。\n[0047] s52:内核转发模块调用预定驱动程序转发经修改后的当前数据包。\n[0048] 当s51中的校验步骤完成后,内核转发模块调用预定驱动程序将当前数据包转发至目标地址。\n[0049] 根据目标的不同,本步骤对当前数据包的转发包括一对一转发和一对多转发;根据网络数据包的不同,内核转发模块对数据包的转发又可以分为简单转发(SimpleForward)和媒体数据转发(MediaRouter)等方式(参见图3):\n[0050] 参见图5、一个典型的数据包包括标准IP包头,标准UDP包头和UDP包数据部分,其中IP包头含源、目的地址;标准UDP包头含源、目的端口;UDP包数据部分包括含语音数据,以及用于过滤的特征字段,用于转发的目的地址和端口,以及用于转发的其他数据。如果网卡截获的网络数据包数据部分本身包含目标地址,则内核转发模块仅需将接收到的网络数据包的包头目的地址修改为数据部分包含的目的地址,并将数据部分目的地址修改为转发服务器的地址直接转发,该方式一般用于在做测试、或者只需要进行一对一转发时对简单数据的转发;而在媒体数据转发过程中,如果网络数据中本身不包括转发目标的地址,则需要Linux系统服务器添加地址并中转,该方式可以方便地实现对媒体数据,特别是语音包的转发,也可以对语音包进行一对一、一对多、和应用程序配合转发,等多种转发方式,当转发为一对多时,内核转发模块先对内核转发模块收到的网络数据包进行复制并为每个复制写入目标地址。\n[0051] 另一种情况,如s4步骤的判断结果是内核转发模块无法转发,则Linux系统协议栈将接收到的网络数据包转发至应用层,通过应用软件进行包括转发在内的后续处理。在本实施例中,应用程序的和内核转发模块之间协同工作,以最大限度地发挥Linux系统服务器的功能。应用程序的意义还在于,基于不同的网络环境和服务器处理能力,为了尽可能充分地利用内核转发模块去处理实时性要求较高的语音转发操作,一些延时要求较低、计算量较大以及信令相关的业务都由应用程序来完成,故在内核转发过程结束之后,可以将数据包交由应用程序进行存储或统计等,甚至是继续做更复杂的转发(如讲将UDP数据包通过TCP转发出去)。\n[0052] 在上述步骤s3-s5中,应用程序还定期对内核转发模块的工作状态信息进行采集,如内核转发模块处于非正常工作状态时,则应用程序将指令内核转发模块将接收到的网络数据包直接发送到应用程序,本系统也同时自动退回应用层转发模式,参见图3,路径⑦→⑧负责内核状态的采集,应用程序需要获得内核的各种状态,与配置数据写类似,该状态的获得通过读Linux的一个虚拟文件实现。\n[0053] 应该理解,以上具体实施例所公布的内容仅为本发明的部分优选方案,凡是基于本发明的技术方案、符合本发明的技术精神,属于本领域技术人员无需进行创造性劳动即可得到的实施都应属于本发明的保护范围。
法律信息
- 2016-10-12
专利权人的姓名或者名称、地址的变更
专利权人由广州华多网络科技有限公司变更为广州华多网络科技有限公司
地址由510660 广东省广州市天河区建中路50号二楼变更为511446 广东省广州市番禺区南村镇万博商务区万达广场B1座28层
- 2015-07-29
- 2015-07-01
专利实施许可合同备案的生效
IPC(主分类): H04L 29/06
合同备案号: 2015990000265
专利申请号: 201210066376.3
申请日: 2012.03.13
让与人: 广州华多网络科技有限公司
受让人: 广州市百果园网络科技有限公司
发明名称: 一种基于Linux系统服务器的语音数据内核转发方法
申请公布日: 2012.08.15
许可种类: 排他许可
备案日期: 2015.05.04
- 2012-10-03
实质审查的生效
IPC(主分类): H04L 29/06
专利申请号: 201210066376.3
申请日: 2012.03.13
- 2012-08-15
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2011-08-17
|
2011-04-12
| | |
2
| |
2008-07-09
|
2008-01-08
| | |
3
| |
2011-03-30
|
2010-09-21
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |