📜  计算机网络|漏桶算法

📅  最后修改于: 2021-09-28 09:22:44             🧑  作者: Mango

在网络层,网络在做出服务质量保证之前,必须知道正在保证什么流量。拥塞的主要原因之一是流量经常是突发的。
要首先理解这个概念,我们必须对流量整形知之甚少。流量整形是一种控制发送到网络的流量的数量和速率的机制。拥塞管理的方法称为流量整形。流量整形有助于调节数据传输速率并减少拥塞。
有两种类型的流量整形算法:

  1. 漏桶
  2. 令牌桶

假设我们有一个桶,我们正在以随机顺序倒水,但我们必须以固定的速度取水,为此我们将在桶底部打一个洞。它将确保出水的速度是固定的,而且如果桶装满了,我们将停止倒水。
输入速率可以变化,但输出速率保持不变。同样,在网络中,一种称为漏桶的技术可以平滑突发流量。突发块存储在桶中并以平均速率发送。

在图中,我们假设网络为主机提供了 3 Mbps 的带宽。使用漏桶对输入流量进行整形,使其符合这一承诺。在图中,主机以 12 Mbps 的速率发送数据突发,持续 2 秒,总共 24 Mbits 的数据。主机静默 5 秒,然后以 2 Mbps 的速率发送数据 3 秒,总共 6 Mbits 的数据。总之,主机在 10 秒内发送了 30 Mbits 的数据。漏桶通过在相同的 10 秒内以 3 Mbps 的速率发送数据来平滑流量。
如果没有漏桶,开始的突发可能会消耗比为该主机预留的带宽更多的带宽,从而损害网络。我们还可以看到,漏桶可以防止拥塞。
使用 FIFO 队列可以实现一个简单的漏桶算法。 FIFO 队列保存数据包。如果流量由固定大小的数据包(例如,ATM 网络中的信元)组成,则该过程会在时钟的每个滴答声中从队列中删除固定数量的数据包。如果流量由可变长度数据包组成,则固定输出速率必须基于字节数或比特数。
以下是变长包的算法:

  1. 在时钟滴答时将计数器初始化为 n。
  2. 如果 n 大于数据包的大小,则发送数据包并将计数器递减数据包大小。重复此步骤直到 n 小于数据包大小。
  3. 重置计数器并转到步骤 1。

示例 –让 n=1000
数据包=

leaky_algorithm_2

由于 n> 队列的前面,即 n>200
因此,n=1000-200=800
发送到网络的数据包大小为 200。

leaky_algorithm_2

现在再次 n> 队列的前面,即 n > 400
因此,n=800-400=400
发送到网络的数据包大小为 400。

leaky_algorithm_2

由于 n< 队列前
因此,程序停止。
在另一个时钟滴答上初始化 n=1000。
重复此过程,直到所有数据包都发送到网络。
下面是上述方法的实现:

Java
//Java Implementation of Leaky bucket
 
import java.io.*;
import java.util.*;
 
class Leakybucket {
    public static void main (String[] args) {
        int no_of_queries,storage,output_pkt_size;
        int input_pkt_size,bucket_size,size_left;
         
         //initial packets in the bucket
        storage=0;   
         
        //total no. of times bucket content is checked
        no_of_queries=4;
         
        //total no. of packets that can
        // be accommodated in the bucket
        bucket_size=10;
         
        //no. of packets that enters the bucket at a time
        input_pkt_size=4;
         
        //no. of packets that exits the bucket at a time
        output_pkt_size=1;
        for(int i=0;i
Buffer size= 4 out of bucket size= 10
Buffer size= 7 out of bucket size= 10
Buffer size= 10 out of bucket size= 10
Packet loss = 3
Buffer size= 10 out of bucket size= 10

泄漏桶和令牌桶之间的区别 –

Leaky Bucket Token Bucket
When the host has to send a packet , packet is thrown in bucket. In this leaky bucket holds tokens generated at regular intervals of time.
Bucket leaks at constant rate Bucket has maximum capacity.
Bursty traffic is converted into uniform traffic by leaky bucket. If there is a ready packet , a token is removed from Bucket and packet is send.
In practice bucket is a finite queue outputs at finite rate If there is a no token in bucket, packet can not be send.

令牌桶相对于漏桶的一些优势 –

  • 如果令牌桶中的桶已满,则丢弃令牌而不是数据包。在漏桶中,数据包被丢弃。
  • 令牌桶可以以更快的速率发送大量突发,而漏桶总是以恒定速率发送数据包。