QoS的一个重要作用就是对port流量进行监管,也就是限制port流量。但QoS是怎样做到这点的呢?那就是QoS的令牌桶机制了。以下是在笔者刚刚出版的Cisco/H3C交换机高级配置与管理技术手冊》一书中,经过笔者充分理解后的全面诠释,大家看一下能否够理解。http://book.360buy.com/10959197.html

6.3.3 QoS令牌桶工作原理

QoS中的流量监管(Traffic Policing)就是对流量进行控制,通过监督进入网络port的流量速率,对超出部分的流量进行“惩处”(这个惩处能够是丢弃、也但是延迟发送),使进入port的流量被限制在一个合理的范围之内。比如能够限制HTTP报文不能占用超过50%的网络带宽,否则QoS流量监管功能能够选择丢弃报文,或又一次配置报文的优先级。

QoS流量监管功能是採用令牌桶(Token-Bucket)机制进行的。这里的“令牌桶”是指网络设备的内部存储池,而“令牌”则是指以给定速率填充令牌桶的虚拟信息包。能够这么简单理解,“令牌桶”能够理解为一个水桶,而“令牌”则能够理解为通过一根水管流到水桶中的水。

交换机在接收每一个帧时都将加入一个令牌到令牌桶中,但这个令牌桶底部有一个孔,不断地按你指定作为平均通信速率(单位为b/s)的速度领出令牌(也就是从桶中删除令牌的意思)。相当于一个水桶的上边连接一根进水的水管,而下边又连接一根连接到用水的地方的出水管。在每次向令牌桶中加入新的令牌包时,交换机都会检查令牌桶中是否有足够容量(也就是在要向桶水加水前,先要检查是桶内否已满了),假设没有足够的空间,包将被标记为不符规定的包,这时在包上将发生指定监管器中规定的行为(丢弃或标记),就相当于假设当前水桶满了,但上边水管的水还是来了,这时要么就是让这些水白白流到桶外,要么把这些水用其他容器先装起来,等水桶中不再满水时再倒进去,供用户使用。整个令牌桶的基本工作原理能够用图6-10来表示。

图6-10 令牌桶的基本工作作原理

令牌桶填满的时间长短是由令牌桶深度(也就是容量,单位为bit,相似于水桶的的深度)、令牌漏出速率(相似桶下边接的水管的水速)和超过平均速率的突发通信流(相似于上桶上边水管突发的急速水流)持续的时间三个方面共同决定的。 令牌桶的大小利用突发时长上限乘以点对点传输时的帧数限制得出(也就相似突发水流持续的时间*突发水流的流速)。假设突发时间比較短,令牌桶不会溢出,在通信流上不会发生行为。但是,假设突发时间比較长,而且速率比較高,令牌桶将溢出,这时将对突发过程中的帧採取相应的流监管策略行为(也就是在水桶满水后对溢出的水的处理方法)。

在令牌桶处理包的行为方面,RFC中定义了两种令牌桶算法——单速率三色标记(single rate threecolor marker,srTCM)算法和双速率三色标记(two rate threecolor marker,trTCM)算法,其评估结果都是为包打上红、黄、绿三色标记(所以称为“三色标记”,有关这些颜色的详细含义将在详细算法中介绍)。QoS会依据包的颜色,设置包的丢弃优先级,当中单速率三色标记比較关心包尺寸的突发,而双速率三色标记则关注速率上的突发,两种算法都可工作于色盲模式和非色盲模式(详细在以下介绍)。以下分别介绍这两种算法原理。

  1. 单速率三色标记算法原理

这里首先要理解“单速率”是什么意思,那就是算法中的两个令牌桶有同样的承诺信息速率(CIR),也就是具有同样平均訪问速率。这两个令牌桶各自是正常使用的令牌桶(也就是以下将要说到的C桶)和超出令牌桶容量的突发令牌桶(也就是以下将要说到的E桶),能够理解为两个水桶,一个是正常使用的水桶,还有一个是用来当正常使用的水桶满后装多余的水的水桶。以下详细解释单速率三色标记算法原理。

单速率三色标记(srTCM)算法关注的是数据包的突发尺寸,数据包的色标记评估依据以下3个參数:承诺信息速率(CommittedInformation Rate,CIR)、承诺突发尺寸(Committed BurstSize,CBS)和超额突发尺寸(Excess Burst Size,EBS)。CIR是指向令牌桶中填充令牌的平均速率,即同意的通信流平均速度;CBS是指每次突发所同意的最大的流量尺寸,也相当于同意的最大取令牌的速率,等于桶的容量(最大时就是一个包就能够所有领取桶中的所有令牌)。EBS是指每次突发同意超出CBS的最大流量尺寸。CBS和EBS的单位都是bit(位)。

单速率三色机制採用双桶结构:C桶和E桶(之所以用这两个字母来表示,为的就是与前面说的CBS和EBS两种速率的头个字母一致,便于描写叙述),且两个令牌桶的CIR一样。C令牌桶中不论什么未用的令牌都被放入E令牌桶中,用做以后暂时超过CIR的突发流量的令牌;另外,当C令牌桶满时,超出的令牌也都会放在E令牌桶中。

