什么是令牌桶中的令牌?

网络工程 拥塞
2021-07-09 21:07:16

我相信,令牌只不过是数据包,但我的问题是,这些令牌是否是固定大小的?如果是,为什么要固定数据包?谁能用例子清楚地解释算法。谢谢。

1个回答

令牌桶的概念是通用的,但 QoS 的实现可能使用不同的令牌单元以指定的速率控制流量。

Cisco 流量监管(最基本的 QoS 令牌桶技术)中,令牌桶大小以字节为单位指定(每个令牌为一个字节)。例如,如果您想以 100Kbps 的速率监管流量,您可以使用这样的命令police 100000 18750将您的cir(提交信息速率)设置为每秒 10 万位,将您的bc(突发提交/令牌桶大小)设置为 18,750 字节. 以下是此令牌桶如何处理一些示例流量的示例(t 是以毫秒为单位的经过时间):

  • 监管桶以 18,750 字节开始
  • 在 t=0ms:发送 1,500 字节数据包,在桶中留下 17,250 字节
  • 在 t=100 毫秒时:我们将 1,250 字节(令牌)添加到存储桶(100k 时为 0.1 秒),然后传输两个刚刚到达的 1500 字节数据包。17250+1250-3000=15,500 字节在桶中
  • 在 t=200 毫秒时:我们将 1,250 字节(令牌)添加到桶中,然后传输三个刚刚到达的 1500 字节数据包。15500+1250-4500=12,250 字节在桶中
  • 在 t=300 毫秒时:我们向桶中添加 1,250 字节(令牌),然后传输四个刚到达的 1500 字节数据包。12250+1250-6000=7,500 字节(令牌)留在桶中
  • 在 t=500 毫秒时:我们添加 2,500 字节(100Kbps 为 0.2 秒没有流量)然后传输六个新到达的 1000 字节数据包。7500+2500-6000=4,000 字节
  • 在 t=600 毫秒时:我们向桶中添加 1,250 字节(令牌),然后传输三个 1500 字节的新数据包。4000+1250-4500=750 字节
  • 在 t=650 毫秒:我们添加 625 字节(令牌)并尝试发送刚到达的 1500 字节数据包,但必须丢弃它,因为桶中没有足够的令牌(字节)。750+625=1375 字节(令牌不够,丢弃 1500 字节数据包)

让我尝试描述算法的工作原理。当第一个数据包到达时,桶开始满了,我们从桶中取出字节。当下一个数据包到达时,我们根据自上次处理的数据包以来的时间添加令牌,然后在新的存储桶大小允许的情况下传输尽可能多的数据包。当新数据包到达时,我们总是添加令牌(字节)(速率 * 自上一个数据包以来的秒数 / 8bitsperbyte)然后传输尽可能多的数据包允许的数据包。我们永远不能填充超过固定大小(bc / 桶大小)的桶,如果大小超过桶中的令牌,我们永远不能在给定的时刻取出更多令牌来传输数据包。

另一种思考方式是,您以设定的速度(每秒升数)打开水龙头,然后在其下放一个水桶。您可以将水桶倒入您的婴儿池或其他水箱(从令牌桶中消耗水),其速度不超过水流入水桶的速度。如果在水桶在水龙头下注水时等待太久,由于水桶的固定尺寸,额外的水(代币)将会丢失(浪费/扔掉)。由于数据包是以固定字节来衡量的,我们可以将一个字节与一个固定大小的水滴进行比较——令牌桶的最大容量以水滴(令牌)的数量来衡量。

这有帮助吗?请参阅我链接到的 Cisco 文章。