邢毅伟,曹祁生,阳琳峰
(1.武汉邮电科学研究院通信与信息系统系,湖北武汉430074;2.烽火通信股份有限公司,湖北武汉430073)
家庭网关是接入互联网的主要终端之一,也是目前各大互联网运营商主推的互联网接入设备.随着网络发展的日新月异以及众多新业务的出现,互联网承载了更多的业务,对这些业务的服务质量的保障,给家庭网关的性能提出了更高的要求[1].提高家庭网关对数据的处理能力,同时有效地节约嵌入式系统资源,开展数据加速方面的研究工作尤为重要.结合DPI(深度包检测)技术,可以较为精确地识别出业务类型,以此为依据对包进行标记,对高优先级包进行优先快速转发,确保重要业务的优先保障.
DPI(深度包检测),是一种先进的包过滤方法,它在开放系统互连(OSI)参考模型的应用层中起作用.使用深度包检测可以发现、识别、分类、重新路由或阻止具有特殊数据或代码有效载荷的数据包,而传统的包过滤只能检测数据包包头,不能发现这些数据包.因此,使用DPI技术可以较为准确地识别出用户所使用的业务,进而针对业务进行后续处理.
其实现原理为利用Linux下的Netfilter框架,实现对内核数据报文的获取[2],其基本框架如下图1所示.DPI模块在NF_IP_PRE_ROUTING处设置钩子函数,将数据包提取出来进行分析.对于不同的业务具有不同的关键字信息,以此为依据进行业务识别.识别出某个业务的连接信息后则设置其skb的mark值为当前业务所代表的值,后续转发依据skb的mark值来进行该条流的调度转发策略设置,从而后续报文则会使用新设置的调度转发策略来进行处理.
图1 Linux下Netfilter框架图
通常在互联网上使用的业务分为很多种,不同类型的业务有着不同的QoS需求[3].要使在多种业务并存的情况下使用户得到更好的体验,需要使用流量控制和业务调度的功能.其基本思想是,在数据包被发送后,并不是直接把数据包交给硬件进行发送,而是会根据配置和需要把数据进行分类,然后把数据放入相应的QoS队列内[4].对这些队列划分优先级极高、高、一般、低等几个等级,对于优先级高的队列进行优先保障,剩余的带宽再进行尽力而为的发送.据此,结合DPI的业务识别功能设计出一种基于业务类型的QoS调度方法.
此外,传统的家庭网关设备对数据报文的转发通过网络协议栈进行转发,传统的协议栈转发存在转发效率低下、丢包严重的缺陷.然而,对于五元组相同的数据报文来说,网关对首个报文与后续报文的处理行为完全一致,没有必要让所有报文都完整经过协议栈转发,现有的技术中出现了软件或硬件加速转发方式[5].但是,现有技术没有很好的方法来管理和控制软件加速转发和硬件转发,家庭网关对报文的业务类型也不加以区分,任何业务类型的数据报文被同等对待转发.因此,现有技术在数据转发方面存在转发行为盲目、没有针对性、转发效率低、转发资源分配不合理以及浪费转发资源等问题.针对如上问题,提出一种基于业务类型的数据报文多级加速转发模块,并将其与QoS模块结合,作为其扩展功能,称作QoS快转模块.目前多级加速分为4个级别:A)不加速;B)软件加速;C)硬件加速;D)混合加速.
所述的QoS快转模块,用于实现已进行业务分类报文的各种优先级设置以及各种级别的转发.其中,不同业务类型的报文的转发控制由用户按照需求配置.进入到QoS快转模块中的报文,按照转发控制进行队列优先级设置以及各种级别加速,其中加速的报文需要匹配各自的加速转发表项.只有匹配成功的报文才可以成功进行加速转发,匹配失败的报文被送往协议栈进行转发.对于软加速,适用于那些含有特殊的信令报文,必须经过协议栈处理,但是又不需要完整走协议栈那么效率低下的业务,例如网络语音电话等.硬件加速,适用于大业务流量的P2P视频流业务.而混合加速则为一种折中处理方法,依据业务流量的速率大小自动选择加速方法.对于一般的业务,默认不加速即协议栈转发.
本模块功能突出的优点在于:实现了多种数据加速转发,并且对优先级队列的调度和报文的加速转发是基于业务类型的,用户可以根据自己的需求来设置适合自身需求的QoS配置方案以及转发方式,提高家庭网关的转发速率和效率,也提高了家庭网关的服务质量.
3.1 DPI模块的实现 通过设置钩子函数将报文的信息提取出来,报文的数据以Linux内核中重要的结构体sk_buff作为基础,进行数据对比解析[6].其中用到以下的几个重要的数据指针:
skb->mac_header 指向数据包的Ethernet头;
skb->pkt_type 指向数据包的类型;
skb->len 指向数据包的长度;
skb->data 指向数据包内容的开头.
利用skb->mac_header可以通过加偏移量取出数据包的源mac、目的mac、源IP、目的IP、源端口、目的端口、传输协议等信息[7].通过skb->pkt_type可以划分数据包的类型,对于广播包或者组播报文可以进行相应的处理.通过skb->len判断数据包的长度,可以有效地筛选某些特征报文.最重要的是skb->data,通过加上偏移量就可得到数据包正文开始的位置,也是判断业务的最关键地方.
目前常见的上述业务有web邮箱的附件上传业务,还有各种网络硬盘上传业务等.对于这些业务普遍使用TCP协议80端口进行通信.传统的协议类型区分业务方法不能细分这些业务.然而使用DPI技术,则可以将TCP连接发起和回包中的具体内容加以区分[8].以某web邮箱上传附件为例,在其建立连接时必然会出现关键字“mail.xxx.cn”.以此为根据通过skb->data指针进行查找,对于含有这样字段的报文进行mark打标操作,即可实现该业务的识别,后续加以保障.
3.2 连接跟踪条目的mark值规划 在连接跟踪条目的数据结构中有一个mark(conntrack->mark),可以作为私有功能的使用.因此,可以利用这个mark值来实现本系统的功能.规划如表1所示.
表1 conntrack->mark值规划
其中低4位用于设置快速转发的类型,设置为0001为开启软加速,设置为1001为开启硬加速.第5到8位暂且保留,用来作为后续新功能的开发使用.第9到12位则规划为业务的调度入队列优先级而使用.
3.3 业务流的mark值与QoS调度 在数据包进行路由转发时,业务流的数据结构中也存在一个mark值(skb->mark).同样可以利用这个mark值来实现QoS队列调度的功能.由于交换芯片硬件提供了0到7共8个队列可供调度使用,其中队列0的优先级最低队列7的优先级最高,8个队列的操作需要3位二进制数来控制.因此设置交换芯片的硬件规则,根据业务流的mark值最低的四位值的判断进行调度操作.其中第四位来确定是否进行调度,后三位来决定调度入队列的值.如设置某条流的mark值为0x9即1001,则这条流将会被放入队列1中进行调度.
3.4 连接跟踪条目mark值进行调度的实现 在QoS快转的内核模块中,将提取连接跟踪条目的mark值,将其设置业务流的队列优先级的9到12位写入业务流的mark位低四位,便实现了设置连接跟踪条目的mark值,同时也设置了业务流的mark值.也即设置了连接跟踪条目的mark值,便可以进行业务优先级的调度,以及加速的策略的设置.
3.5 系统工作流程 当一条业务流经过家庭网关,它的首个数据报文在协议栈处理过程中被DPI模块设置的钩子函数提取,进入解析.相同五元组的首个TCP或UDP报文,必须由CPU进行协议栈转发.对于首个报文,送往协议栈前经过DPI识别的程序.解析出业务类型,将报文所属的五元组打上特定的标签,确认业务的类型后则把报文送往QoS快转模块进行处理.首先进行QoS优先级的队列配置,然后多级加速转发模块根据用户预先配置的各种业务转发策略,决定该报文进行哪种类型的转发,将该条连接信息加入到加速转发表项中.后续的报文在进linux协议栈之前便会根据数据包的五元组信息与加速转发表进行匹配,如果匹配成功.则进行相应加速并进行调度策略处理,即根据连接跟踪条目的mark值设置业务流的mark值.随后,数据流进入交换芯片,根据所设置的队列优先级进行转发.具体流程如图2所示.
图2 系统工作流程图
采用某web邮箱附件上传业务与某云盘的上传业务做比较进行测试.其中某web邮箱业务进行DPI识别,并将其调度策略设置为队列7(最高优先级),硬件加速转发,即连接跟踪条目的mark值设置成0xF0B,而某云盘则采用策略默认为队列0(最低优先级).
实验环境:现网PPPOE环境,通过网关拨号获取地址.
实验步骤为:
1)在olt上对家庭网关的上行速率限制到1Mbps.
2)家庭网关上建立一条PPPOE拨号的wan连接,使其下接的PC可以上网.
3)单独使用web邮箱和云盘上传相同大小的文件,记录时间.
4)不开启DPI_QOS功能,同时使用web邮箱和云盘上传相同大小的文件,记录时间.
5)开启DPI_QOS功能后,再次同时使用web邮箱和云盘上传相同大小的文件,记录时间.
实验结果如表2所示.
表2 测试结果
由实验结果可以看出,在开启的DPI_QOS以后,web邮箱附件上传的时间远远小于云盘上传的时间,几乎等于单独上传web邮箱附件的时间,而云盘则是在前者上传完毕后才开始占领全部的带宽.这样便实现了高优先级的业务进行绝对的优先保障.
随着互联网的繁荣,许多新兴的业务和应用对于端口号或者IP地址的选择并不是固定的,相同的端口号和传输协议被许多业务共同使用,因此传统的识别方法并不能识别这些业务.而利用DPI技术可以精确地识别出业务的类型并加以调度,外加设置成不同加速转发的策略,完全扩展了传统QoS的功能,为客户的业务提供更加贴心的基于业务的QoS保障.经过验证,通过DPI的业务识别进行业务的QoS保障实际效果明显.后续会将更多的常见应用进行特征匹配,以提供更多业务的QoS保障服务.
[1]肖恒杰.家庭网关中分层服务质量管理功能的设计与实现[D].武汉:华中科技大学,2010.
[2]蒋华,王汝传,李致远.基于Netfilter的流量检测与控制系统[J].计算机技术与发展,2012(1):90-93.
[3]刘星.MoIP网关中服务质量的研究与实现[D].武汉:华中科技大学,2008.
[4]肖赵斌.QoS框架中队列调度功能的设计和实现[D].西安:西安电子科技大学,2012.
[5]熊轲.支持QoS的可扩展可靠路由算法及转发技术研究[D].北京:北京交通大学,2010.
[6]鲍娟.基于嵌入式Linux的网络流量监测系统[D].武汉:武汉科技大学,2009.
[7]王伟.深度检测技术探讨及其在校园网中的应用[D].长春:长春理工大学,2009.
[8]郭恩阳.DPI在移动分组域中的应用与展望[J].移动通信,2012,18:85-89.