Tc和Te分别表示C令牌桶和E令牌桶中的令牌数,也就是桶中当前的容量(单位也为bit),两桶的总容量分别为CBS和EBS,也就是相应前面介绍的承诺突发尺寸和超额突发尺寸,最初它们都是满的,即Tc和Te初始值各自等于CBS和EBS。正常情况下,不会使用第二个令牌桶(也就是E桶),而是把不论什么CBS(也就是C桶)中未使用的令牌都放入E桶中,仅仅有当C令牌桶满后,后面来的令牌才放到E令牌桶中,为可能出现的突发数据提供信用令牌(也就是经过同意的令牌)。

在这样的单速率三色标记算法中,两个令牌桶中令牌的加入是依照同样的CIR速率进行的。即每隔1/CIR时间加入一个令牌。加入的顺序是先加入C桶再加入E桶,当两个令牌桶中的令牌都满时,再产生的令牌就会被丢弃。至于在发送数据包时,令牌的使用IEEE又定义了三种颜色(分别为红色、黄色和绿色)以及两种模式:色盲(color-blind)模式和感色(color-aware)模式,默觉得色盲模式。三种颜色的功能与我们日常生活中的交通指示灯中的三种颜色相似,红色表示违规数据,直接丢弃,黄色表示数据包尽管违法,但不直接丢弃,而是延迟发送,绿争为合法数据包,直接发送。

在色盲(color-blind)模式下是假设包都是没有经过“着色”处理的(不辨别包中原来标记的颜色),是依据包长度来确定包被标记的颜色。现假设到达的包长度为B(单位为bit)。若包长度B小于C桶中的令牌数Tc(也就是C桶中的令牌数足够该包发送所需),则包被标记为绿色,表示包符合要求,包发送后C桶中的令牌数Tc降低B。假设Tc<B<Te(也就是包长度大于C桶中的令牌数,而小于E桶中的令牌数),则标记为黄色,则从E桶中取出所需令牌,E桶中的令牌数Te降低B;若B >Te,标记为红色,表示是违反规则的包,直接丢弃,两令牌桶中的总令牌数都不降低。

在感色(color-aware)模式下是假设包在此之前已经过“着色”处理(会辨别包中原来标记的颜色),假设包已被标记为绿色,或包长度B<Tc(注意仅仅要满足当中一个条件就可以,下同),则包被标记为绿色,C桶中的令牌数Tc值随之也相应降低B;假设包已被标记为黄色,或Tc<B<Te,则包被标记为黄色,同一时候E桶中的令牌数Te也随之相应降低B;假设包已被标记为红色,或B >Te,则包被标记为红色,Tc和Te都不降低。

   2. 双速率三色算法

这里同样首先要稿清楚“双速率”是什么意思,它是指该算法中两个令牌桶中的CIR速率不同,存在两个令牌填充速率。

IETF的双速率三色标记(trTCM)算法主要是依据四种流量參数来评估:CIR、CBS、峰值信息速率(Peak InformationRate,PIR),峰值突发尺寸(Peak Burst Size,PBS)。CIR和CBS參数与单速率三色算法中的含义同样,PIR就是同意的最大突发信息传输速率,当然它的值肯定不会小于CIR的;PBS是同意的最大突发信息尺寸,它的值也不会小于CBS。

与单速率三色标记算法不同,双速率三色标记算法中的两个令牌桶是C桶和P桶(不是C桶和E桶),但它们的令牌填充速率是不同的,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS(之所以用C桶和P桶表示也是基于方便描写叙述,由于表示不同速率的參数与相应桶的容量參数同样,第一个字母相应为C,或者P)。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值各自等于CBS和PBS。

双速率三色标记算法关注的是速率的突发,但它不像单速率三色标记算法那样把第一个桶中未使用的令牌放到第二个桶中,而是使用两个独立的令牌桶。第一个令牌桶为PIR,大小为PBS,第二个令牌桶为CIR,大小为CBS。数据的測量是先比較PIR,然后再比較CIR。也就是在双速率三色标记中,首先推断的是数据发送速率是否符合规定的突发要求,而不是正常情况下的色标方法。

双速率三色标记算法也有色盲模式和感色模式两种。

在色盲模式下,当包速率大于PIR,此时未超过Tp+Tc部分的包会分别从P桶和C桶中获取令牌,而且从P桶中获取令牌的部分包被标记为黄色,从C桶中获取令牌的部分包被标记为绿色,超过Tp+Tc部分无法得到令牌的包被标记为红色;当包速率小于PIR,而大于CIR时,包能够得到令牌,但超过Tc部分的包将从P桶中获取令牌,此时这部分包都被标记为黄色,而从C桶中获取令牌的包被标记为绿色;当包速率小于CIR时,包所需令牌数不会超过Tc,仅仅需从C桶中获取令牌,包被标记为绿色。

