因为buffer和bucket都是一个固定大小的内存结构(除非重新设置),所以是有上限的。buffer的上限决定了能同时缓存最多多少的数据包,而bucket的上限决定了token最大的上限。
bucket太大,里边缓冲的token可能很多。突发的流量都能获得tocken而被发送出去。因此可能会导致瞬间流量过大,达不到限流的效果。
TBF 是一种流量整形技术,它使用 token bucket 的机制来控制网络流量。其中 buffer 的设计非常重要。
-
缓冲区大小:
- 缓冲区大小决定了 TBF 能缓存多少数据包。
- 缓冲区过小会导致数据包丢失,过大则会浪费系统资源。
- 一般根据网络带宽和流量特点来合理设置缓冲区大小。
-
令牌生成速率:
- 令牌生成速率决定了 TBF 允许的平均流量。
- 令牌生成速率过高会导致突发流量过大,过低会限制正常流量。
- 需要根据链路带宽和预期流量特点来设置合理的令牌生成速率。
-
桶的大小:
- 桶的大小决定了 TBF 允许的最大突发流量。
- 桶太小会限制突发流量,太大则会浪费系统资源。
- 桶的大小一般设为令牌生成速率乘以预期的最大突发时间。
-
其他参数:
- 最大延迟时间:控制数据包在缓冲区的最长等待时间。
- 最小带宽保证:即使系统负载很高也要保证的最小带宽。
综上所述,TBF 的 buffer 设计需要根据具体应用场景和网络环境来权衡各项参数,以达到流量整形的最佳效果。需要测试和调整才能找到最佳配置。
其中,下边的桶和缓冲区一开始容易让人迷惑。 特此标明。
在 TBF(Token Bucket Filter)中,桶和缓冲区是两个不同但相关的概念:
-
桶(Token Bucket):
- 桶表示令牌的容量,即系统能容纳的最大突发流量。
- 桶中存放的是令牌,每个令牌代表一个数据包可以被传输。
- 令牌以固定的速率持续地添加到桶中,这就限制了平均流量。
- 当桶中有足够的令牌时,数据包才能被传输。
-
缓冲区(Buffer):
- 缓冲区是用于临时存储待传输的数据包。
- 数据包先进入缓冲区,等待有足够的令牌时再从缓冲区取出传输。
- 缓冲区的大小决定了系统能缓存的最大数据量。
- 如果缓冲区满了,后续的数据包将被丢弃。
两者的区别可以总结如下:
- 桶控制系统的最大突发流量,缓冲区控制系统的最大容量。
- 桶中存放的是令牌,缓冲区中存放的是数据包。
- 桶决定了允许的最大流量峰值,缓冲区决定了允许的最大数据缓存量。
总之,桶和缓冲区在 TBF 中起着不同但相互补充的作用,共同完成流量整形的功能。合理设计两者的参数是实现有效流量控制的关键。