CN101827029B - 一种Linux网络设备动态标记RTP流量的方法 - Google Patents

一种Linux网络设备动态标记RTP流量的方法 Download PDF

Info

Publication number
CN101827029B
CN101827029B CN2010101515736A CN201010151573A CN101827029B CN 101827029 B CN101827029 B CN 101827029B CN 2010101515736 A CN2010101515736 A CN 2010101515736A CN 201010151573 A CN201010151573 A CN 201010151573A CN 101827029 B CN101827029 B CN 101827029B
Authority
CN
China
Prior art keywords
rtp
rtp streaming
rule
streaming
record
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.)
Expired - Fee Related
Application number
CN2010101515736A
Other languages
English (en)
Other versions
CN101827029A (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.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies 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 Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN2010101515736A priority Critical patent/CN101827029B/zh
Publication of CN101827029A publication Critical patent/CN101827029A/zh
Application granted granted Critical
Publication of CN101827029B publication Critical patent/CN101827029B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一种Linux网络设备动态标记RTP流量的方法,当SIP ALG检测到新的RTP流时,调用RTP流量标记模块提供的添加规则接口,RTP流量标记模块在Netfilter中增加与新的RTP流对应的规则,对通过网络设备转发的流量进行标记;当SIP ALG检测到失效的RTP流时,调用RTP流量标记模块提供的删除规则接口,RTP流量标记模块删除Netfilter中与失效的RTP流对应的规则,防止RTP流量被错误标记;所述RTP流量标记模块还负责维护RTP流识别信息、标记值及对应的CALL-ID记录。本发明所述的Linux网络设备动态标记RTP流量的方法,Linux网络设备能够及时有效地标记RTP流量,从而及时有效地根据该标记采用对应的QoS策略。

Description

一种Linux网络设备动态标记RTP流量的方法
技术领域
本发明涉及Linux网络设备流量的动态标记,具体的说是一种Linux网络设备动态标记RTP(Real-time Transport Protocol,实时传输协议)流量的方法。
背景技术
随着Linux日趋广泛的应用于各种网络设备,尤其是涉及到转发数据包时,传统IP Best-Effort(尽力而为)方式不能满足多媒体数据对带宽、迟延的迫切要求,因此对这些数据进行QoS(Quality ofService,服务质量)保证是一种很好的解决方案。
QoS保证主要分为三个部分:首先识别该流量;然后标记该流量;最后根据标记值对该流量进行调度及带宽保证。
流量的识别可分为固定和变化的。前者是预知的,例如发向HTTP(Hypertext Transfer Protocol,超文本传输协议)服务器的HTTP流量目地端口通常为80;而后者需通过动态分析数据包获取流量的识别信息,例如SIP(Session Initiation Protocol,会话初始协议)ALG(Application Layer Gateway,应用层网关)。SIP ALG通过分析SIP信令的INVITE消息,获得该会话后续传送数据的RTP流识别信息(所述RTP流识别信息包括CALL-ID标识、源/目地IP地址、源/目地端口地址),或分析SIP信令BYE消息,获得将结束会话的CALL-ID,表明对应RTP流的结束。
流量的调度及带宽保证可以在ISO/OSI(InternationalOrganization for Standardization/Open SystemsInterconnection,国际标准化组织/开放系统互连)7层参考模型中的第二层及第三层处通过一些策略及调度队列算法来保证。
而如何及时、准确的标记各种变化的流量一直是业内研究的重点。
目前,在Linux平台下流量标记的最有效方式是通过Netfilter/Iptables(Netfilter是Linux内核防火墙框架,Iptables是用户空间配置Linux防火墙规则的应用程序)完成。Linux内核中的Netfilter采用模块化设计,对网络代码的直接干涉降到最低,并提供了一个可扩充的框架,允许用规定的接口将其它包处理代码以模块的形式添加到内核中,具有极强的灵活性。使用者通过用户空间工具Iptables连接到Netfilter的架构中,可以对数据包进行过滤、地址转换、修改等操作。
Netfilter主要通过表(table)、链(chain)实现规则(rule),从而对接收与发送的数据包进行修改。可以这么说,Netfilter是表的容器,表是链的容器,链是规则的容器,最终形成对数据包处理规则的实现。
详细地说,Netfilter/Iptables的体系结构可以分为两个大部分:Netfilter的HOOK(钩子)机制和Iptables基础模块:
Netfilter的HOOK(钩子)机制
Netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这样当某个数据包被传递给Netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样模块就有机会检查、修改、丢弃该数据包及指示Netfilter将该数据包传入用户空间的队列。
这样,HOOK提供了一种方便的机制:在数据包通过Linux内核的不同位置上截获和操作处理数据包。
Netfilter模块在IPv4中定义了五个HOOK,如图1所示,其中的Device Driver为Linux网络设备的网络接口驱动程序,负责在网络上收发数据包。数据包经过各个HOOK的流程如下:进入Linux网络设备的数据包在进行IP校验后,在第一个HOOK函数NF_IP_PRE_ROUTING进行处理;然后路由代码ROUTE决定该数据包下一步是进行转发还是发给本机处理;若该数据包是发给本机的,则该数据经过HOOK函数NF_IP_LOCAL_IN处理后传递给上层协议LocalProcesses;若该数据包进行转发,则被HOOK函数NF_IP_FORWARD处理;转发的数据包通过HOOK函数NF_IP_POST_ROUTING处理后由Device Driver发送到网络上;本地上层协议Local Processes产生的数据先经过HOOK函数NF_IP_LOCAL_OUT处理,然后通过路由代码ROUTE进行路由处理(此处可能会对数据包涉及到路由的字段进行修改),最后经过HOOK函数NF_IP_POST_ROUTING处理后由DeviceDriver发送到网络上。
Figure GSA00000075071500031
Iptables基础模块
Iptables基础模块实现了三个表来筛选各种数据包,具体地讲,Linux2.6内核提供的这三种数据包的处理功能是相互间独立的模块,都基于Netfilter的HOOK函数和各种表、链实现。这三个表包括:数据包过滤filter表,网络地址转换表nat表以及数据包修改表mangle表。
目前Linux网络设备对RTP流量标记的有效方法是通过添加/删除Netfilter上mangle表NF_IP_FORWARD链上的规则来实现。而具体实现是通过用户空间的Iptables:将添加/删除规则的操作交给Iptables命令来处理。但考虑到网络设备所转发的RTP流量具有突发性,及RTP流识别信息的不确定性,采用这种方法主要有以下缺点:一是内核空间的SIP ALG需将RTP流量的识别信息及标记值传给用户空间的Iptalbes,再由Iptables配置内核空间的Netfilter,涉及到了内核空间到用户空间再到内核空间的通信,加重了网络设备负荷;二是用户空间的Iptables需要其它机制接收内核空间SIP ALG的信息,不能保证规则生效的及时性,导致部分RTP流量漏掉了标记操作;三是Iptables能识别IP信息(即源IP地址及端口、目地IP地址及端口、传输层协议)但不能识别SIP CALL-ID信息,SIP ALG检测到失效RTP流时能提供的唯一识别信息为CALL-ID,这需要其它机制关联CALL-ID对应的RTP流中的IP信息(即源IP地址及端口、目地IP地址及端口、传输层协议),才能准确将失效标记规则删除。
发明内容
针对现有技术中存在的缺陷,本发明的目地在于提供一种Linux网络设备动态标记RTP流量的方法,以便Linux网络设备能够及时有效地标记RTP流量,从而及时有效地根据该标记采用对应的QoS策略。
为达到以上目的,本发明采取的技术方案是:
一种Linux网络设备动态标记RTP流量的方法,其特征在于:
SIP ALG检测到新的RTP流或失效的RTP流后,调用RTP流量标记模块提供的添加/删除规则接口,根据检测到的具体情况执行以下操作;
当SIP ALG检测到新的RTP流时,调用RTP流量标记模块提供的添加规则接口,RTP流量标记模块在Netfilter中增加与新的RTP流对应的规则,对通过网络设备转发的流量进行标记;
当SIP ALG检测到失效的RTP流时,调用RTP流量标记模块提供的删除规则接口,RTP流量标记模块删除Netfilter中与失效的RTP流对应的规则,防止RTP流量被错误标记;
所述RTP流量标记模块还负责维护RTP流识别信息、标记值及对应的CALL-ID记录。
在上述技术方案的基础上,
A、当RTP流量标记模块收到SIP ALG的调用请求时,首先判断需要执行的操作:如果添加规则接口被调用,则执行步骤B;如果删除规则接口被调用,则执行步骤C;
B、SIP ALG传入的参数有:RTP流识别信息、RTP流的标记值及RTP流会话的CALL-ID,所述RTP流识别信息包括源IP地址,目地IP地址,源端口号,目地端口号,协议号;RTP流量标记模块检索Netfilter中mangle表NF_IP_FORWARD链中是否存在满足该RTP流识别信息及RTP流的标记值的规则,如存在,该接口函数直接返回,如不存在,转到步骤B1;
B1、RTP流量标记模块根据该RTP流识别信息及RTP流的标记值生成一条新的规则,并将该规则加入Netfilter中mangle表NF_IP_FORWARD链中,转到步骤B2;
B2、RTP流量标记模块将该RTP流识别信息、RTP流的标记值及RTP流会话的CALL-ID组成的结构体,插入到RTP流量标记模块维护的RTP记录链表中去,添加规则流程处理完成;
C、SIP ALG传入的参数有:RTP流会话的CALL-ID,RTP流量标记模块检索RTP流量标记模块维护的RTP记录链表,找到含有相同CALL-ID的记录,从记录中提取对应的RTP流识别信息及RTP流标记值,并从链表中删除该记录,转到步骤C1;
C1、RTP流量标记模块将Netfilter中mangle表NF_IP_FORWARD链中满足该RTP流识别信息及RTP流标记值的规则删除,删除规则流程处理完成。
在上述技术方案的基础上,当RTP流量标记模块收到SIP ALG的调用请求,且遇到无法判断添加规则接口、删除规则接口哪一个被调用时,则直接向调用模块返回,不进行任何处理操作。
在上述技术方案的基础上,RTP流量标记模块维护的RTP记录链表长度有限,每次从链表尾部加入新的记录,如果链表过长,则在加入新记录前,从表头移除最老的记录,并在Netfilter中删除对应的标记规则,所述RTP记录链表长度的具体限定根据该网络设备处理SIP会话的规模来设定。
在上述技术方案的基础上,为了防止Iptables配置的规则与其冲突,RTP流量标记模块作为Linux网络设备中唯一标记RTP流量的手段。
在上述技术方案的基础上,Netfilter中mangle表存放在结构体xt_table中,相关的具体链及规则信息存放在结构体xt_table_info中,xt_table_info中的entries字段指向所有规则集合的开头;
RTP流量标记模块根据RTP流识别信息及RTP流的标记值,构建一条新规则时,先为新规则集合分配内存,拷贝原有规则集合、新增加规则到新规则集合上去;更新xt_table_info的entries值,使其指向新规则集合的开头,并释放原有规则集合所占空间;
RTP流量标记模块根据RTP流识别信息及RTP流标记值,删除一条规则时,先在原规则集合中找到指定的规则;为新规则集合分配内存,拷贝除所删除规则外的原有规则集合到指定位置上去;更新xt_table_info的entries值,使其指向新规则集合,并释放原有规则集合所占空间。
在上述技术方案的基础上,所述RTP记录链表为双向链表,其成员包括RTP会话对应的CALL-ID、RTP流的识别信息及标记值,
RTP流识别信息及标记值用来描述对应标记规则,包含:源IP地址及端口、目地IP地址及端口、协议号及对应的标记值。
本发明所述的Linux网络设备动态标记RTP流量的方法,RTP流量标记模块运行在内核空间,可供运行在内核空间的SIP ALG模块直接调用;当SIP ALG检测到新的RTP流及失效的RTP流时,调用RTP流量标记模块提供的添加标记/删除标记接口,RTP流量标记模块可以立即在Netfilter中添加新的RTP流标记规则,或删除失效的RTP流标记规则,反应迅速;绕过用户空间的Iptables,避免了用户空间和内核空间拷贝数据的开销,降低了资源需求,有助于提高Linux网络设备的整体性能;根据SIP业务动态增加或删除标记RTP流的记录,防止冗余失效的规则在包转发时增加额外开销。
附图说明
本发明有如下附图:
图1是Netfilter的架构示意图;
图2是RTP流量标记模块与其它模块交互图;
图3是Netfilter关键数据结构关系;
图4是添加规则示意图;
图5是删除规则示意图;
图6是RTP记录链表;
图7是添加标记RTP流规则流程;
图8是删除标记RTP流规则流程。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图2所示,本发明所述Linux网络设备必须包括SIP ALG,Netfilter,SIP ALG和Netfilter均处于Linux网络设备的内核空间中,RTP流量标记模块则是本发明的新功能,现有的Linux网络设备是没有的。本发明中,RTP流量标记模块完成以下工作,其具体实现方式不限(例如:可以通过编写程序,用软件实现RTP流量标记模块及添加/删除规则接口):SIP ALG检测到新的RTP流或失效的RTP流后,调用RTP流量标记模块提供的添加/删除规则接口;具体地说:当SIP ALG检测到新的RTP流时,调用RTP流量标记模块提供的添加规则接口,RTP流量标记模块对应地在Netfilter中添加与新的RTP流对应的规则,对通过网络设备转发的该RTP流量进行标记;当SIPALG检测到失效的RTP流时,调用RTP流量标记模块提供的删除规则接口,删除Netfilter中与失效的RTP流对应的规则,防止RTP流量被错误标记。同时RTP流量标记模块还负责维护RTP流识别信息及对应的CALL-ID记录。图2中的Iptables运行在用户空间,与本发明实现无关。检测新的RTP流和失效的RTP流现有技术可以实现,均由SIP ALG负责,可通过分析SIP中的INVITE及BYE信令得到,该技术已很成熟,本文不再详述。
RTP流量标记模块是本发明的核心,下面对RTP流量标记模块的具体工作过程逐一详细说明。当RTP流量标记模块收到SIP ALG的调用请求时,首先判断需要执行的操作,具体包括如下步骤:
A、如果添加规则接口被调用,则执行步骤B;如果删除规则接口被调用,则执行步骤C;
B、SIP ALG传入的参数有:RTP流识别信息(RTP流识别信息包括:源IP地址,目地IP地址,源端口号,目地端口号,协议号)、RTP流的标记值及RTP流会话的CALL-ID。RTP流量标记模块检索Netfilter中mangle表NF_IP_FORWARD链中是否存在满足该RTP流识别信息及RTP流的标记值的规则,如存在,该接口函数直接返回,如不存在,转到步骤B1。
B1、RTP流量标记模块根据该RTP流识别信息及RTP流的标记值生成一条新的规则,并将该规则加入Netfilter中mangle表NF_IP_FORWARD链中。转到步骤B2。生成规则的具体方式详见后述。
B2、RTP流量标记模块将该RTP流识别信息、RTP流的标记值及RTP流会话的CALL-ID组成的结构体,插入到RTP流量标记模块维护的RTP记录链表中去。添加规则流程处理完成。
C、SIP ALG传入的参数有:RTP流会话的CALL-ID。RTP流量标记模块检索RTP流量标记模块维护的RTP记录链表,找到含有相同CALL-ID的记录,从记录中提取对应的RTP流识别信息及RTP流标记值,并从链表中删除该记录。转到步骤C1。
C1、RTP流量标记模块将Netfilter中mangle表NF_IP_FORWARD链中满足该RTP流识别信息及RTP流标记值的规则删除。删除规则流程处理完成。
其中,上述描述涉及通常的处理流程,若遇到其它情况则直接向调用模块返回。即当RTP流量标记模块收到SIP ALG的调用请求,且遇到无法判断添加规则接口、删除规则接口哪一个被调用时,则直接向调用模块返回,不进行任何处理操作。
其中,RTP流量标记模块维护的RTP记录链表长度有限,每次从链表尾部加入新的记录。如果链表过长,则在加入新记录前,从表头移除最老的记录,并在Netfilter中删除对应的标记规则。RTP记录链表长度可以根据该网络设备处理SIP会话的规模来设定,兼顾效率与性能。SIP会话规模即网络设备在实际应用中需支持并发的SIPINVITE消息个数。以一般的家庭网关为例:其LAN(局域网)侧以太口一共接4个PC,每个PC运行2个SIP电话程序,如果这些SIP电话程序同时与WAN(广域网)侧外的其它终端进行通话,记录链表至少为4*2,即8个单位的长度(注,每个会话均产生一个SIP INVITE消息)。
其中,为了防止Iptables配置的规则与其冲突,RTP流量标记模块应作为Linux网络设备中唯一标记RTP流量的手段。
本发明可应用于Linux网络设备,所述Linux网络设备是指Linux家庭网关(也称为Linux网关)、Linux路由器,以Linux家庭网关为例,当Linux家庭网关的SIP ALG检测到RTP流量后(目前公开的主流方案均是采用SIP ALG检测到新的RTP流或失效的RTP流),可调用本发明提供的RTP流量标记模块实现RTP流量的动态标记。通过Linux网络设备的数据包均会通过Netfilter架构,从而根据对应链上的规则对匹配的数据包进行进一步的处理,比如本专利涉及到的标记功能。在介绍本发明具体实施前,首先对相关结构体进行介绍。
图3描述了Netfilter中关键的数据结构。Netfilter的关键数据结构就是描述表、链和规则的数据结构。表的基本数据结构是xt_table,并且有一个指针类成员指向xt_table_info;xt_table_info主要描述链的信息并有一个指针成员指向一系列链上的规则集合;一个完整的规则由三种数据结构共同实现,分别是:一个ipt_entry结构,存储规则的整体信息及部分匹配的Layer3的IP相关信息;0个或多个ipt_entry_match结构(Netfilter中ipt_entry_match是存放扩展的匹配规则,例如Layer4的信息——传输层协议端口号,如果无扩展的匹配规则,ipt_entry_match就为0个),存放各种扩展的匹配规则,用来进一步实现对包的匹配功能;1个ipt_entry_target结构,存放规则的处理操作,用来实现对匹配包进行对应的操作。
这样,当一个包转到某个表的某个链上时,若ipt_entry结构吻合,且数据包相关字段满足ipt_entry_match的要求,就将数据包转给ipt_entry_target的处理函数处理,从而实现对匹配数据包的特殊处理。
本发明通过在内核空间Netfilter的mangle表的NF_IP_FORWARD链上动态增删对应的RTP流的识别信息及标记值生成规则来实现动态标记RTP流量。如图4、图5所示。
图4描述了添加规则的示意图。Netfilter中mangle表存放在结构体xt_table中,相关的具体链及规则信息存放在结构体xt_table info中,xt_table_info中的entries字段指向所有规则集合的开头。RTP流量标记模块根据RTP流识别信息及RTP流的标记值,构建一条新规则;先为新规则集合分配内存,拷贝原有规则集合、新增加规则到新规则集合上去;更新xt_table_info的entries值,使其指向新规则集合的开头,并释放原有规则集合所占空间即可。
同理,也可以在mangle表中找到指定的规则,并删除,如图5所示。RTP流量标记模块根据RTP流识别信息及RTP流标记值,删除一条规则;先在原规则集合中找到指定的规则;为新规则集合分配内存,拷贝除所删除规则外的原有规则集合到指定位置上去;更新xt_table_info的entries值,使其指向新规则集合,并释放原有规则集合所占空间即可。
本发明的具体实施涉及到:RTP记录链表(图6)、添加RTP标记规则(图7)和删除RTP标记规则(图8)。
图6描述了RTP记录链表。由于SIP ALG检测到SIP BYE消息后,能够得到的关于已失效的RTP信息仅CALL-ID而已,而Netfilter架构中无信息涉及CALL-ID。因此需要维护一个链表来记录RTP流信息。在本发明中,通过图6的RTP记录链表(采用双向链表提高查询修改的效率)维护有效的RTP流记录。其成员主要有两部分组成:RTP会话对应的CALL-ID、RTP流识别信息及RTP流标记值。RTP流识别信息及标记值是用来描述对应标记规则(含,源IP地址及端口,目地IP地址及端口,协议号,及对应的标记值)。
当RTP流量标记模块成功添加一条标记规则后,就会将该RTP流的识别信息及标记值,连同CALL-ID一起作为一个新的记录加入RTP记录链表中去。当SIP ALG调用RTP流量标记模块删除记录的时候,首先根据CALL-ID检索该RTP记录链表,检索出匹配CALL-ID的记录,从而获得该记录的RTP流识别信息及标记值。通过RTP流识别信息及标记值提供的信息来删除Netfilter中的对应规则。
考虑到Linux网络设备的资源利用率及性能,可以根据网络设备的实际运用预先设定链表长度的最大值(即Linux网络设备能标记的最多RTP会话流)。每次记录的加入均从链表尾部加入,这样在链表头部的记录是最老的。如果加入记录时链表已满,可以认为最老的记录已失效,将链表首部的记录删除,并根据其信息在Netfilter中删除对应的标记规则。再将新记录加入链表尾部。
当采用该发明的Linux网络设备SIP ALG(或其它用来检测RTP流量的模块)模块检测到SIP INVITE消息,根据从中提取的RTP识别信息,调用该发明提供的RTP流量标记模块提供的添加/删除规则接口,就可以立即对网络设备所转发的该会话RTP流进行标记,供其它QoS功能模块根据RTP流的标记值采用对应的服务质量保证策略。
图7描述了添加RTP标记规则的流程,为方便描述,假设此时SIP ALG检测到新的RTP流识别信息如下:源IP为192.168.1.111,源端口为:36188,目地IP为61.183.207.100,目地端口为5067,协议号为17(即UDP协议);检测到RTP流会话CALL-ID为59100595fiberhome.com.cn;同时希望将RTP流量标记值设为0x12345。:
第一步:查找Netfilter中是否存在满足该RTP流识别信息及标记值的规则。如果存在则结束,否则继续下一步。
第二步:根据RTP流识别信息及标记值生成对应的规则(其中的ipt_entry含有Layer3的信息,即源IP为192.168.1.111,目地IP为61.183.207.100,协议号为17;ipt_entry_match含有Layer4信息,即源端口为36188,目地端口为5067;ipt_entry_target含有标记的值,即0x12345)。
第三步:获取mangle表并锁定成功。
第四步:获得mangle表原有xt_table_info信息,并根据新的规则分配新的xt_table_info信息,更新相关字段。
第五步:将原xt_table_info中entries字段所指向的旧规则集合及新增规则拷贝到新的xt_table_info的entries字段中去,并更新相关字段。
第五步:用新的xt_table_info字段更新mangle表,并释放原来的xt_table_info信息。
第六步:mangle表解锁。
第七步:将RTP流识别信息及标记值,与对应CALL-ID(即59100595fiberhome.com.cn)组成的记录加入到RTP记录链表中去。处理完毕!
同理,当SIP ALG检测到BYE消息,从中提取出结束会话的CALL-ID,调用本发明的删除标记规则接口,就可以将失效的RTP流标记规则删除。图8描述了删除RTP标记规则的流程(假设已存在前文加入的标记规则。此时CALL-ID为59100595fiberhome.com.cn):
第一步:锁定RTP记录链表
第二步:迭代RTP记录链表中的节点,获取匹配CALL-ID的节点,即可获得RTP流的识别信息(源IP为192.168.1.111,源端口为:36188,目地IP为61.183.207.100,目地端口为5067,协议号为17)与标记值(0x12345)。该RTP流识别信息与标记值组成的规则即为所删除规则。
第三步:删除该节点。
第四步:获取mangle表并锁定成功
第五步:获得mangle表原有xt_table_info信息,根据所删除的规则分配新的xt_table_info信息,并更新相关字段。
第六步:将原xt_table_info中entries字段所指向的旧规则集合(除去被删除规则)拷贝到新的xt_table_info的entries字段中去,并更新相关字段。
第七步:用新的xt_table_info字段更新mangle表,并释放原xt_table_info信息。
第八步:mangle表解锁。
第九步:重复第二步到第八步,直到检索不到匹配该CALL-ID的节点时,RTP记录链表解锁。处理完毕!
以上所述仅为本发明的较佳实施例,并不用于限制本发明,凡在本发明精神和原则之内所做的任何修改、等同替换和改进等,均含于本发明的保护范围之内。

Claims (6)

1.一种Linux网络设备动态标记RTP流量的方法,其特征在于:
会话初始协议应用层网关SIP ALG检测到新的实时传输协议RTP流或失效的RTP流后,调用RTP流量标记模块提供的添加/删除规则接口,根据检测到的具体情况执行以下操作;
当SIP ALG检测到新的RTP流时,调用RTP流量标记模块提供的添加规则接口,RTP流量标记模块在Netfilter中增加与新的RTP流对应的规则,对通过网络设备转发的流量进行标记;
当SIP ALG检测到失效的RTP流时,调用RTP流量标记模块提供的删除规则接口,RTP流量标记模块删除Netfilter中与失效的RTP流对应的规则,防止RTP流量被错误标记;
所述RTP流量标记模块还负责维护RTP流识别信息、标记值及对应的CALL-ID记录;
当RTP流量标记模块收到SIP ALG的调用请求时,首先判断需要执行的操作,具体包括如下步骤:
A、如果添加规则接口被调用,则执行步骤B;如果删除规则接口被调用,则执行步骤C;
B、SIP ALG传入的参数有:RTP流识别信息、RTP流的标记值及RTP流会话的CALL-ID,所述RTP流识别信息包括源IP地址,目的IP地址,源端口号,目的端口号,协议号;RTP流量标记模块检索Netfilter中mangle表NF_IP_FORWARD链中是否存在满足该RTP流识别信息及RTP流的标记值的规则,如存在,添加规则接口直接返回,如不存在,转到步骤B1;
B1、RTP流量标记模块根据该RTP流识别信息及RTP流的标记值生成一条新的规则,并将该规则加入Netfilter中mangle表NF_IP_FORWARD链中,转到步骤B2;
B2、RTP流量标记模块将该RTP流识别信息、RTP流的标记值及RTP流会话的CALL-ID组成的结构体,插入到RTP流量标记模块维护的RTP记录链表中去,添加规则流程处理完成;
C、SIP ALG传入的参数有:RTP流会话的CALL-ID,RTP流量标记模块检索RTP流量标记模块维护的RTP记录链表,找到含有相同CALL-ID的记录,从记录中提取对应的RTP流识别信息及RTP流标记值,并从链表中删除该记录,转到步骤C1;
C1、RTP流量标记模块将Netfilter中mangle表NF_IP_FORWARD链中满足该RTP流识别信息及RTP流标记值的规则删除,删除规则流程处理完成。
2.如权利要求1所述的Linux网络设备动态标记RTP流量的方法,其特征在于:当RTP流量标记模块收到SIP ALG的调用请求,且遇到无法判断添加规则接口、删除规则接口哪一个被调用时,则直接向调用模块返回,不进行任何处理操作。
3.如权利要求1所述的Linux网络设备动态标记RTP流量的方法,其特征在于:RTP流量标记模块维护的RTP记录链表长度有限,每次从链表尾部加入新的记录,如果链表过长,则在加入新记录前,从表头移除最老的记录,并在Netfilter中删除对应的标记规则,所述RTP记录链表长度的具体限定根据该网络设备处理SIP会话的规模来设定。
4.如权利要求1所述的Linux网络设备动态标记RTP流量的方法,其特征在于:为了防止Iptables配置的规则与其冲突,RTP流量标记模块作为Linux网络设备中唯一标记RTP流量的手段。
5.如权利要求1所述的Linux网络设备动态标记RTP流量的方法,其特征在于:Netfilter中mangle表存放在结构体xt_table中,相关的具体链及规则信息存放在结构体xt_table_info中,xt_table_info中的entries字段指向所有规则集合的开头;
RTP流量标记模块根据RTP流识别信息及RTP流的标记值,构建一条新规则时,先为新规则集合分配内存,拷贝原有规则集合、新增加规则到新规则集合上去;更新xt_table_info的entries值,使其指向新规则集合的开头,并释放原有规则集合所占空间;
RTP流量标记模块根据RTP流识别信息及RTP流标记值,删除一条规则时,先在原规则集合中找到指定的规则;为新规则集合分配内存,拷贝除所删除规则外的原有规则集合到指定位置上去;更新xt_table_info的entries值,使其指向新规则集合,并释放原有规则集合所占空间。
6.如权利要求1所述的Linux网络设备动态标记RTP流量的方法,其特征在于:所述RTP记录链表为双向链表,其成员包括RTP会话对应的CALL-ID、RTP流的识别信息及标记值,
RTP流识别信息及标记值用来描述对应标记规则,包含:源IP地址及端口、目的IP地址及端口、协议号及对应的标记值。
CN2010101515736A 2010-04-21 2010-04-21 一种Linux网络设备动态标记RTP流量的方法 Expired - Fee Related CN101827029B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010101515736A CN101827029B (zh) 2010-04-21 2010-04-21 一种Linux网络设备动态标记RTP流量的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101515736A CN101827029B (zh) 2010-04-21 2010-04-21 一种Linux网络设备动态标记RTP流量的方法

Publications (2)

Publication Number Publication Date
CN101827029A CN101827029A (zh) 2010-09-08
CN101827029B true CN101827029B (zh) 2013-01-02

Family

ID=42690745

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101515736A Expired - Fee Related CN101827029B (zh) 2010-04-21 2010-04-21 一种Linux网络设备动态标记RTP流量的方法

Country Status (1)

Country Link
CN (1) CN101827029B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103491016B (zh) * 2012-06-08 2017-11-17 百度在线网络技术(北京)有限公司 Udp负载均衡系统中源地址传递方法、系统及装置
CN104539555B (zh) * 2014-11-28 2018-10-09 深圳市共进电子股份有限公司 一种上行业务数据的处理方法及装置
CN105407481A (zh) * 2015-10-23 2016-03-16 上海斐讯数据通信技术有限公司 上网数据的获取方法
WO2018000355A1 (zh) * 2016-06-30 2018-01-04 周肇梅 一种在系统内转发数据流的方法及系统
CN108462590B (zh) * 2017-02-20 2021-09-28 阿里巴巴集团控股有限公司 网络流量的监控方法及装置、计算机终端
CN107193657A (zh) * 2017-05-18 2017-09-22 安徽磐众信息科技有限公司 基于solaflare网卡的低延迟服务器
CN109962885A (zh) * 2017-12-22 2019-07-02 北京安天网络安全技术有限公司 物联网设备的网络安全防护方法及物联网设备
CN109547580B (zh) * 2019-01-22 2021-05-25 网宿科技股份有限公司 一种处理数据报文的方法和装置
CN114598625B (zh) * 2022-03-30 2024-06-14 派欧云计算(上海)有限公司 一种在不稳定多线路场景下自适应调节线路的方法、存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1604589A (zh) * 2004-10-28 2005-04-06 无锡三通科技有限公司 支持会话启动协议穿越的防火墙实现方法
CN101340574A (zh) * 2008-08-04 2009-01-07 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及系统
CN101695160A (zh) * 2009-10-20 2010-04-14 清华大学 基于策略路由的流定向传输方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1604589A (zh) * 2004-10-28 2005-04-06 无锡三通科技有限公司 支持会话启动协议穿越的防火墙实现方法
CN101340574A (zh) * 2008-08-04 2009-01-07 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及系统
CN101695160A (zh) * 2009-10-20 2010-04-14 清华大学 基于策略路由的流定向传输方法

Also Published As

Publication number Publication date
CN101827029A (zh) 2010-09-08

Similar Documents

Publication Publication Date Title
CN101827029B (zh) 一种Linux网络设备动态标记RTP流量的方法
CN101589589B (zh) 提供分组流管理的可扩展性
CN101047714B (zh) 一种处理网络数据的方法及系统
CN105554065B (zh) 处理报文的方法、转换单元和应用单元
CN104348716B (zh) 一种报文处理方法及设备
CN1929472B (zh) 数据网络中管理数据传输的方法及系统
CN102148773B (zh) 一种IPv6协议和IPv4协议转换的方法及系统
CN106161335A (zh) 一种网络数据包的处理方法和装置
CN101087296B (zh) 利用网络处理器实现IPv4/IPv6网络协议转换的方法
CN101426000A (zh) 一种通用协议解析方法及系统
CN103139315A (zh) 一种适用于家庭网关的应用层协议解析方法
CN104639507B (zh) 一种异构网络间的承载协议报文数据传输方法及系统
CN100454901C (zh) 一种arp报文处理方法
CN101179477B (zh) 一种实现嵌入式路由器的方法
CN102158406B (zh) 面向计算机网络链路的智能选路方法
CN105847179A (zh) 一种dpi系统中数据并发上报的方法及装置
CN113630301B (zh) 基于智能决策的数据传输方法、装置、设备及存储介质
CN107733765B (zh) 映射方法、系统和相关设备
CN105933235B (zh) 数据通信方法及装置
CN100586104C (zh) 基于路由的会话初始化协议透明穿越网络地址转换的方法
CN105515995A (zh) 报文处理方法、流表生成方法及装置
CN103166855A (zh) 识别和转换网络报文中的地址信息的方法和系统
CN100479457C (zh) 一种实现虚拟私有网络中数据传输的方法
CN107528794A (zh) 一种数据处理方法和装置
CN103200253A (zh) 一种面向水利物联网的多重异构网络通信协议构建方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130102