马上注册成为ROSABC会员,随时发帖回复。
您需要 登录 才可以下载或查看,没有账号?会员注册
x
HTB 令牌桶介绍
HTB 等级令牌桶允许创建一个等级队列结构,并确定队列之间的关系,就像“父亲与儿子”或“兄弟之间”。 一旦队列添加了一个 Child(子队列)将会变为 inner(内部队列),所有向下没有 Children(子队列)称为 Leaf 队列(叶队列),内部队列仅负责传输的分配,所有 Leaf 队列对符合的数据进行处理。 在 RouterOS 必须指定 Parent(父级)选项并指定 一个队列为子队列。
双重限制
每个队列在 HTB 有 2 个速率限制:
-- CIR (约定信息速率 Committed Information Rate) – (在 RouterOS 中的参数为 limit-at) 最坏的情况下, 无论如何都会将得到给定的的 CIR 传输量(假设我们能发送那么多的数据量)
-- MIR (最大信息速率 Maximal Information Rate) – (在 RouterOS 中的参数为 max-limit) 最好的情况下, 如果父级有剩余带宽,将获得该速率值
换句话说,首先 Limit-at(CIR)都会被满足,仅当子队列尝试借调必要的数据传输从他们的父级,以达到最大的带宽max-limit (MIR).
注: 无论如何 CIR 都将会被分配到符合队列的带宽 (即使父级的 max-limit 满载) ,那就是为什么,确保最佳的使用双 重限制功能,我们建议坚持这些规则:
-- CIR 约定速率之和,即所有子级速率必须小于或等于可获得父级传输量。
CIR(parent)* ≥ CIR(child1) +...+ CIR(childN)
*如果父级与主父级可以设置为 CIR(parent)=MIR(parent)
-- 任何子级的最大速率必须小于或者等于父级的最大速率
MIR (parent) ≥ MIR(child1) & MIR (parent) ≥ MIR(child2) & ... & MIR (parent) ≥ MIR(childN)
在 winbox 中队列的颜色变化:
-- 0% - 50% 使用情况 – 绿色
-- 51% - 75% 使用情况 – 黄色
-- 76% - 100% 使用情况 – 红色
优先级
这里已经知道,所有队列的 limit-at (CIR)都有可能将会被耗尽,优先级则主要负责分配父级队列剩余的带宽给 Child(子队列)达到 max-limit。队列高的优先级最优先达到 max-limit,优先级低的则不会。8 是最低优先级,1 则最高。 注意,优先级工作环境:
-- 对于 leaf 叶队列–优先级对于 inner(内部队列)没有任何意义,即 inner 内部队列与 leaf(叶队列)的优先级 不可比较
-- 如果 max-limit 被设定(非 0)
下面这部分我们将分析 HTB 的操作,将演示一个 HTB 结构并将涵盖可能出现的所有情况和功能,我们的 HTB 结构由下面 5 个队列构成:
-- Queue01 内部队列有 2 个子级 - Queue02 和 Queue03
-- Queue02 内部队列有 2 个子级 - Queue04 和 Queue05
-- Queue03 叶队列
-- Queue04 叶队列
-- Queue05 叶队列
Queue03,Queue04 和 Queue05 的需要 10Mbps,我们接口处理能力在 10Mbps 的流量
事例 1: 普通事例
-- Queue01 limit-at=0Mbps max-limit=10Mbps
-- Queue02 limit-at=4Mbps max-limit=10Mbps
-- Queue03 limit-at=6Mbps max-limit=10Mbps priority=1
-- Queue04 limit-at=2Mbps max-limit=10Mbps priority=3
-- Queue05 limit-at=2Mbps max-limit=10Mbps priority=5
事例 1 结果:
-- Queue03 得到 6Mbps
-- Queue04 得到 2Mbps
-- Queue05 得到 2Mbps
-- 结论:HTB 建立在一种方式上,通过满足所有的 limit-at,主队列已没有带宽进行分发。
事例 2:max-limit 事例
-- Queue01 limit-at=0Mbps max-limit=10Mbps
-- Queue02 limit-at=4Mbps max-limit=10Mbps
-- Queue03 limit-at=2Mbps max-limit=10Mbps priority=3
-- Queue04 limit-at=2Mbps max-limit=10Mbps priority=1
-- Queue05 limit-at=2Mbps max-limit=10Mbps priority=5
事例 2 结果
-- Queue03 得到 2Mbps
-- Queue04 得到 6Mbps
-- Queue05 得到 2Mbps
-- 结论: 在满足所有的 limit-at 后,HTB 将把剩余的带宽分配给优先级高的队列。
事例 3: inner 队列 limit-at
-- Queue01 limit-at=0Mbps max-limit=10Mbps
-- Queue02 limit-at=8Mbps max-limit=10Mbps
-- Queue03 limit-at=2Mbps max-limit=10Mbps priority=1
-- Queue04 limit-at=2Mbps max-limit=10Mbps priority=3
-- Queue05 limit-at=2Mbps max-limit=10Mbps priority=5
事例 3 结果
-- Queue03 得到 2Mbps
-- Queue04 得到 6Mbps
-- Queue05 得到 2Mbps
-- 结论:在满足所有的 limit-at 后,HTB 将分配剩余带宽给优先级高的,但在这个事例中,内部对列 Queue02 指定了 Limit-at, 这样他会保留 8Mbps 的流量给 Queue04 和 Queue05,Queue04 有 更高的优先级,那就是为什么会得到更高的带宽。
事例 4:leaf 队列的 Limit-at
-- Queue01 limit-at=0Mbps max-limit=10Mbps
-- Queue02 limit-at=4Mbps max-limit=10Mbps
-- Queue03 limit-at=6Mbps max-limit=10Mbps priority=1
-- Queue04 limit-at=2Mbps max-limit=10Mbps priority=3
-- Queue05 limit-at=12Mbps max-limit=15Mbps priority=5
事例 4 结果
-- Queue03 得到 3Mbps
-- Queue04 得到 1Mbps
-- Queue05 得到 6Mbps
-- 结论:为了满足所有的 Limit-at,HTB 被强迫分配 20Mbps,Queue03 为 6Mbps ,Queue04 为 2Mbps,Queue05 为 12Mbps,但我们的接口只能处理 10Mbps,因此接口队列通常 FIFO 带宽发分配将保持比例 6:2:12, 即 3:1:6。
RouterOS 中的 HTB
在 RouterOS 中有 4 个 HTB 树:
-- global-in
-- global-total
-- global-out
-- interface queue
当添加一个简单队列时,将产生 3 个 HTB 类(in global-in, global-total and global-out),但在接口队列中不添加任何 类。
当数据包通过路由器时,它将穿过所有 4 个 HTB 树——global-in, global-total, global-out 和 interface queue。如 果是指向路由器的它将穿过 global-in 及 global-total HTB 树,如果数据包是从路由器发出的,它们将穿过 global-total, global-out 及 interface 队列。
|