在网络层,网络在做出服务质量保证之前,必须知道正在保证什么流量。拥塞的主要原因之一是流量经常是突发的。
要首先理解这个概念,我们必须对流量整形知之甚少。流量整形是一种控制发送到网络的流量的数量和速率的机制。拥塞管理的方法称为流量整形。流量整形有助于调节数据传输速率并减少拥塞。
有两种类型的流量整形算法:
- 漏桶
- 令牌桶
假设我们有一个桶,我们正在以随机顺序倒水,但我们必须以固定的速度取水,为此我们将在桶底部打一个洞。它将确保出水的速度是固定的,而且如果桶装满了,我们将停止倒水。
输入速率可以变化,但输出速率保持不变。同样,在网络中,一种称为漏桶的技术可以平滑突发流量。突发块存储在桶中并以平均速率发送。
在图中,我们假设网络为主机提供了 3 Mbps 的带宽。使用漏桶对输入流量进行整形,使其符合这一承诺。在图中,主机以 12 Mbps 的速率发送数据突发,持续 2 秒,总共 24 Mbits 的数据。主机静默 5 秒,然后以 2 Mbps 的速率发送数据 3 秒,总共 6 Mbits 的数据。总之,主机在 10 秒内发送了 30 Mbits 的数据。漏桶通过在相同的 10 秒内以 3 Mbps 的速率发送数据来平滑流量。
如果没有漏桶,开始的突发可能会消耗比为该主机预留的带宽更多的带宽,从而损害网络。我们还可以看到,漏桶可以防止拥塞。
使用 FIFO 队列可以实现一个简单的漏桶算法。 FIFO 队列保存数据包。如果流量由固定大小的数据包(例如,ATM 网络中的信元)组成,则该过程会在时钟的每个滴答声中从队列中删除固定数量的数据包。如果流量由可变长度数据包组成,则固定输出速率必须基于字节数或比特数。
以下是变长包的算法:
- 在时钟滴答时将计数器初始化为 n。
- 如果 n 大于数据包的大小,则发送数据包并将计数器递减数据包大小。重复此步骤直到 n 小于数据包大小。
- 重置计数器并转到步骤 1。
示例 –让 n=1000
数据包=
由于 n> 队列的前面,即 n>200
因此,n=1000-200=800
发送到网络的数据包大小为 200。
现在再次 n> 队列的前面,即 n > 400
因此,n=800-400=400
发送到网络的数据包大小为 400。
由于 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. |
令牌桶相对于漏桶的一些优势 –
- 如果令牌桶中的桶已满,则丢弃令牌而不是数据包。在漏桶中,数据包被丢弃。
- 令牌桶可以以更快的速率发送大量突发,而漏桶总是以恒定速率发送数据包。