基于linux内核的高性能流控方法技术

技术编号:7850335 阅读:255 留言:0更新日期:2012-10-13 07:25
本发明专利技术涉及一种基于linux内核的高性能流控方法。本发明专利技术首先在Linux内核中的sk_buff中有mark字段,同时加入index字段,Mark字段用来进行带宽对象的流控,index是无符号整数,把其分成两部分,高16位用来进行服务流控,低16位用来进行单ip流控;再建立数据包列队;然后数据包再通过流控方法进行控制是否出队:数据包按照服务流控方法进行控制,如果数据包可以出队,则依次进行带宽对象流控方法、单IP流控方法进行控制,如果数据包再上述的三个流控方法任意一个不能出队,则重新排队;最后出队的数据包经过发包调度方法选择后进行发包。本发明专利技术的单ip流量控制的性能比目前linux中模块性能好,不会造成队列出队时间上的浪费,有助于提高性能。

【技术实现步骤摘要】

本专利技术涉及网关产品对流量的整形和控制,具体涉及一种基于Iinux内核的高性能流控方法。
技术介绍
Linux固有的流控策略,分为有队列和无队列两种,能够满足部分用户对流控的简单需求,但是在很多情景下还有很多不足。Linux固有技术缺陷 I、在这些技术中,要么用户控制某些网段,要么控制某些主机流量,无法同时即控制某 些网段不能超过一定流量,同时服务和每个主机也不能超过一定的流量。2,Htb算法是目前Iinux中用的最多的流控算法,能够很好的解决一些问题,但是当用户需要控制网段内每台主机的流量都不能超过一定流量时,且主机数目较多,这对htb算法来说是很消耗性能的,无法做到真正的实用性。
技术实现思路
本专利技术所解决的技术问题是提供一种通过彻底更改Iinux内核流控方式,实现了基于I inux内核对网络进行流量控制的高性能流控方法。为解决上述的技术问题,本专利技术采取的技术方案 一种基于Iinux内核的高性能流控方法,其特殊之处在于所述流控方法为首先在Linux内核中的sk_buff中有mark字段,同时加入index字段,Mark字段用来进行带宽对象的流控,index是无符本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于Iinux内核的高性能流控方法,其特征在于所述流控方法为首先在Linux内核中的sk_buff中有mark字段,同时加入index字段,Mark字段用来进行带宽对象的流控,index是无符号整数,把其分成两部分,高16位用来进行服务流控,低16位用来进行单ip流控;再建立数据包列队;然后数据包再通过流控方法进行控制是否出队数据包按照服务流控方法进行控制,如果数据包可以出队,则依次进行带宽对象流控方法、单IP流控方法进行控制,如果数据包再上述的三个流控方法任意一个不能出队,则重新排队;最后出队的数据包经过发包调度方法选择后进行发包。2.根据权利要求I所述的基于Iinux内核的高性能流控方法,其特征在于所述的服务流控方法为首先建立一个65536长度的整数数组D,其下标代表目的端口 ;其次,建立一个300个数据包队列数组E,D数组每个元素的值为E数组的下标,如当设置了对http进行流控,则先检查D [80]的值是否已经设置,如设置即已流控,如未设置,先取得E中没有使用的一个队列,把其下标赋值给D [80],当有http数据包到来时,会根据目的端口 80,得到D[80]的值D1,再根据E[D1]取得队列,进行入队操作。3.根据权利要求I或2所述的基于Iinux内核的高性能流控方法,其特征在于所述的带宽对象流控方法为建立一个队列数组,根据sk_buff中的mark值来选择队列,mark值由用户态程序统一控制,由iptables的mark target进行设置,当带有mark值不为0的数据包到来时,此包目的端口不进行服务流控,根据mark值选择队列,进行排队流控。4.根据权利要求3所述的基于Iinux内核的高性能流控方法,其特征在于所述的单IP流控方法的步骤如下 (1)、建立数据包队列建立了一个含300元素的无符号整形数组,每个无符号整形数组是32位,每一位对应9600队列中的一个,其中第0个队列为不进行流控的队列,该位为1,表示该位对应的队列被使用,通过该无符号整形数组的计算实现快速选择队列; (2)、数据包列队的Ip地址共32位,现把其看成两部分,前16位和后16位,前16位通过一个大小为65535的指针数组A来表示,数组下标即表示具体ip的前16位值,后16位也是通过一个65535的数组来表示,但是其是动态分配的,后16位的数组中,数组中每个结构中包含flag和index字段,flag表示该ip是否要流控,index是一个索引值,为无符号整数,当一个ip数据包进入时,先取得该ip的前16位,以该值作为前16位数组的下标,如果数组内容为空,则表示没有建立过该前16位对应的后16位的数组,需要创建,index初始值为-1,flag初始值为0 ;如果数组内容不空,则可以根据该指针内容来访问对应的后16位数组,再根据对应值的flag和index进行流控,同时把index值赋给sk_buff中的index字段。5.根据权利要求4所述的基于Iinux内...

【专利技术属性】
技术研发人员:陈宏伟何建锋赵明彰刘亚轩
申请(专利权)人:西安交大捷普网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1