一种基于优先级的令牌桶限速的方法及系统 【技术领域】
本发明涉及数据网络领域, 尤其涉及网络中的报文限速技术。背景技术 在现有的数据网络中, 由于报文流量的突发性, 常常会导致网络拥塞。 避免网络拥 塞的一种方法是, 在接收端对报文进行限速, 如果报文的速率低于规定的速率, 则正常接收 报文 ; 如果报文的速率超过规定的速率, 则将报文丢弃, 或者降低报文的优先级等。
目前普遍采用的方法是利用令牌桶对报文进行限速。如图 1 所示, 系统按规定的 速率不断地向令牌桶中填充令牌, 直到令牌桶装满为止。 当报文到来时, 将报文的长度跟令 牌桶中的令牌数进行比较, 如果令牌桶中有足够的令牌, 则报文允许通过, 同时从令牌桶中 减去报文长度所对应的令牌数 ; 如果令牌桶中的令牌不够, 则将报文丢弃, 或者降低报文的 发送优先级。
现有常用的基于令牌桶算法的标准有 RFC2697 和 RFC2698, 即单速率三色双桶和 双速率三色双桶。华为技术有限公司的专利 《基于令牌桶算法的接入速率限制方法》 中国 申请号 : 03135014.3 的申请对基于 RFC2697 的标准算法进行了改进, 运用令牌借贷的方法 使得高优先级报文可以借贷令牌, 低优先级报文则无权借贷, 在一定程度上区别了高低优 先级的服务质量, 但无法满足一个量的区别。
在上述现有方法中, 令牌的填充速率限制了接收报文的速率, 在网络即将拥塞的 时候, 报文因自身的包长和令牌桶中的令牌数的多少而被随机的丢弃掉, 对于同一个令牌 桶所有的报文被丢弃的机会是均等的, 这样的结果就是使用同一令牌桶的高优先级的用户 和普通用户以及低优先级的用户在被限速的同时, 高优先级用户的服务质量得不到区别体 现。虽然上述专利在一定程度上有所改进, 但是其以令牌数是否大于零为界限来区别对待 高低优先级报文的做法, 由于借贷还贷的负数运算增加设计的复杂度和资源占用, 且在临 界状态, 高低优先级被一刀切, 无法满足设备用户的精确需求。
因此, 现有技术存在一定的缺陷, 需要进一步改进和发展
发明内容 本发明所要解决的技术问题是提供一种基于报文优先级的令牌桶限速的方法和 系统, 克服现有技术中存在的用令牌桶方法限速时, 高低优先级报文无区别的问题和缺陷, 提供一种基于优先级的令牌桶限速的方法。
为了解决上述技术问题, 本发明提供了一种基于优先级的令牌桶限速的方法, 包 括:
根据报文的属性配置报文的限速参数, 包括限速值, 逐个递减的各级令牌桶深, 并 保证最高级令牌桶中的令牌数大于等于其余各级令牌桶中的令牌数之和 ;
接收到报文以后, 计算将要添加的令牌数 ;
当判断到不用进行优先级限速, 则将要添加的令牌数添加进最高级令牌桶中, 利
用最高级令牌桶对当前报文进行限速 ; 以及
当判断到要进行优先级限速, 对于报文优先级数与限速级数相同的报文, 同时将 要添加的令牌数添加进最高级令牌桶及当前报文级数所对应的令牌桶中, 利用当前报文级 数所对应的令牌桶对当前报文进行限速 ;
对于报文优先级数与限速级数不同的报文, 则将要添加的令牌数添加进最高级令 牌桶中, 利用最高级令牌桶对当前报文进行限速。
为了解决上述技术问题, 本发明还提供了一种基于优先级的令牌桶限速的系统, 包括 :
配置模块, 用于根据报文的属性配置报文的限速参数, 包括限速值, 逐个递减的各 级令牌桶深, 并保证最高级令牌桶中的令牌数大于等于其余各级令牌桶中的令牌数之和 ;
接收模块, 用于接收当前报文 ;
获取模块, 获取与当前报文属性相对应得限速参数 ;
计算模块, 用于接收到报文以后, 计算将要添加的令牌数 ;
第一判断模块, 用于当判断到不用进行优先级限速, 发送第一触发信号 ;
第一处理模块, 用于接收到所述第一触发信号后, 将要添加的令牌数添加进最高 级令牌桶中, 利用最高级令牌桶对当前报文进行限速 ; 第二判断模块, 用于当判断到要进行优先级限速, 并进一步判断到报文优先级数 与限速级数相同时, 发送第二触发信号 ;
第二处理模块, 用于同时将要添加的令牌数添加进最高级令牌桶及当前报文级数 所对应的令牌桶中, 利用当前报文级数所对应的令牌桶对当前报文进行限速 ;
第三判断模块, 用于当判断到要进行优先级限速, 并进一步判断到报文优先级数 与限速级数不同时, 发送第三触发信号 ;
第三处理模块, 用于将要添加的令牌数添加进最高级令牌桶中, 利用最高级令牌 桶对当前报文进行限速。
本方法与当前技术相比, 提供一种可基于优先级的令牌桶限速方法, 使得不同的 报文在同一限速条件下有着不同的丢弃概率, 即高优先级在网络拥塞情况下能够快速通 过, 低优先级的报文具有较高的丢弃概率, 避免了当前技术在应用令牌桶限速时, 网络拥塞 情况下高级别的报文被随机丢弃的问题, 达到了限速的效果, 节省了网络资源, 同时提高了 网络的服务质量。
附图说明
图 1 是令牌桶限速示意图。
图 2 是采用本发明基于优先级的令牌桶限速的方法对低优先级包进行限速的示 意图。
图 3 是采用本发明的基于优先级的令牌桶限速的方法对非低优先级包限速的示 意图。
图 4 是本发明的的基于优先级的令牌桶限速的方法流程图。
图 5 是本发明的的基于优先级的令牌桶限速的系统结构图。具体实施方式
本发明的主要思想是设置不同限速级数的令牌桶深, 当接收到的当前报文的级数 与将要限速的级数相同时, 用与限速的级数相对应的令牌桶对当前报文进行限速处理 ; 当 接收到的当前报文的级数与将要限速的级数不同时, 利用最高级的令牌桶对当前报文进行 限速处理。具体来说, 包括以下步骤 :
配置报文的限速参数, 包括限速值, 逐个递减的各级令牌桶深, 并保证最高级令牌 桶中的令牌数大于等于其余各级令牌桶中的令牌数之和 ;
接收到报文以后, 计算将要添加的令牌数 ;
判断是否需要进行优先级限速, 如果不用进行优先级限速, 则将要添加的令牌数 添加进最高级令牌桶中, 利用最高级令牌桶对当前报文进行限速 ;
如果判断到要进行优先级限速, 则进一步判断报文的优先级数, 对于报文优先级 数与限速级数相同的报文, 同时将要添加的令牌数添加进最高级令牌桶及当前报文级数所 对应的令牌桶中, 利用当前报文级数所对应的令牌桶对当前报文进行限速, 之后同时更新 最高级令牌桶和当前报文级数所对应的令牌桶中的令牌数 ;
对于报文优先级数与限速级数不同的报文, 则将要添加的令牌数添加进最高级令 牌桶中, 利用最高级令牌桶对当前报文进行限速 ; 并保证最高级令牌桶中的令牌数大于等 于其余各级令牌桶中的令牌数之和。 下面结合附图对技术方案的实施作进一步的详细描述 :
在本发明的第一优选实施例中, 限速级数包括两级 : 低优先级和高优先级, 在本实 施例中的基于优先级的令牌桶限速的方法, 实施的时候需要以下配置 :
1 配置不同属性报文的限速值, ( 限速值的单位为 bps)。具体数值可以根据实际 需要来设定, 这里限速值的配置是根据不同的用户决定的, 服务级别高的用户分配的带宽 比较大, 那么相应的限速值相比较而言可大一点比如 10M, 一般用户可能是 1M)( 这里的属 性是指不同的报文来自不同的源或者用户 ), 同时应包括是否需要低优先级限速的使能 ;
2 配置报文限速的令牌桶深度, 包括总桶深度和低优先级令牌桶深度, 需要注意的 是, 低优先级桶深必须要小于总桶的深度, 同时必须大于零 ;
3 用来实时存储各令牌桶令牌数的存储装置。
这里通过实例来具体说明本方法的实施方式。
参照图 2 所示, 例如接收一低优先级报文, 需要对其进行低优先级限速, 其步骤如 下:
1) 根据报文的属性获取配置, 限速的速率, 总令牌桶桶深, 低优先级桶的桶深, 是 否进行低优先级限速 ;
由上文叙述可知, 基于之前的配置, 具有不同属性的报文对应不同的配置, 这样, 根据获得到的报文的属性, 就可以获得其相应的配置。例如整个网络服务对象有 100 个, 那 么这 100 个用户可编号 0-99, 每个编号对应一个配置, 每次报文到达时根据编号查找对应 的配置。
2) 根据获取的限速速率, 以及上一报文至当前报文的时间差, 计算出需要添加的 令牌数 ;
添加的令牌数是根据同一个属性相邻报文到达的时间差乘以限速的速率而得到
的, 单位为字节数。
3) 将计算的添加的令牌数分别添加进低优先级令牌桶和总桶中, 获得当前可用的 令牌数 ;
4) 将当前低优先级桶中的令牌数与当前报文长度进行比较, 如果令牌数多于报文 长度, 则转发该报文, 否则视为丢弃 ;
5) 同时更新低优先级桶和总桶中的令牌数, 若当前包丢弃, 两个桶中的令牌数分 别为 4 中添加后的可用令牌数, 对于添加令牌后令牌数大于令牌桶深的, 则将令牌桶的深 度更新为桶深, 对于通过的包的情况, 其桶中的令牌数为可用令牌数与报文长度之差 ;
流程结束, 对于当前的低优先级报文, 由于低优先级桶深比较浅的缘故, 限制其最 大突发流量, 以相对高的丢弃率换取后续高优先级包的可用令牌数, 提高后续高优先级包 的通过率, 保证网络的服务质量。
参照图 3 所示, 对于需要进行低优先级限速的非低优先级报文, 则进行以下步骤 :
1) 根据报文的属性获取配置, 限速的速率, 总令牌桶桶深, 低优先级桶的桶深, 是 否进行低优先级限速 ;
2) 根据获取的限速速率, 以及上一报文至当前报文的时间差, 计算出需要添加的 令牌数 ; 3) 将计算的添加的令牌数只添加进总桶中, 获得当前可用的令牌数 ; 如图 3 所示
4) 将当前总令牌桶中的令牌数与当前报文长度进行比较, 如果令牌数多于报文长 度, 则转发该报文, 否则视为丢弃 ;
5) 更新总令牌桶中的令牌数, 若当前包丢弃, 总桶中的令牌数即为 4 中的可用令 牌数, 对于添加令牌后令牌数大于令牌桶深的, 则将令牌桶的深度更新为桶深, 对于通过包 的情况, 总桶中的令牌数为可用令牌数与当前报文长度之差。 这里需要注意的是, 低优先级 桶中的令牌数永远小于总桶中的令牌数, 因此, 当总令牌桶中的令牌数小于低优先级桶中 的令牌数时, 需要更新低优先级桶的令牌数, 使二者相等。
流程结束, 对于当前的非低优先级报文, 其虽然被要求以低优先级限速, 但其不属 于低优先级报文, 相对应的允许的最大突发流量是大于低优先级包的, 对于后续的任何报 文, 都是不受当前报文的影响的。
对于不需要进行低优先级限速的报文, 其实施的步骤即是当前被广泛应用的流 程, 不需要考虑低优先级桶的任何参数, 只应用总令牌桶即可, 当然, 其效果只能是同一属 性的所有级别的报文, 都有着相同的最大突发流量限制, 在网络拥塞的时候, 会被随机性的 丢弃掉。
图 4 是本发明的的基于优先级的令牌桶限速的方法流程图。即将图 2 所示的流程 和图 3 所示的流程综合起来进行阐述, 包括 :
步骤 401 : 根据速率计算添加令牌数 ;
步骤 402 : 判断是否进行低优先级限速 ; 如果是, 执行步骤 403, 如果否, 执行步骤 411 ;
步骤 403 : 判断数据包是否为低优先级?如果是, 执行步骤 404, 如果否, 执行步骤 407 ;
步骤 404 : 同时往低优先级桶和总的令牌桶添加令牌 ;
步骤 405 : 根据低优先级桶进行 RFC2697 标准规定的算法处理 ;
步骤 406 : 丢弃包, 不进行令牌的减操作, 通过包同时进行总桶和低优先级桶的减 操作, 结束 ;
步骤 407 : 只进行总的令牌桶的添加, 不进行低优先级桶的添加 ;
步骤 408 : 根据总的令牌桶, 进行 TrTCM 的算法处理 ;
步骤 409 : 丢弃包, 不进行令牌的减操作 ; 通过包, 只进行总桶的减操作 ;
步骤 410 : 当总的令牌桶小于优先级桶时, 必须将低优先级桶的令牌数置为总的 令牌数, 结束 ;
步骤 411 : 只使用总的令牌桶, 向桶中添加令牌数 ;
步骤 412 : 进行 RFC2697 标准规定的算法处理, 结束。
另外, 本发明提供的限速方法还可被扩展为多优先级的限速, 而不仅限于高低优 先级的区别, 例如, 分别是高、 中、 低三级优先级, 在实现三级限速的时候, 与两级限速的区 别就是多用一套参数, 且各套参数之间有一定的关联, 具体实施如下 :
1 配置不同属性报文的限速速率 ( 这里的属性是指不同的报文来自不同的源或者 用户 ) ;
2 配置三个令牌桶深度, 分别对应高、 中、 低优先级桶深, 三个桶深的关系应该是 CBS 高> CBS 中> CBS 低, 同时 CBS 中 +CBS 低要不大于 CBS 高, 三个桶深同时包括优先级限 速使能 ; ( 这里的高优先级桶深相当于附图中的总桶深 )
3 用来实时存储各令牌桶令牌数的存储装置。
这里通过实例来具体说明多级限速的实施方式 :
例如接收一中优先级报文, 需要对其进行中优先级限速, 其步骤如下
1. 根据报文的属性获取配置, 限速的速率, 高优先级令牌桶桶深, 中优先级桶的桶 深, 是否进行中级优先级限速 ;
2. 根据获取的限速速率, 以及上一报文至当前报文的时间差, 计算出需要添加的 令牌数 ;
3. 将计算的添加的令牌数分别添加进中级优先级令牌桶和高优先级桶中, 获得当 前可用的令牌数 ;
4. 将当前中优先级桶中的令牌数与当前报文长度进行比较, 如果令牌数多于报文 长度, 则转发该报文, 否则视为丢弃 ;
5. 同时更新中优先级桶和高优先级桶中的令牌数, 若当前包丢弃, 两个桶中的令 牌数分别为 4 中的可用令牌数, 对于大于令牌桶深的, 则更新为桶深, 对于通过的包, 其令 牌数为两者之差 ; 这里需要注意的是, 当低优先级桶中的令牌数多于中优先级令牌数时, 必 须更新低优先级桶中的令牌数使其等于中优先级桶中的令牌数 ; 高优先级桶级别最高, 桶 中的令牌数不因其它桶中的令牌数的大小而改变
流程结束。
对于需要进行中优先级限速的非中优先级报文, 那么, 可能为低优先级报文或者 是高优先级报文, 如果是低优先级报文, 且同时是低优先级限速使能, 则图 3 中的方法进行 限速。如果低优先级限速也不使能或者该报文为高优先级, 则按照图 2 中的方法进行限速, 高优先级桶对应总桶, 中低优先级桶的更新参照图 2 中的低优先级桶的更新方法。参照图 5 所示, 是本发明的的基于优先级的令牌桶限速的系统结构图。
配置模块 501, 用于根据报文的属性配置报文的限速参数, 包括限速值, 逐个递减 的各级令牌桶深, 并保证最高级令牌桶中的令牌数大于等于其余各级令牌桶中的令牌数之 和;
接收模块 502, 用于接收当前报文 ;
获取模块 503, 获取与当前报文属性相对应得限速参数 ;
计算模块 504, 用于接收到报文以后, 计算将要添加的令牌数 ;
第一判断模块 505, 用于当判断到不用进行优先级限速, 发送第一触发信号 ;
第一处理模块 506, 用于接收到所述第一触发信号后, 将要添加的令牌数添加进最 高级令牌桶中, 利用最高级令牌桶对当前报文进行限速 ;
第二判断模块 507, 用于当判断到要进行优先级限速, 并进一步判断到报文优先级 数与限速级数相同时, 发送第二触发信号 ;
第二处理模块 508, 用于同时将要添加的令牌数添加进最高级令牌桶及当前报文 级数所对应的令牌桶中, 利用当前报文级数所对应的令牌桶对当前报文进行限速 ;
第三判断模块 509, 用于当判断到要进行优先级限速, 并进一步判断到报文优先级 数与限速级数不同时, 发送第三触发信号 ; 第三处理模块 510, 用于将要添加的令牌数添加进最高级令牌桶中, 利用最高级令 牌桶对当前报文进行限速。
在本发明的一个优选实施例中, 所述第二处理模块 508, 还用于同时更新最高级令 牌桶和当前报文级数所对应的令牌桶中的令牌数。
在本发明的一个优选实施例中, 所述第三处理模块 510, 还用于令最高级令牌桶中 的令牌数大于等于其余各级令牌桶中的令牌数之和。
所述报文的属性是指不同的报文来自不同的源或者用户。
所述计算模块 504, 用于根据限速值和本次报文与上次同一属性报文的时间差计 算将要添加的令牌数。
在本发明的一个优选实施例中,
所述配置模块 501 用于配置逐个递减的各级令牌桶深, 包括总令牌通深和低优先 级令牌桶深, 相应的,
接收模块 502, 用于接收一低优先级报文 ;
获取模块 503, 用于根据报文的属性获取报文的限速参数, 所述参数包括 : 限速 值、 总令牌通深、 低优先级令牌桶深 ;
第二判断模块 507, 用于判断到需要对其进行低优先级限速, 发送第二触发信号 ;
计算模块 504, 根据获取的限速值, 以及上一报文至当前报文的时间差, 计算出需 要添加的令牌数 ;
第二处理模块 508, 用于将计算的添加的令牌数分别添加进低优先级令牌桶和总 桶中, 获得当前可用的令牌数 ; 将当前低优先级桶中的令牌数与当前报文长度进行比较, 如 果令牌数多于当前报文长度, 则转发该当前报文, 否则视为丢弃当前报文 ; 同时更新低优先 级桶和总桶中的令牌数, 若当前报文丢弃, 两个桶中的令牌数分别为添加后的可用令牌数, 当添加后的令牌数大于令牌桶深, 则将令牌桶的深度更新为桶深, 当前报文通过, 则令牌桶
中的令牌数为添加后的令牌数与当前报文长度之差 ; 更新总令牌桶和低优先级令牌桶的令 牌数。
在本发明的又一个优选实施例中,
接收模块 502, 还用于接收一非低优先级报文 ;
获取模块 503, 用于根据报文的属性获取报文的限速参数, 所述参数包括 : 限速 值、 总令牌通深、 低优先级令牌桶深 ;
根据获取的限速值, 以及上一报文至当前报文的时间差, 计算出需要添加的令牌 数;
计算模块 504, 将所述需要添加的令牌数只添加进总令牌桶中, 获得当前可用的令 牌数 ;
第三判断模块 509, 用于当判断到要进行低优先级限速, 发送第三触发信号 ;
第三处理模块 510, 用于将当前总令牌桶中的令牌数与当前报文长度进行比较, 如 果令牌数多于当前报文长度, 则转发该当前报文, 否则视为丢弃当前报文 ; 更新总令牌桶中 的令牌数, 若当前报文丢弃, 总桶中的令牌数即为添加后的可用令牌数, 当添加后的令牌数 大于令牌桶深, 则将令牌桶的深度更新为桶深, 当当前报文通过, 则令牌桶中的令牌数为添 加后的令牌数与当前报文长度之差 ; 当判断到总令牌桶中的令牌数小于低优先级桶中的令 牌数, 则更新低优先级桶的令牌数与总令牌桶中的令牌数相等。 本发明提供的方法可以根据用户的需求扩展优先级的数目, 只要遵照一个原则, 最高优先级桶深配置不小于其余次优先级桶深配置的总和, 在更新令牌数存储情况时同样 遵循这个规则, 即低优先级桶中的令牌数不得超过高一级令牌桶的令牌数 ; 这样, 利用本方 法提供的限速说明, 即可达到多级优先级的限速, 提高网络服务质量 (QOS)。
需要指出的是, 以上所述仅为本发明的较佳实施例, 并非用来限定本发明的实施 范围, 凡是依据本发明所作的等效的变化与修改, 都被本发明的专利范围所覆盖。