服务质量_QOS【管制和拥塞避免机制】
服务质量_QOS【标记和队列】:https://www.cnblogs.com/good-study/p/16160592.html
1.1 区分服务模型配置步骤:
- 分类classfication/标记Marking
- 管制Policing/整形Shaping 限速
- 拥塞避免机制RED WRED 防止尾丢弃
- 队列Queuing:PQ、CQ、WFQ、FIFO、CB、WFQ、LLQ、WRRQ、SRRQ、DRRQ
1.2 拥塞避免机制 RED
1.2.1 背景
- 多股tcp流量在不同时间启动;
- TCP是慢启动机制,窗口大小会不断增加;
- 尾丢弃机制会导致多个会话的多个报文被同时丢弃;
- 超过实际总带宽的时候,Tcp会话会同时收到影响,重启;
1.2.2 RED拥塞避免机制(随机早期检测)
- 预先设置队列阈值,上图,队列大小为40,设置最小阈值为32,最大为40,当队列数量小于32时不丢弃,在32-40之间时随机丢弃,大于40直接执行尾丢弃,随着队列数量不断增加丢弃概率越高,最大丢弃概率为10%。
使用RED会产生什么问题呢?带宽使用量会更接近实际带宽大小。
1.3 WRED 拥塞避免机制
- 根据IP Precedence不同,设置的最小阈值不同,且随机丢弃的概率也随着IP Precedence越高,机率越小;RSVP高于所有IP Precedence;
- WRED默认可以识别报文中携带IP Precedence值,也可以支持DSCP;
interface FaceEthernet0/0 random-detect prec-based interface FaceEthernet0/0 random-detect dscp-based //支持dscp的Wred
random-detect dscp ef 39 45 20 //39丢弃低阈值,45丢弃高阈值,20丢弃概率1/20
1.4 FBWRED-基于流的WRED
RED和WRED都是基于TCP流量去设计的;FBWRED可以为icmp、tcp、udp提供早期拥塞避免机制;
interface FaceEthernet0/0 random-detect flow //这些流是设备自动定义的
1.5 CBWRED-基于MQC模型的WRED
优先级队列(Priority)不能使用WRED
ip access-list extended Business permit tcp any any range ftp-data ftp permit tcp any range ftp-data ftp any ip access-list extended DATA permit tcp any any eq www permit tcp any eq www any permit tcp any any eq telnet permit tcp any eq telnet any ip access-list extended VoIP permit udp any any range 16384 32767 permit udp any range 16384 32767 any ! class-map match-all DATA match access-group name DATA class-map match-all VoIP match access-group name VoIP class-map match-all Business match access-group name Business ! policy-map CBWRED class VoIP priority percent 20 //优先级队列不能使用WRED class DATA bandwidth percent 30 random-detect dscp-based class Business bandwidth percent 20 random-detect dscp-based class class-default fair-queue random-detect dscp-based random-detect ecn ! interface Ethernet0/0 service-policy output CBWRED !
//random-detect ecn:ECN(Explicit Congestion Notification)是一种拥塞通知机制,用于向网络中的设备传递拥塞信息,而不是简单地丢弃数据包。ECN 使用 IP 包头中的 ECN 标志位来指示网络设备有关拥塞状态的信息。
1.6 流量管制Policing和流量整形Shaping
管制和整形在软件队列之前执行;
- 在进入队列之前,通过整形器和管制器会标个色;绿色流量正常转发;红色流量整形器会进行缓存到该流量变成绿色时,红色流量管制器要么丢弃要么重标记再进行转发。
- 管制比整形更加严格一些。
- 入向流量和出向流量都可以进行流量管制
- 超额流量一般被丢弃
- 对于tcp而言,会导致tcp大量重传
- 管制支持对数据包标记或者重标记
- 管制建议在支持可以突发流量的环境中使用。
- 只有出向流量可以整形
- 超额流量进行缓存
- tcp重传限制到最小
- 整形一般是不支持重标记的
- 整形建议在不支持突发的环境中使用。
1.6.1 令牌桶算法
- CIR:限速后的值
- Bc:每个Tc可发送报文大小:整形的单位Bit,管制的单位是Byte;
- Tc:时间间隔,默认125ms
- CIR=Bc/Tc
1.6.1.2 令牌桶术语
-
CIR (Committed Information Rate):承诺信息速率,也称为承诺速率或合同速率。它表示令牌桶算法允许通过的平均速率,即每秒钟允许通过的数据包数量或比特数。CIR 是用来限制数据包的发送速率的重要参数。
- TC (Token Bucket):令牌桶,也称为令牌存储桶。TC 是一个用于存放令牌的容器,其大小由 BC 决定。根据令牌桶算法,令牌以固定速率被放入 TC 中,并由数据包消耗。
- BC (Burst Capacity):突发容量,也称为突发大小或突发速率。它表示令牌桶中的最大令牌数量。当令牌桶刚开始工作或空闲一段时间后,允许突发发送的令牌数量超过 CIR。BC 用于处理短期突发流量,以确保一些额外的令牌可供使用。
- BE (Excess Burst):超额突发,也称为超额大小或超额速率。它表示令牌桶中超过 BC 的额外令牌数量。BE 可用于处理突发流量的瞬时增长,但是它没有优先级,当 BE 中的令牌用尽时,超过 CIR 的数据包将被丢弃或延迟。
1.6.1.3 双色单速单令牌桶算法
令牌桶可以看作是一个存放令牌的容器,预先设定一定的容量。单速单桶是设想在不出现超承诺速率的流量,通过一个令牌桶流量测量的方法。我们将令牌桶预先设定一定的容量,系统按设定的速度像桶中放置令牌,当桶中令牌满时,多余的令牌溢出。
令牌桶算法的2个主要参数:
- CIR (Committed Information Rate):承诺信息速率,以承诺的每秒直接数据来衡量,单位Bytes。
- BC:承诺突发尺寸,已字节数衡量,值>0,至少应该大于等于最大分组长度,单位:bit,BC越大,表示说允许的突发量越大。
当数据流到达设备时首先会根据数据的大小从令牌桶中取出与数据大小相当的令牌数量用来传输数据(RFC标准中定义的大小以b/s为单位)。也就是说要使数据被传输必须保证令牌桶有足够多的令牌。
以CIR速率放入令牌,直到令牌数量达到BC时,后续令牌被丢弃。
令牌桶的尺寸为BC,用Tc表示桶中的令牌数量,Tc初始值等于BC。如果某一时刻一个大小为N的报文到达,在对其进行评估时,当令牌数目足够转发报文,即Tc>N,则报文被标记为“CIR承诺信息速率内”;当令牌数目不够转发报文,即Tc<N,则报文被标记为“超出CIR承诺信息速率”。
举例理解,某大型景区限制进入人的流量,每一小时发放1000张票,那就意味得到票(令牌)的人可以进入景区,每一小时有1000人能进入出,在1小时内购票的人没有超过1000人,可以轻松的购到门票,当1小时内购票的人超过1000人后,超过1000的人只能等着下一个小时才能进入。这样就控制住人流量,不会使景区在各个景点人满造成事故。
案例:(双色单速单桶)
- 假设第1个到达的报文是1500 bytes时,C桶当前有2000bytes,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少1500 bytes,还剩500 bytes。
- 假设1ms之后到达第2个报文1500 bytes,先填充令牌,新增令牌=CIR时间间隔=1Mbps1ms=1000bit=125bytes,加上C桶原来剩余的令牌500bytes,此时C桶共有625bytes,令牌不够,报文标记为红色。
- 假设又过1ms后到达第3个报文1000 bytes,但C桶只有625 bytes,小于报文长度,因此新增令牌CIR*1ms=1000bit=125bytes,此时C桶共有750 bytes,依然不够,因此报文被标记为红色。
- 假设又过20ms后到达第4个报文1500 bytes,但C桶只有750 bytes,小于报文长度,因此C桶新增令牌CIR*20ms=20000bit=2500bytes,C桶此时令牌数3250 bytes,而BC=2000bytes,因此溢出1250bytes令牌被丢弃,此时C桶大于报文长度,报文标记为绿色,C桶减少1500bytes,剩500bytes。
1.6.1.4 带突发的双令牌桶算法
IETF建议了两种带突发的双令牌桶算法——
- 单速率三色标记(single rate three color marker,srTCM,RFC2697 定义,或称为单速双桶算法)算法,主要关注报文尺寸的突发;
- 双速率三色标记(two rate three color marker,trTCM,RFC2698 定义,或称为双速双桶算法)算法,主要关注速率的突发。
两种算法的评估结果都是为报文打上红、黄、绿三种颜色的标记,所以称为“三色标记”。 QoS 会根据报文的颜色,设置报文的丢弃优先级,两种算法都可工作于色盲模式和非色盲模式。
1.6.1.4.1 三色单速双令牌桶算法
srTCM在原来的基础上增加一个盒子E(改进后的系统对应单速双桶模式,盒子E对应单速双桶中的E桶)。
srTCM指定的三个参数:
- CIR承诺信息速率:以承诺的每秒字节数据来衡量,单位:Kbps。
- BC承诺突发尺寸:单位为 bit,表示C桶的容量,即C桶瞬间能够通过的承诺突发流量。用来定义在部分流量速率超过CIR之前的最大突发流量尺寸,承诺突发尺寸必须不小于报文的最大长度;
- BE超额突发尺寸,单位为 bit,表示E桶的容量,即P桶瞬间能够通过的峰值突发流量, 用来定义每次突发所允许的最大的流量尺寸;
如何理解增加了一个令牌桶,前面的景区一小时1000张票在运行中出现一个问题,在一天中各时间段时间里,游客数量不等,在清早10点到下午2时后时间段里,游客人数最多,按原来的做法会成大量的游客放弃游玩,这时景区想到一个办法,在安全的条件下适当增加一部分游客,在原来票箱的基础上再增加一个的票箱,原票箱称为C箱、增加的一个称为E箱。当C箱的票为一小时内安全人数的1000张票出完后,使用E箱的票,E箱票数最多能超出人数1200张票。
在单速双桶模式中,系统按照CIR速率向桶中投放令牌。 初始状态下,C桶和E桶都是满的。换成报文(报文大小为B)就是出现三种情形
- 如果B ≤ Tc,报文被标记为绿色(承诺突发内),且Tc减少B,Tc=Tc-B。
- 如果Tc < B ≤ Te,报文被标记为黄色(超额突发内),且Te减少B,Tc不减少,Te=Te-B。
- 如果B > Te,报文被标记为红色,且Tc和Te都不减少。
当报文到来后,直接与桶中的令牌数相比较,如果有足够的令牌就转发(通常用一个令牌关联一个比特的转发权限),如果没有足够的令牌则丢弃或缓存。
如何理解,就是B相当于游客人数,当游客人数≤C箱内票数时,就从C箱内取出门票,卖一张少张。当安全人数1000<游客人数<最多能超出人数1200时,就卖E箱的票,卖完了,就不能放人进去了,这里减少的票是E箱的票,C箱的票没有动。如果来的人数超过了1200安全人数,那就不能卖了,等下一个小时再卖票。
1.6.1.4.2 三色双速双令牌桶算法
trTCM双速双桶采用RFC2698定义的双速三色标记器trTCM(A Two Rate Three Color Marker)算法对流量进行测评,根据评估结果为报文打颜色标记,即绿色、黄色和红色,关注速率上的突发。
4种流量参数:
- CIR(Committed Information Rate)承诺信息速率:以表示向C桶中投放令牌的速率,即C桶允许传输或转发报文的平均速率;低阈值。
- PIR(Peak information rate)峰值信息速率:峰值信息速率,单位是 bit/s,表示向P桶中投放令牌的速率,即P桶允许传输或转发报文的峰值速率,PIR大于CIR;高阈值。EIR(过量信息率)=PIR-CIR
- BC(Burst Capacity)承诺突发尺寸:单位为 bit,表示C桶的容量,即C桶瞬间能够通过的承诺突发流量。用来定义在部分流量速率超过CIR之前的最大突发流量尺寸,承诺突发尺寸必须不小于报文的最大长度;
- BE(Excess Burst)超额突发尺寸,单位为 bit,表示P桶的容量,即P桶瞬间能够通过的峰值突发流量, 用来定义每次突发所允许的最大的流量尺寸。
前面景区门票的采用两个票箱来解决人数上控制的问题,现在问题又来了,大家都集中在一个窗口买票,排队时间太长,游客们报怨。于是又改进方法,先网上购票,然后凭票领取通行证,解决速度问题。P桶是网上的售出的门票,C桶是通行证的票箱。PIR是网上售票速度必大于CIR领取通行证的速度。
采用以下办法就会出现几种情况:
①、网上要购票人数远多于网上售出门票的数量,这时暂不出票,等下一小时,这段时间内网上门票和景区通行证都没有减少;
②、当网上购票人数少于网上门票的数量时,开始网上售票,这时又分两种情况:
- 有门票的游客数量多于通行证数量时,这时如果再领取通行证会拖慢进入景区的时间,为了方便就让游客排队直接进入景区。这时减少的只是网上门票,而通行证没有减少;
- 有门票的游客数量少于通行证数量时,这种是景区的正常情况,这时游客用门票换取通行证进入,门票减少了通行证也减少了。
换成报文就是初始状态时C桶和P桶都是满的。
往C桶和P桶分别以CIR和PIR的速率填充令牌。因这两个令牌桶是相互独立的,当其中一个桶被填满时,这个桶新产生的令牌将会被丢弃,而另一个桶则不受影响,继续填充令牌。
在对到达报文(假设数据包大小为B)进行评估时,遵循以下规则:
- 如果报文长度超过P桶中的令牌数Tp,则报文被标记为红色,且Tc和Tp保持 不变;
- 如果报文长度不超过P桶中的令牌数 Tp 但超过C桶中的令牌数 Tc,则报文被标记为黄色,且 Tp=Tp-B;
- 如果报文长度不超过C桶中的令牌数Tc,报文被标记为绿色,且 Tp=Tp-B, Tc=Tc-B。
1.6.1.5 令牌桶工作过程
包括3个阶段:产生令牌、消耗令牌和判断数据包是否通过。
①、产生令牌:周期性的以速率CIR/EIR向令牌桶中增加令牌,桶中的令牌不断增多。如果桶中令牌数已到达CBS/EBS,则丢弃多余令牌。
②、消耗令牌:输入数据包会消耗桶中的令牌。在网络传输中,数据包的大小通常不一致。大的数据包相较于小的数据包消耗的令牌要多。
③、判断是否通过:输入数据包经过令牌桶后的结果包括输出的数据包和丢弃的数据包。当桶中的令牌数量可以满足数据包对令牌的需求,则将数据包输出,否则将其丢弃。
1.6.1.6 三种令牌桶的使用场景
①单速率双色单桶:
不允许流量突发;
双色:取到令牌被染为绿色,未取到染为红色,默认放行绿色;
缺点:上一秒令牌未用完,则下一秒将会被清空。
只使用了一个令牌桶,CIR承诺信息速率,CBS表示C桶瞬间能够通过的承诺突发流量。以CIR速率向C桶投放令牌,C桶满时令牌溢出。
②单速率三色双桶:
三色:从第一个桶取到令牌染为绿色,从第二个桶取到令牌染为黄色,未取到染为红色,红色不允许通过;
双桶:有两个令牌桶。可以有积存机制,解决超发问题。
C桶满时令牌投放到E桶。C桶和E桶都不满时,只向C桶投放令牌。允许报文尺寸的突发。先使用C桶中的令牌,C桶中令牌数量不够时,使用E桶中的令牌。双桶可以有效的转发突发的流量。双桶单速率只是有效的解决了一次单位时间内的突发流量,如果出现每时每刻都是突发流量,会被丢弃。
③双速率三色双桶:
双速率:两个桶各自拥有一个速率,一个容量为pir,一个为cir;
先查看流量是否超过cir,未超过,从cir中取;超过cir,从pir中取。若超过pir,则会被丢弃;
管制—限速,令牌桶做令牌发放速率限制,从而限制发送速度;
整形—红色流量进行缓存,等待下次获得令牌通过,未被丢弃。一般适用于高带宽向低带宽发送数据
以CIR速率向C桶投放令牌,以PIR速率向P桶中投放令牌。两个桶相对独立。桶中令牌满时令牌溢出。允许报文速率的突发。C桶和P桶中的令牌足够时,两个桶中的令牌都使用。C桶中令牌不够时,只使用P桶中的令牌。当某个流量以高于CIR速率进入,这时为了防止此流量被丢掉,采用双桶双速率的模式保证此连续的突发流量通过。
1.6.1.7 令牌桶原理应用之接口限速
单速单桶:设备入方向基于接口,实现接口限速;设备出方向基于接口,实现接口限速。
双速双桶:设备入方向基于流,实现流量监管;设备出方向基于队列,实现流量整形。
1.6.2 流量整形
只能出方向配置;
1.6.2.1 GTS
通用流量整形,任何接口和子接口部署;整形Queue必须是WFQ;可以使用任何软件队列
整形(shapping)Queue:流量整形也有自己的队列和软件Q的队列是两种队列。
interface FastEthernet 0/0 traffice-shape rate 1000000 //默认对接口所有流量都会整形;默认为双色单速双桶
默认:BC=TC*CIR 1000000bits * 0.025 = 25000bits
interface FastEthernet 0/0 traffice-shape rate 1000000 20000 0 1500 //1000000:cir,20000:BC,0:BE,1000:HQO(参考FBWFQ)
access-list 100 permit udp host 1.1.1.1 host 2.2.2.2 eq domain interface FastEthernet0 traffic-shape group 100 100000 1000 1000 100 //针对acl 100的流量进行流量整形
1.6.2.2 FRTS
由于GTS不支持PVC虚链路,在此引出FRTS。只能在帧中继接口上启用,并且要求接口软件Queue必须是FIFO;
FRTS默认的Shapping-Queue是WFQ,并且可以任意修改。
interface Serial1/1 no fair-queue frame-relay traffice-shaping //启用FRTS
默认配置如下:
通过命令对所有VC的流量都得到整形:
map-class frame-relay FRGTS frame-relay tc 100 frame-relay be in 56000 frame-relay be out 0 frame-relay traffic-rate 64000 64000 CIR PIR interface Serial1/1 no fair-queue frame-relay traffice-shaping frame-relay class FRTS
针对某个VC进行流量整形:
map-class frame-relay FRGTS frame-relay tc 100 frame-relay be in 56000 frame-relay be out 0 frame-relay traffic-rate 64000 64000 interface Serial1/1 no fair-queue frame-relay traffice-shaping frame-rely interface-dlci 102 class FRTS
修改VC的整形Queue队列:
map-class frame-relay FRGTS frame-relay tc 100 frame-relay be in 56000 frame-relay be out 0 frame-relay traffic-rate 64000 64000 frame-relay custom-queue-list 1 interface Serial1/1 no fair-queue frame-relay traffice-shaping frame-rely interface-dlci 102 class FRTS
1.6.2.2 CBTS
Shapping-Queue为WFQ并且无法改变,可以在任何接口启用,并且启用的时候不要求接口队列用特殊队列。
access-list 101 permit ip host 1.1.1.1 host 2.2.2.2 access-list 102 permit ip host 1.1.1.1 host 3.3.3.3 ! class-map match-all R1R3 match access-group 102 class-map match-all R1R2 match access-group 101 ! policy-map CBTS class R1R2 shape average 64000 6400 0 shape adaptive 32000 //可选参数 shape fecn-adapt //可选参数 class R1R3 shape average 70000 7000 0 shape adaptive 35000 //可选参数 shape fecn-adapt //可选参数 !
Router# show policy-map interface FastEthernet0 Service-policy output: CBTS Class-map: R1R2 (match-all) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: access-group 101 Traffic Shaping Target/Average Byte Sustain Excess Interval Increment Rate Limit bits/int bits/int (ms) (bytes) 64000/64000 800 6400 0 100 800 Adapt Queue Packets Bytes Packets Bytes Shaping Active Depth Delayed Delayed Active - 0 0 0 0 0 no Class-map: R1R3 (match-all) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: access-group 102 Traffic Shaping Target/Average Byte Sustain Excess Interval Increment Rate Limit bits/int bits/int (ms) (bytes) 70000/70000 875 7000 0 100 875 Adapt Queue Packets Bytes Packets Bytes Shaping Active Depth Delayed Delayed Active - 0 0 0 0 0 no Class-map: class-default (match-any) 0 packets, 0 bytes 5 minute offered rate 0 bps, drop rate 0 bps Match: any
1.6.3 流量管制
1.6.3.1 CAR(Input和Output)
interface FastEthernet0 rate-limit input access-group 100 1000000 12500 12500 conform-action transmit exceed-action drop
conform-action:绿色和黄色流量动作,transmit
exceed-action:红色流量 drop
1.6.3.2 CBPolicing
access-list 100 permit udp host 1.1.1.1 host 2.2.2.2 eq domain ! class-map match-all CAR match access-group 100 ! policy-map CBPolicing class CAR police cir 100000 bc 125000 be 125000 conform-action transmit exceed-action drop ! interface FastEthernet0 service-policy output CBPolicing !
- conform-action:绿色流量动作
- exceed-action:黄色流量动作
- violate-action:红色流量动作
1.7 QOS处理顺序
原则上在业务接入端口入方向实施流分类/标记、流量监管;业务接入端口出方向实施流量整形(如果业务接入端口接入多个不同等级的业务,则业务接入端口出方向还要实施 队列调度和丢包策略);网络侧端口出方向实施拥塞管理和拥塞避免。