发明内容
本发明实施例提供一种流量调度的方法和装置,可以较好地保证正常数据顺利发送到服务器端。
一方面,本发明实施例提供了一种流量调度的方法,包括:
获取数据包的分值,并根据所述分值将不同的数据包分为不同等级,具 有相同等级的数据包组成一个队列;
判断是否丢弃数据包,若确定丢弃数据包,丢弃所述数据包所在队列的至少一个数据包。
所述获取数据包的分值包括:获取所述数据包的参数;根据所述数据包参数中预置的有效标记判断所述数据包参数是否有效;若无效,将所述数据包的分值设为默认值;若有效,根据预配置的权重因子和获取的所述参数计算所述数据包的分值。
另一方面,本发明实施例提供了一种流量调度的装置,包括:
分值获取模块,用于获取数据包的分值;
包划分模块,用于根据所述分值获取模块获取的分值,将不同的数据包分为不同等级,具有相同等级的数据包组成一个队列;
丢包判断模块,用于判断是否丢弃数据包,若确定丢弃数据包,发送丢弃通知,通知丢弃所述数据包所在队列的至少一个数据包;
丢弃模块,用于当接收到丢弃通知,丢弃所述数据包所在队列的至少一个数据包。
所述分值获取模块包括:参数获取子模块,用于获取所述数据包的参数;参数判断子模块,用于根据数据包参数中预置的有效标记判断所述数据包的参数是否有效;设置子模块,用于当所述参数判断子模块判断数据包的参数无效时,将所述数据包的分值设为默认值;计算子模块,用于当所述参数判断子模块判断数据包的参数有效时,根据所述参数获取子模块获取的参数计算数据包的分值。
与现有技术相比,本发明实施例具有以下优点:
通过计算数据包的分值,并根据该分值将不同的数据包分为不同等级,具有相同等级的数据包组成一个队列,然后判断是否丢弃所述数据包,若确定丢弃数据包,丢弃所述数据包所在队列的至少一个数据包。以此达到有效的控制了数据的流量,而且将数据包划分等级有助于正确的数据包顺利通过。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种流量调度的方法和装置,可以较好地保证正常数据顺利发送到服务器端。
下面结合附图和具体实施例对本发明实施例提供的流量调度的方法和装置进行详细说明。
本发明实施例提供了一种流量调度的方法,如图1所示,包括:
步骤S101、获取数据包的分值,并根据所述分值将不同的数据包分为不同等级,具有相同等级的数据包组成一个队列。
接收到数据包后,获取该数据包的参数,根据该参数中预置的有效标记判断获取的参数是否有效,本发明实施例,通过预先在信誉列表中扩展出所述有效标记的参数,利用此参数标识其余参数的有效性,若参数有效,根据预定的公式{FUNC(verd,proto,destport,dip,syn_ratio,...)=(w1*verd+w2*proto+w3*destport+w4*dip+w5*syn+.....)}计算数据包的分值,也可以按照具体情况设置其它参数或权重进行计算;若参数无效,则将该数据包的参数设置为预定分值。由于正常数据包的参数具有相同或相似的特征,因此同种类型的正常数据包的分值处在同一分值区间。由此可以根据该分值确定数据包的等级,相同等级的数据包为一个队列,这样同一个队列中都为正常数据的数据包的概率就很大。可以预先根据经验值设置正常数据包的分值区间,如可以设置A类型的正常数据包的分值为0~30分,而且分值为0~30分为第一等级;同样可以设置分值为30~60分为第二等级,当数据包的分值为25分时,可以判定该数据包属于第一等级,而且有可能为A类型的正常数据包,然后将第一等级的数据包归为一个队列。
步骤S102、判断是否丢弃数据包,若确定丢弃数据包,丢弃所述数据包所在队列的至少一个数据包。
确定当前数据包的等级后,判断是否需要丢弃数据包,若需要丢弃数据包,丢弃当前数据包所在队列的至少一个数据包,该数据包可以位于该队列的队首或队尾,而丢弃仅丢弃队尾的数据包,有可能使大量正常数据包被丢弃。因此,与现有技术不同的是,本实施例在确定需要丢弃数据包时,采取丢弃队首的数据包,丢弃队首的数据包可以使队列不断增加新的数据包,;若判断不需要丢弃数据包,继续检测下一个接收的数据包。例如,可以根据当前数据包所在队列的丢包概率判断是否丢弃数据包,若丢包概率为1,则丢弃当前数据包所在队列的队首数据包;若当前数据包的丢包概率为0时,则继续检测下一个接收的数据包。
在判断是否丢弃数据包之前,还可以判断上述数据包所在队列的长度是否大于预设的门限值,若不大于该门限值,则可将该队列直接发送到服务器端。
通过上述步骤,根据数据包的分值将数据包划分为不同的等级,相同等级的数据包为一队列,由于数据包的分值是根据数据包的特性获得的,那么相同等级的数据包就具有较多的相同或相似特性,即很可能正常数据包在同一队列中,而利用现有技术计算数据包的丢包概率时,正常数据包所在队列的丢包概率一般为0,所以此队列的大部分数据包可以顺利通过,并发送到服务器。
下面通过具体实施例对本发明实施例提供的一种流量调度的方法进行详细说明,如图2所示,包括:
步骤S201、接收数据包;
步骤S202、获取当前数据包预置的信誉列表,判断该数据包的参数是否有效;当判断参数有效时,执行步骤S203;若判断参数无效时,将数据包的分值设置为默认值,执行步骤S204。
具体的,可以根据数据结构预先定义一个信誉列表,该信誉列表的数据结构如图3所示,包括IP源地址、目的端口、信誉值、访问时间和有效标记。其中,通过预先在信誉列表中扩展出所述有效标记的参数,利用此参数标识 其余参数的有效性,其中IP源地址表示数据包发出的地址;目的端口表示该源IP地址在一定时间内访问次数最多的目的端口;访问时间表示该源IP地址最近一次访问的时间;信誉值表示该源IP地址所得的信誉分数;有效标记表示上述纪录是否有效。
步骤S203、根据当前数据包的参数,计算该数据包的分值;该分值的计算方法可以为:
FUNC(verd,proto,destport,dip,syn_ratio,...)
=(w1*verd+w2*proto+w3*destport+w4*dip+w5*syn+.....),
其中w1,w2等为相对权重因子,可以从预配置的系统文件中读取;verd信誉值、proto协议分值、destport端口值、dip目的IP值、syn_ratiosyn包比重值等为数据包的参数。上述参数的取值可以通过读取预置的系统文件获得。
根据接收的数据包可以得到访问地址信息,并且能够推算当前网络压力的因素如吞吐量、目的服务器承受压力、访问的服务,这些都可以为数据包的参数,另外还可以根据一些攻击特征,如检测设备传过来的IP信誉列表,连接成功率等计算出权重和分数,然后根据该分数进行丢包概率的计算。
步骤S204、按照分值对接收的数据包进行包等级划分;根据上述公式计算当前数据包的分数后,可以根据分数对该数据包划分等级,将相同等级的数据包进行解析后放入一个队列;
步骤S205、将每个等级队列的长度与预定的队列长度比较,若小于预定长度,直接将该队列的数据包发送到向被保护的服务器;若不小于预定长度,执行步骤S206;
其中,所述的步骤S205为优选步骤,使得数据量较小的队列直接发送到服务器,加快数据传送速度,可以理解,方法执行中也可以不执行步骤S205而直接执行步骤S206;
步骤S206、计算该数据包所在队列的丢包概率,此处概率只有1和0两种结果;可以利用现有的计算方法计算丢包概率,如!(((avg_rate-min_queue_len)>>Wlog)*packet_count<random_num),其中avg_rate=(1-2^(-Wlog))*avg_rate+2^(-Wlog)*cur_queue_len,avg_rate表示平均速度, min_queue_len表示设置的队列最小长度,cur_queue_len表示当前的队列长度,Wlog是一个预先设置的权值,具体数据更加需要灵活设定,本实施例设置为2,packet_count是当前经过的包数,random_num是一个随机数,介于0到mask(预先设置的一个最大值,是一个32位的数)值之间;若为丢包概率为1,丢弃该数据包所在队列的队首的数据包,若丢包概率为0,按照现有的正常流程,将数据发送到服务器。当然,在丢包概率为1时,也可以丢弃该数据包所在队列的队尾数据包。而丢弃仅丢弃队尾的数据包,有可能使大量正常数据包被丢弃。因此,与现有技术不同的是,本实施例在确定需要丢弃数据包时,采取丢弃队首的数据包,丢弃队首的数据包可以使队列不断增加新的数据包,。
由于正常数据包的参数具有相同或相似的特征,因此同种类型的正常数据包的分值处在同一分值区间。由此可以根据该分值确定数据包的等级,相同等级的数据包为一个队列,这样同一个队列中都为正常数据的数据包的概率就很大,而且由正常数据包的参数可知正常数据包的丢包概率一般为0,这样通过计算不同队列的丢包率可以较好的保证正常数据包发送到服务器端。
为实现本发明实施例提供的上述方法,本发明另一实施例还提供了一种流量调度的装置,如图4所示,包括:
分值获取模块401,用于获取数据包的分值;
包划分模块402,用于根据所述分值获取模块401获取的分值,将不同的数据包分为不同等级,具有相同等级的数据包组成一个队列;
丢包判断模块403,用于判断是否丢弃数据包,若确定丢弃数据包,发送丢弃通知,通知丢弃所述数据包所在队列的至少一个数据包;
丢弃模块404,用于当接收到丢弃通知,丢弃所述数据包所在队列的至少一个数据包。
上述丢包判断模块403包括:
判断子模块4031,用于计算所述数据包的丢包率,当根据所得到的丢包率判断得到丢弃所述数据包所在队列的至少一个数据包时,发送判断结果;
通知子模块4032,用于接收所述判断结果,并在判断结果为丢弃所述数据包所在队列的至少一个数据包时,发送丢弃通知,通知丢弃所述数据包所在队列的至少一个数据包。
该分值获取模块401包括:
参数获取子模块4011,用于获取所述数据包的参数;
参数判断子模块4012,用于根据数据包参数中预置的有效标记判断所述数据包的参数是否有效;
设置子模块4013,用于当所述参数判断子模块4012判断数据数据包的参数无效时,将所述数据包的分值设为默认值;
计算子模块4014,用于当所述参数判断子模块4012判断数据包的参数有效时,根据所述参数获取子模块4011获取的参数计算数据包的分值。
如图5所示,在本发明另一实施例中该装置在上述模块的基础上还包括:
长度获取模块405,用于获取所述数据包所在队列的长度;
比较模块406,用于当所述队列的长度小于设定的门限值时通知将所述队列发送到服务器,当所述队列的长度大于设定的门限值时,通知所述丢包判断模块403计算所述数据包的丢包率;
发送模块407,用于当所述比较模块406比较所述队列的长度小于所述门限值时,将所述队列发送到服务器。
由于正常数据包的参数具有相同或相似的特征,因此同种类型的正常数据包的分值处在同一分值区间。由此可以根据该分值确定数据包的等级,相同等级的数据包为一个队列,这样同一个队列中都为正常数据的数据包的概率就很大,而且由正常数据包的参数可知正常数据包的丢包概率一般为0,这样通过计算不同队列的丢包率可以较好的保证正常数据包发送到服务器端。
上述装置可以位于网关内部,也可以作为单独的装置进行使用。
本发明实施例提供的方法和装置,通过计算数据包的分值,并根据该分值将不同的数据包分为不同等级,具有相同等级的数据包组成一个队列,然后计算数据包所在队列的丢包概率,当丢包概率为1时,丢弃数据包所在队 列的至少一个数据包,以此达到有效控制数据流量的效果,并确保被保护服务器不会因流量过大而拒绝服务或死机。并且,若丢弃数据包时,从队列首部丢弃,从而避免尾部数据包一直得不到发送的情况发生。本发明实施例提供的方法和装置,不仅适用于防火墙、DDOS类网关系统,其他需要根据应用情况进行限速应用的设备。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。