1 HTB(Hierarchical Token Bucket,分层的令牌桶)
HTB 使用令牌和存储桶的概念,以及基于类的系统和过滤器,以允许对流量进行复杂和精细的控制。借助复杂的借用模型,HTB 可以执行各种复杂的流量控制技术。该队列规则允许用户定义所使用的令牌和桶的特征,并允许用户以任意方式嵌套这些桶。当与分类方案结合使用时,可以非常精细地控制流量。HTB 非常适用于这种情况:如果有一个固定速率的链路,希望分割给多种不同的用途使用,为每种用途做出带宽承诺并实现定量的带宽借用。HTB 不同于 CBQ 的是并不靠计算闲置时间来整形。它是一个分类的令牌桶过滤器。
1.1 HTB的参数介绍
default
每个 HTB 队列的可选参数,默认值为 0,其意义是任何未分类的流量以物理网卡的速率出队,完全绕过连接到根队列的任何分类。如果指定了 default 的值,未分类(不能和 filter 匹配)的流量(默认的)会被送到这个参数所指定的类中。
rate
用来设置限制传输的流量速率。
ceil
用来设置限制传输流量的最大所需速率。如果需要设置共享带宽,则需使用此参数。这个参数可以被认为相当于“可突发带宽”
burst
桶的大小。前面在讨论不可分类的队列规则时提到过令牌桶过滤器 TBF,桶的概念就是其中的令牌,用于处理数据的传输时必要的参数,如果需要具体了解可以参考前面的内容
cburst
这是 ceil 桶的大小。在等待更多的令牌到来之前,HTB 会使 cburst 字节出列。这里涉及令牌流与数据流的概念与关系,具体可参考前面不可分类的队列规定
quantum
每轮当前的类能发送的字节数,这是用来控制租借带宽的关键参数。其默认计算 quantum = rate / r2q。quantum 必须大于 1500 小于 60000。quantum 只在 class 的流量超过了 rate 但是没有超过 ceil 时使用,它的值越小,带宽共享的效果就越好。
1.2 配置范例
这个配置把 WEB 服务器的流量控制为 5Mbps、SMTP 流量控制在 3Mbps。而且二者一共不得超过 6Mbps,互相之间允许借用带宽。
# sudo tc qdisc add dev enp0s5 root handle 1: htb