在感色模式下,假设包已被标记为红色,或者超过Tp+Tc部分无法得到令牌的包,被标记为红色;假设标记为黄色,或者超过Tc但未超过Tp部分包记为黄色;假设包被标记为绿,或者未超过Tc部分包,被标记为绿色。

【备注】刚刚出版上市的《Cisco/H3C交换机高级配置与管理技术手冊》与今年元月份上市的还有一本交换机手冊:Cisco/H3C交换机配置与管理全然手冊》(第二版)在内容上是全然不同,相互弥补,无缝对接的,眼下这两本书均已在当当、卓越和京东网上全面上架,而且火热销售中。

QoS令牌桶工作原理的更多相关文章

  1. 三.Go微服务--令牌桶实现原理

    1. 前言 在上一篇文章 Go微服务: 令牌桶 当中简单的介绍了令牌桶实现的原理,然后利用 /x/time/rate 这个库 10 行代码写了一个基于 ip 的 gin 限流中间件,那这个功能是怎么实 ...

  2. RateLimiter令牌桶算法

    限流,是服务或者应用对自身保护的一种手段,通过限制或者拒绝调用方的流量,来保证自身的负载. 常用的限流算法有两种:漏桶算法和令牌桶算法 漏桶算法 思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度 ...

  3. coding++:高并发解决方案限流技术-使用RateLimiter实现令牌桶限流-Demo

    RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率. 通常可应用于抢购限流防止冲垮系统:限制某接口.服务单位时 ...

  4. 高并发解决方案限流技术-----使用RateLimiter实现令牌桶限流

    1,RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率.通常可应用于抢购限流防止冲垮系统:限制某接口.服务单位 ...

  5. 使用Redis实现令牌桶算法

    在限流算法中有一种令牌桶算法,该算法可以应对短暂的突发流量,这对于现实环境中流量不怎么均匀的情况特别有用,不会频繁的触发限流,对调用方比较友好. 例如,当前限制10qps,大多数情况下不会超过此数量, ...

  6. 令牌桶在数据通信QoS流量监管中的应用

    令牌桶(Tocken Bucket,以下简称TB)在流量监管(以下简称CAR)功能中完成对流量进行限速的作用.流量监管主要是应用与网络边缘,从而保证核心设备的正常数据处理. 在流量监管的处理过程中,首 ...

  7. CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看这里!—-揭秘令牌桶

    概述 春暖花开的时候,大家都开着汽车外出旅游欣赏美丽的风景,却被堵在高速公路上,你是否为此感到痛苦?但如果有一种机制可以评估高速公路上的车流量.控制车流情况,确保进入高速公路的汽车都能在路上安全畅行, ...

  8. CIR,CBS,EBS,PIR,PBS 名词解释 令牌桶应用

    为了达到上述目的,我们需要对进入网络的流量进行监督,实现CAR(Committed Access Rate). CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞. CIR( ...

  9. Go 分布式令牌桶限流 + 兜底策略

    上篇文章提到固定时间窗口限流无法处理突然请求洪峰情况,本文讲述的令牌桶线路算法则可以比较好的处理此场景. 工作原理 单位时间按照一定速率匀速的生产 token 放入桶内,直到达到桶容量上限. 处理请求 ...

随机推荐

  1. hdu 3832 Earth Hour (最短路变形)

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Tota ...

  2. object-c编程tips-timer

    object-c定时器 object-c定时器会自己主动retain当前的使用者,假设不注意调用invalidate,则非常easy引起循环引用导致内存泄露.以下的思路提供了一套还算可行的解决方式. ...

  3. 利用objc的runtime来定位次线程中unrecognized selector sent to instance的问题

    昨天遇到一个仅仅有一行错误信息的问题: -[NSNull objectForKey:]: unrecognized selector sent to instance 0x537e068 因为这个问题 ...

  4. jquery关于表格隐藏和显示问题

    1. 关于指定表格指定列隐藏显示 $(":checkbox[name*=month]").each(function(){ if(!$(this).attr("check ...

  5. delphi 发送消息控制滚动条

    1.Perform 函数 DBGrid1.Perform(WM_VSCROLL,SB_PAGEDOWN,0);  //控制滚动条,向后翻页 DBGrid1.Perform(WM_VSCROLL,SB_ ...

  6. Learning Cocos2d-x for WP8(3)——文字篇

    原文:Learning Cocos2d-x for WP8(3)--文字篇 C#兄弟篇Learning Cocos2d-x for XNA(3)——文字篇 文字,是人类文明的象征. 文字显示,可用字符 ...

  7. Java文件压缩分割(待)

    http://blog.csdn.net/ycg01/article/details/1366648

  8. 飘逸的python - __new__、__init__、__call__傻傻分不清

    __new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...

  9. 蓝缘管理系统第二个版本号开源了。springMVC+springSecurity3.x+Mybaits3.x 系统

    蓝缘管理系统第二个版本号开源了 继于 http://blog.csdn.net/mmm333zzz/article/details/16863543 版本号一.版本号二 对springMVC+spri ...

  10. java环境变量设置--编写一年java,竟不会配变量了

    java环境变量设置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Ja ...