FortiGate的QOS流量管理可以作用在数据流流经的部件上,可以是CPUNP或者ISF交换机。


计算和评估速率是否违约(令牌桶机制)

关于速率评估,使用令牌桶评估模型:

令牌桶是一个存放令牌的容器,它有一定的容量。系统按设定的速度向桶中放置令牌,当桶中令牌满时,多出的令牌溢出,桶中令牌不再增加。在用令牌桶评估流量时,是以令牌桶中的令牌数量是否足够满足数据包的转发为依据的。如果桶中存在足够的令牌可以用来转发数据包(通常一个令牌拥有一个比特的转发权限),称流量符合(conform)这个规格,否则称为超标(excess)。

评估流量时令牌桶的参数设置包括:
♦ CIR(Committed Information Rate):向桶中放置令牌的速率,即允许的流量的平均速率。
♦ CBS(Committed Burst Size):第一个令牌桶的容量,即每次突发所允许的最大的流量值。该值必须大于最大包的长度。该令牌桶简称为C 桶。
♦ EBS(Excess Burst Size):第二个令牌桶的容量,即为允许的超出突发的最大流量值。该令牌桶简称为E 桶。
当使用两个令牌桶进行流量评估时,依据“C 桶有足够的令牌”、“C 桶令牌不足,但E 桶足够”以及“C 桶和E 桶都没有足够的令牌”的情况,分别实施不同的操作控制。
上图中,B=数据包的大小;Tc=CBS 中令牌的数量;Te=EBS 中令牌的数量。
当CBS 中的令牌数大于数据包的大小时,则该数据包符合规格(Conform),系统将根据配置进行操作;当CSB 中的令牌数小于数据包的大小,系统将检查EBS中令牌的数量,如果EBS 中令牌数量大于数据包的大小,则该数据包超出(Exceed),系统根据配置进行操作,如果EBS 中的令牌数也小于数据包的大小,则该数据包violate违约,系统再根据配置进行操作。

单速率单桶
我们经常配置的最大带宽,实际上就是CIR Committed informantion Rate就是承诺速率,这个就是令牌生成的速率。
CBS Committed Burst Size :承诺突发尺寸,是容量。
CIR往CBS桶中一直注入令牌,当CBS桶满了,不再注入令牌。CBS叫做承诺突发尺寸。
那么实际最大速率=配置的最大速率(CIR)+CBS桶容量(我们这个桶的容量正好等于一个CIR速率)。
当前我们的CBS桶容量等于我们配置的限速最大带宽。
按照这个理论,当设置最大带宽为5M,当用iperf3测试时,突发速率=CIR+CBS=5M+5M=10Mbps,也就是第一秒的速率。从第二秒时,因为第一秒流量已经用完了CBS桶存的令牌, CBS开始是空的,所以CIR一直往里面注入令牌,流量一直取走令牌,所以CBS桶一直空着。
后续的速率就等于CIR。

此图为单速率多桶,在Traffic-shaper中我们用的是单速率单桶,所以请忽略EBS这桶。
我们的手册,配置50Kb最大带宽,实际能够突发能够达到的例子:
这个是FTP或者我们通常下载时在软件上观察的速率,因为客户端观察的速率=总下载数据/时间,所以客户端观察到的下载速率如下(与iperf每秒钟的统计不同)。

单速率双桶
单速率双桶,令牌以CIR的速率往CBS桶中注,如果CBS桶满了,溢出流入到EBS桶
那么在这种模型中,第一秒钟最大速率=CIR+CBS桶容量+EBS桶容量,是能够超过设置的maximum-bandwidth的。



令牌桶算法
使用令牌桶算法评估流量是否违约。
令牌桶是一个存放令牌的容器,它有一定的容量。系统按设定的速度向桶中放置令牌,当桶中令牌满时,多出的令牌溢出,桶中令牌不再增加。在用令牌桶评估流量时,是以令牌桶中的令牌数量是否足够满足数据包的转发为依据的。如果桶中存在足够的令牌可以用来转发数据包(通常一个令牌拥有一个比特的转发权限),称流量符合(conform)这个规格,否则称为超标(excess)。
评估流量时令牌桶的参数设置包括:
♦ CIR(Committed Information Rate):向桶中放置令牌的速率,即允许的流量的平均速率。
♦ CBS(Committed Burst Size):第一个令牌桶的容量,即每次突发所允许的最大的流量值。该值必须大于最大包的长度。该令牌桶简称为C 桶。
♦ EBS(Excess Burst Size):第二个令牌桶的容量,即为允许的超出突发的最大流量值。该令牌桶简称为E 桶。
当使用两个令牌桶进行流量评估时,依据“C 桶有足够的令牌”、“C 桶令牌不足,但E 桶足够”以及“C 桶和E 桶都没有足够的令牌”的情况,分别实施不同的操作控制。
上图中,B=数据包的大小;Tc=CBS 中令牌的数量;Te=EBS 中令牌的数量。
当CBS 中的令牌数大于数据包的大小时,则该数据包符合规格(Conform),系统将根据配置进行操作;当CSB 中的令牌数小于数据包的大小,系统将检查EBS中令牌的数量,如果EBS 中令牌数量大于数据包的大小,则该数据包超出(Exceed),系统根据配置进行操作,如果EBS 中的令牌数也小于数据包的大小,则该数据包violate违约,系统再根据配置进行操作。

我们关于这部分的说明:
Burst control in queuing mode
In a hierarchical token bucket (HTB) algorithm, each traffic class has buckets to allow a burst of traffic. The maximum burst is determined by the bucket size burst (for guaranteed bandwidth) and cburst (for maximum bandwidth). The shaping profile has burst-in-msec and cburst-in-msec parameters for each shaping entry (class id) to control the bucket size.
This example uses the outbandwidth of the interface as 1 Mbps and the maximum bandwidth of class is 50%.
burst = burst-in-msec * guaranteed bandwidth = 100 ms × 1 Mbps x 5% = 50000 b = 6250 B
cburst = cburst-in-msec * maximum bandwidth = 200 ms × 1 Mbps x 50% = 100000 b = 12500 B
The following example sets burst-in-msec to 100 and cburst-in-msec to 200.

config firewall shaping-profile
    edit "profile"
        set type queuing
        set default-class-id 31
        config shaping-entries
            edit 31
                set class-id 31
                set guaranteed-bandwidth-percentage 5
                set maximum-bandwidth-percentage 50
                set burst-in-msec 100 <range from 0 to 2000>//C桶容量
                set cburst-in-msec 200 <range from 0 to 2000>//E桶容量
            next
        end
    next
end

双速率双桶
有CIR速率和PIR速率两个速率分别往两个桶注入令牌。
目前FGT不涉及。