前言
学习QOS之前,首先肯定要了解为什么需要QOS?本人在大学时代第一次学
习QOS的时候,马马虎虎的就看了一本《端到端QOS网络设计》这本书。一直到
现在第二次学习QOS的时候,一直认为QOS就是限速。每次一想到网络中需要做
限速的时候,脑子里就会想到是QOS。由于本人要开始备考CCIE,现在重新学习
了QOS,对QOS有了一个重新的认知。所以整理出一份自己的文档资料,供日后
复习,同时也给各位兄弟一点学习的参考。
一言难尽QOS,在本笔记,会分别按照一个模块一个模块的分析与学习。其
实QOS不在乎也就那几个队列、令牌桶算法、拥塞避免、拥塞管理、分类与标志、
整形与管制。基本理论也就这么多。
一、QOS设计概述
本章内容只是简介一下,在设计QOS的时候需要注意什么,主要按照带宽、
延时、抖动、丢包等几个方向来说。
A.带宽,当需要給数据做QOS,看数据的类型,应该要有足够的带宽,又或
者当发生拥塞时,这种类型的数据应该得到保证的带宽进行传输。一般
语音流量都标记为DSCPEF(快速转发)。一般我们也可以通过压缩来减
缓这个问题,但是需要注意的是,当你压缩的时候,又会产生了压缩的
时延。所以设计QOS的时候,问题要搞清楚。
B.延时,网络中的数据包,从源一直到达目的地,或多或少都会产生延迟
的。而延时又分为多种类型:
1.串行化延时:串行化延时定义了物理接口对数据包中的比特进行编码
的时间,若链路速度较快,将比物编码到链路上的速度就比较快,若
链路速度慢,就会花费更多的时间来将比特编码到链路上。換个说法
就是说:如果传输一些比较大的数据包时,对比于传输一些小的数据
包时,那肯定是传输小的数据包更快嘛。也就是说,链路带宽越大,
那传输就越快,时延就更低啦。
2.传播延时:这个也比较容易理解,举个说法就是:坐汽车从上海到北
京和坐飞机从上海到北京的时间哪个更快,这是很明显的,这使用的
时间就是延时。至于传播延时的多少,就取决于路程的长短以及传输
的介质快慢了。
3.队列延时:当数据包等待设备先发送到其它数据包的时间,粗鲁点的
说法就是排队的时间。
4.转发延时:从路由器完全接收到一个数据包,到将它放到输出队列之
间的处理时间。
5.整形延时:流量整形会带来一定的延时,因为比起未使用流量整形的
情况,使用流量整形会合服务队列的速度下降,这也是一种延时。
6.网络延时:这么说吧,在帧中继的那朵云里,多少都会有一定的延时,
而不是我们看不见了,就不会有延时的。
我们可以通过链路分片和交叉,优化网络中的延时。也可以使用压缩来,但
是也会增加一定的压缩延时。
C.抖动,当出现连续的数据包经历了不同的延时,这就是所谓的抖动。如
果抖动过于大的话,对于一些实时流量会有影响的。
D.丢包,如果是由于设备或其它的一些原因造成的丢包,QOS是无法解决
的。但是如果是因为由网络拥塞时,则可以通过队列技术来让一些重要
的数据不丢包。
二、QOS模型
QOS总共有三个模型,需要注意的是,这三个模型并不是说是QOS的技术,
而说当设计或使用QOS的时候,可以根据这三个模型来参考。
2.1Best-EffortServe-尽力而为模型
所谓的尽力而为模型,也就是说所有的网络设备都按照自己的能力进行转发
数据。自己的传输速率是多少就传输多少。也就是说,无论是啥数据都不会受到
保护的,不论这个流量是来自于语音又或者是来自于快播,谁先来就传输谁的先。
延时也无法得知。不过也很明显可以理解,既然是这样的QOS,可以理解为没有
使用任何的QOS。默认网络中都是这尽力而为模型。
2.2IntegratedService-综合服务模型
综合服务模型,当A需要与B进行通信的时候,无论这中间相隔了多少设备,
在通信之前,必须先要向网络中申请一定的带宽,当网络同意了之后,通信便可
正常的通信。換个说法就是:如果A与B要进行语音聊天,最大的带宽需要1M
带宽。那么在语音通信之前就向网络中申请1M的带宽资源。所以说,在这种模
型中,是不用担心延时问题。但也有其缺点,申请带宽的时候需要时间,而且如
果应用很多的时候,或者网络复杂的情况下,每次都这样申请带宽,不太合实际,
所以在一般的网络中是不会使用这个工具。比如在一些核心网络中也许可以用,
比如MPLS-TE流量工程中。
如果有些应用使用了综合服务模型,而有些不使用,则不使用的应用都会根
据尽力而为模型进行传输。在申请带宽时,所用的协议就是RSVP。这个协议在
TE中是重点的。也正因为这些,一般在使用QOS的时候不会使用RSVP,也就是
说不会使用综合模型。
2.3Diffrv-差分服务模型
差分模型,在有些资料中也称为区分模型。在实施了差分模型的QOS网络中,
都是把网络中的不同数据根据不同的类型来进行传输。这个模型,可以把不同的
数据分配不同的优先级,做不同的标志。当网络发生拥塞的时候,QOS就可以根
据不同的优先级做不同的转发策略。比如优先传输高优先级的,丢弃低优先级的。
至于优先级的定义,可根据网络中数据的重要性来划分。一般在网络中实施QOS
的时候,都是采用差分服务模型。
在差分服务模型中,数据从源到目的地,所有设备做出的区分服务QOS行为
都称为:PHB(每跳行为)。所谓的PHB,也就是差分服务模型里,每节点之间做
的QOS动作。而且在QOS网络里,都是端到端QOS的。而在集成服务模型里,无
论相隔多少设备,始终都全是端到端QOS。而如果在差分模型里,需要从源到目
的地的路径中所有设备都为某相同的差分服务行为,那么才会是端到端QOS。
三、DSCP
DSCP是一个非常难理解的玩意。其实不难,一开始接触的时候,很容易就
掉进坑了。DSCP中文原意为:差分服务代码点。在IP数据头的头部里,共有6
个比特。也就是可以划分为64个类。在DSCP出现之前,是只出现有3个比特的
IP优先级的,也就是说,当时分类数据最多也只能分为8类而已。而最近的
RFC2474定义了一个新的分类值DSCP,因为有6个比特,所以分类可以更多更详
细了。
DSCP六个比特:
101110
DSCP分为有四种PHB行为:
A.DefualtPHB(FIFO,taildrop),也就是说六个比特全部为0。也就是说,
这个数据包是没有QOS需求的。
B.EF,快速转发,固定值为101110。第一是,最小的延时。第二是,保证带
宽。第三是,带宽的管制,也就是甭管接口多么的拥塞,这些流量还是会
得到转发的。很明显这很合适于一些语音的流量。
EF也定义了两种QOS行为,一种是使用列队规则来最小化数据在列队中的
等等待时间,以此减少延迟。第二就是限速,如果超出了的话就丢弃数据
包。所以当设计的时候需要先定义好某些流量需要多大的流量,这也体现
出了給某些流量特定的带宽,可以保证某些流量在这个带宽范围内。
C.AF,确保转发。在这六个比特的前三位比特定义了四个值:001、010、011、
100。也就是:AF1、AF2、AF3、AF4。由于最后一个比特都为0,所以最后
三个比特还剩下两个比特(倒数第二和第三)来做组合,这样就可以給AF
分类更细。那就分别为1、2、3。也就是说每个AF可以组合3个。例如:
AF11、AF12、AF13。共12个组合。
在AF中的PHB行为中,有两个QOS独特的功能,一个是列队:也就是路由
器会把数据分为四个类,一个类就一个列队,而且会保证最少可使用多少带宽,
由此也可以看得出,AF是会保证带宽的。第二个PBH行为是:队列如果排满了,
会进行尾丢弃,也就是拥塞避免。
AF也不代表一定会保证带宽的,只不过当发生拥塞的时候,首先丢弃那些
不重要的流量。需要知道的是,并不是说AF的值越大就是越优先的。这与之前
的TOS有不同之处。如下表:
丢弃率低丢弃率中丢弃率高
1AF11AF12AF13
2AF21AF22AF23
3AF31AF32AF33
4AF41F42AF43
从上表可以看出,并不是值越大就是越优先的。在二进制的DSCP里,前三
个比特表示队列类别,之后的两个比特表示丢包的优先级。
注意:AF的PHB是为每个类别的流量提供足够的带宽并尽量不丢弃,当拥
塞时,希望避免丢弃更多的重要流量。
D.Class-Selector(IPPrecedence)PHB。这个定义的意思就是,在DSCP值里
六个比特,后面三位都为0,而前面3位可变化。也就是共8种分类。需
要注意的,这8位可以与一些数据中的ip优先级相匹配的。可以这么说,
如果有一台设备是不支持DCSP的,只能根据IP优先级来分类的。当这个
数据传到一个DSCP分类的设备中时,DSCP的设备则认为这个数据的DSCP
值为优先级三个比特再加上三个比特为纯0。比如:当有一个数据为101
优先级5的传过来,则认为是101000的DSCP值。这个也是用来兼容老的
IP优先级,后三个比特都为0.
这个的PHB行为:值越大则转发的延时越小,7的延时最小,0的延时最大。
由上可看出,虽然是可以划分为64组分类,但是RFC只定义了22种分类。
这也是为什么说DSCP最后一位都为0的原因了。
四、令牌桶算法
令牌桶算法在QOS是比较重要的一个知识点,为什么需要用令牌桶算法呢?
首先我们从流量限速来入手。比如,我給某个用户限速为500K,但这用户不厚
道,天天用快播看电影。每次都是需要800K的速度的。然而QOS是怎么給这家
伙限速的呢?这就需要到我们的令牌桶算法来衡量了。需要注意的是,并不是说
我们用800减去500,就是超出了300K的。衡量QOS流量的算法就是令牌桶算
法,接下来咱们和令牌桶算法发生关系并互相深入了解吧。
当我们需要衡量网络中流量是否超标了,我们就通过令牌桶来查看,那么是
如何工作的呢?首先定义一个令牌桶假如为1000,也就是说这个令牌桶里有
1000个令牌,一个令牌代表为一比特数据,也可以认为每秒可以传输1000个比
特数据。当有一个比特数据需要传输的时候,就会往令牌桶里拿一个令牌,如果
超出了1000之后,就会做相应的动作,比如丢弃数据包等。也就是说,如果令
牌桶中在这一秒中1000个令牌都用完了,那么就认为超速了。既然这样,那么
我们就可以通过控制每秒往令牌桶里放入多少个令牌来控制的流量的传输速度。
通过我们用户的传输速率被称为CIR(信息承诺速率)。
也就是说,每秒往桶里放多少令牌就代表用户的传输速率,而这个速率就是
我们所说的CIR。但是,并不是说一次就能放入1000,也许这个桶不够大呢?假
如每次令牌桶只能放500,而CIR为1000,而每次放令牌的数量就是
BC(burst-size突发大小),也就是BC等于500。
还有单位就是TC,就是加令牌的时间间隔,这个比较好理解。正如上面所
说,假如CIR为1000,而BC值为500,那么就是BC/CIR=0.5秒。如果BC为200,
那么TC就等于0.2秒。
CIR信息承诺速率,用户的传输速率
BC每次加到令牌桶的令牌数量
TC加令牌的时间
4.1单速双色
在单速双色里,只会存在两种结果,要么就是小于或等于CIR,要么就是超
出CIR。在单速双色里,只会有一个令牌桶。单速双色的工作方式也比较简单理
解,如下:
第一秒,加入1000令牌,用了800,剩下200清空。
第二秒,加入1000令牌,用了900,剩下100清空。
第三秒,加入1000令牌,用了1000,用完。
从上面的结果可以看出:用户的速率就是,如果这一秒只用了800,那么下
一秒最多也只是只能用1000,剩下的200不会被积累到下一秒使用的,所以用
户的用户速率最大也只是CIR(或者说BC)。而如果超出了CIR的话,就会执行
相应的动作。
单速双色,有些资料也说单速单桶,就用一个令牌桶来做计量。在单速双色,
只会有两种动作。符合或超出动作。而且一个桶里,在这秒里令牌没用完,到下
一秒前,被会清空,也就是说,每一秒里,令牌桶都是BC的令牌。在符合动作
的情况下,可以是转发。在超出动作的时候,也可以转发,或者丢弃,又或者是
打上标记。这些动作都是可以进行配置的。
4.2单速三色
单速三色与上一节所讲的单速双色区别在于,单速三速使用两个令牌桶,而
第一个桶与单速双色是一样的,不同之处是在于第二个令牌桶。而且用户的速率
最大就是CIR加上第二个令牌桶的速率。而第二个令牌桶是没有CIR的,第二个
令牌桶所用的令牌数都是从第一个令牌桶剩下发过来的。而第二个桶最大的令牌
数量为BE(最大数量值),也就是不是每次第一个桶的剩下的令牌都可以放到第
二个桶,需要看BE值。例如:第一个桶CIR为1000,而第二个桶的BE值为200。
在上一秒,第一个桶用了500令牌,剩下500,只能有200放到第二个桶,那么
这一秒的传输速率将会是CIR+BE=700。需要注意的是,第二桶的令牌数,都是
在每一秒后会清空,就算没有用也会清空。
由此我们也可以看得出单速三色会有三种结果:第一种,小于或等于CIR。
第二种是大于CIR并且小于或等于CIR+BE。第三种是大于CIR+BE。需要注意的
是,不是每秒都会是CIR+BE传输的。只有上一秒有剩下的令牌的时候,下一秒
才会有可能CIR+BE传输。因为如果没有剩下的令牌的话,不然何来的BE?
在有些资料里,也称为单速双桶,顾名思义就是使用两个桶,或者说三种颜
色来标记流量,也可以说是三种动作。
4.3双速三色
双速三色是一个比较难于理解的算法,我学习的时候纠结了很久,希望通过
本章笔记可以加深我的记忆。双速意思就是两个桶,三色就是三种不同的动作。
在双速三色里,第一个桶与上两节的单速都是一样的,都是为CIR。而第二个桶
的话,设定值为CIR+BE的和称为PIR,也就是说,第二个桶总是比第一个桶大
的。而且用户的流量最大也只能传输为PIR。假如:CIR为1000,而BE为500,
那么最大也只能传输1500每秒。不用像双速双色算法里,如果要传输CIR+BE
的话,总是需要上一秒没用完CIR剩下令牌才可以。
重点理解:当用户流量通过这个接口的时候,首先会检查是否超过了PIR。
是,则会做出相应的动作,比如丢弃等。如果否,而且大于CIR并且小于等于
PIR,则也做出相应的动作,虽然可以不丢包,但是比如控制哪些先发送,或者
先进先出等。如果没有超出CIR的话,则是正常发送。可以看得出来,这与双速
三色是相反过来了。
如果还没有理解的话,可以看一下下面这个例子,也许就爽歪歪了,这个例
子是当初我请教高手的时候,給我解释的,看了之后瞬间明白。一般运营商卖不
保证服务的时候会用这种方式,比如说我卖个给10M但是不保证,但是我保证
你8M,这个10M就是PIR,8M是CIR,用户的流量如果小于8M是被保证的,运
营商无条件转发,当用户流量大于10M的时候丢弃超额的,如果在8M10M之间,
说明连路上可能还有剩余带宽,可以给你用,运营商有可能会做一些remark的
操作,调低优先级,延迟处理,也有可能不管先进先出,丢就丢了,毕竟是不
保证服务么。换句话说,CIR是最低保证,PIR是最大可能提供。
双速三色与单速三色,区别在于第二个桶,在单速三色里,第二个桶是从第
一个桶剩下的令牌的。而在双速三色里面,第二个的令牌是直接填充的,不需要
等待第一个桶有多余的令牌来填充。这也意味着,第二个不需要经过第一个桶非
活跃期来获得令牌。还有另一点不同的是,限速器如何看待令牌桶中的令牌数,
并以此判断数据包是否遵守超出或违反流量契约。但在处理行为的时候与之不
一样。
4.4总结
特性单速双色行为单速三色行为双速三色行为
第一个桶大小BCBCBC
第二个桶大小无BeBe
填充第一个桶
根据数据包的到达时
间按比例填充BC
根据数据包的到达
时间按比例填充BC
根据数据包的到达
时间按比例填充BC
填充第二个桶无由第一个桶剩下的
根据数据包的到达
时间按比例填充BC
遵守时的行为
数据包
移队数据包大小的令
牌数
数据包
一个桶里移队数据
包大小的令牌数
数据包
个桶里移队数据包
大小的令牌数
超出时的行为所有符合遵守的
如果不遵守,但第
二个桶>=数据包大
小,从第二个桶里
移除数据包大小的
令牌数
如果不遵守,但第二
个桶>=数据包大小,
从第二个桶里移除
数据包大小的令牌
数
违反时的行为无其它数据包其它数据包
五、分类与标记
5.1分类工具
差分服务模型,既然要做QOS服务,那么首先先要把流量分类,在之前学习
DSCP的时候,我们也了解了一下分类。当然,实际不仅仅只可以用IP优先级或
DSCP来做分类的,还有其它更多的分类方式。分类,只是把流量区分,并不会
修改数据。而如果是做标记的话,需要修改数据。
分类方式:
第1层参数:根据物理接口、子接口、PVC或端口等
第2层参数:根据MAC地址、COS、vlan标识、MPLS的EXP位(实验位)、
ATMR的信元丢弃优先级(CLP)、帧中继的DE位(丢弃位)。
第3层参数:根据IP优先级、DSCP和源、目的地址等。
第4层参数:根据TCP或UDP的源目的端口号。
第7层参数:根据应用程序签名以及分组头或有效负载中的统一资源定位符
(URL)。使用NBAR来分类,这是CISCO的技术。
5.2preclassify-预分类
预分类的场景一般是出现在在一些应用tunnel环境下。比如,R2和R4之
间建立了一条GRE隧道,中间相隔着R3。可是当R2和R4之间建立隧道的源地
址都为物理设备的环回口2.2.2.2和4.4.4.4。当R5去访问R1的时候,数据到
达了R4的时候,会添加一层GRE包头以及新的数据包头(4.4.4.4),目的为
2.2.2.2。因为源始数据都封装了。那么问题来了,如果此时需要做QOS的话,
会出现什么问题呢?如果把QOS应用在隧道口上,很明显,这是没有问题的,因
为隧道口上可以直接查看到源始数据,QOS是没有问题的。但是如果把QOS应用
在物理口的话,问题就来了,因为到物理口上的数据源IP地址为4.4.4.4,目
的IP地址为2.2.2.2。而源始数据被封装起来了。那么也就是说,里面的分类
是无法正常的进行了,还谈何做QOS?所以就需要到我们所讲的内容预分类了。
需要注意的是:如果是把QOS应用在物理口上,如果用IP优先级或者DSCP
来做分类的话,也同样是没有问题的,因为在GRE进行封装的时候,会把源始数
据的IP优先级或DSCP給copy到新的包头上。但是,如果用其它做分类的话,
比如用ACL匹配源地址的话,那肯定不行的,因为到了物理口上,源地址为
4.4.4.4了。肯定是不行的啦。所以通过QOS预分类的话,就可以做到了。
配置方法:
GRE隧道接口下:qospre-classify
L2TP或pppoe等拔号,则在配置模板接口下:
interfacevirtual-template1
qospre-classify
IPSECVPN配置,则在加密图下配置:
cryptomapVPN
qospre-classify
GREoverIPSEC下,则要在gre和加密图里都配置:
inttunnel2
qospre-classify
cryptomapVPN
qospre-classify
5.2标记
标记是指在数据链路层或网络层头部设置特定的比特,让其它设备上的QOS
工具能够根据这个标记的值来分类流量。
5.2.1IP头部QOS字段之优先级和DSCP
在QOS设计中,用得最多就是IP优先级和DSCP值了。因为IP优先级和DSCP
在端到端传输中是一直存在的。而且根据DSCP分类的话,可以做很多的PHB行
为。最主要的是,能在端到端QOS中使用。
5.2.2LANCOS(服务类)
COS服务类是二层网络里的一个字段。是以太网头部的3比特。只有当使用
802.1q或isl来封装链路时,以太网帧中才包含COS字段。一共也是有8个字
段,用法与IP优先级是一样的。需要注意的是,如果要标记COS的时候,链路
必须要封装成trunk链路,否则根本不存在COS字段。最主要的是,如果数据开
始经历了三层转发的时候,原始的LAN头部就会丢弃,也就是说COS字段就失去
了。
5.2.3其它标记字段
在帧中继和ATM网络中,通过使用一个比特的字段来标记数据帧或信元。以
此来实现二层的QOS。但是与之前说的IPP或DSCP等有不同的是,因为只有一
个比特,所以如果标记了的话,意思就是会优先丢弃此类流量,也就是说,具有
更高的丢弃优先级。換方之就是,当流量如果出现拥塞了,这个标记的流量就会
被优先丢弃。帧中继是通过DE(丢弃资格)位,而ATM是通过CLP(信元丢弃优
先级)位。
在MPLS网络里,是通过MPLS包头里的ESP(实验位)的三个比特来进行标
记,而且ESP的值可以通过映射IPP或DSCP。
QOS组字段是一个内部标记,只用于产生于它的本路由器,用来标记由吉比
特路由或边界服务路由器通过光纤进行发送的数据包。通过使用QOS组,交换光
纤网络的QOS处理会更快。
六、拥塞管理
拥塞管理也就是说,当发生拥塞的时候,我们就通过一些工具来管理拥塞,
减缓拥塞等等。而这些工具将是我们本章的内容,就是一系列的队列啦。队列都
是通过三个部分组成,一个是分类,把不同的流量分到不同的类,第二个是,插
入、丢弃策略,数据属于哪个类的就进入到哪个队列中。第三个就是调度,就
是把队列调度转发出去(也就是放到硬件队列里,硬件队列都是FIFO或WFQ),
至于调度哪个出去,就看是哪种队列工具了。
队列分为两种,一种是软件队列,一种是硬件队列。而硬件队列,总是存在
的,也就是说硬件队列是默认就有的。硬件队列有两种,一种是FIFO,另一种
是WFQ。这两种队列下面都会讲到。什么情况下接口的硬件队列会是FIFO或WFQ
呢?CISCO的设备是通过E1的速率来区分的,也就是2.048M为分界线。小于E1
线路的接口硬件队列都是WFQ。而大于E1线路的接口硬件队列则为FIFO。
需要注意的是,如果硬件队列一直都是没有满的,也就是说如果没有发生拥
塞的话,那么我们的软件队列也没有啥意义,可以说是不存在的。只有发生拥塞
了才会有软件队列的使用。
在硬件队列里,都会有一个长度的。如果我们把硬件队列配置得过长或过短,
都会有问题的。如果过长,因为队列是FIFO的,虽然说被丢弃的数据包变少,
但是也会有更多的延时和抖动。而过短的话,延时虽然会降低了,但因为会很快
就堆满了数据包,就会导致更多的数据包被丢弃。所以配置硬件队列长度需要注
意考虑的。一般在低端的路由器,在接口启用了任意的队列之后,都会自动的降
低硬件队列的大小。其实为什么需要硬件队列呢?是因为可以数据在硬件队列里,
从而当转发了这个数据包之后,马上又可以转发下一个数据包。
查询接口的硬件队列:
R1#shcontrollersf0/0
可以修改硬件队列的长度:
tx-ring-limit5!!修改硬件队列的长度
6.1FIFO
FIFO队列,是一般默认的硬件队列方式,当然本章内容都是讲软件队列的。
FIFO的分类为就是只有一类流量。所有流量都归为一类。而插入或丢弃策略则,
谁先来到则先转发谁的数据,如果拥塞发生了,则处理方式就是尾丢弃。调度就
是先来到的先调度出去。
FIFO因为是先进先出,所以,如果网络中有一些延时比较敏感的流量,而
在队列里,在前面的刚好是一些大包,那么后面的小包就会要一直等待,对于语
音流量等这是无法忍受的,而且也会造成抖动过大。
修改软件队列FIFO的长度:
intf0/0
hold-queue100out!!修改FIFO的长度为100
修改之前:
修改之后:
6.2WFQ
6.2.1WFQ分类
WFQ又叫加权公平队列,WFQ不支持配置分类,WFQ是基于流来进行自动分
类的。通过组成一个流有几个特征:
A.源IP地址
B.目的IP地址
C.IP协议传输层协议(TCP或UDP)
D.TCP或UDP源端口
E.TCP或UDP目的端口
F.IP优先级(TOS字段)
从以上可以看出,WFQ的基于流的方式与传统的流方式多了一个TOS字段,
但实际中,一般数据流都会是同一个TOS字段的,在这里也就显得没那么重要了。
6.2.2丢弃策略
WFQ使用修改的尾丢弃策略来选择何时丢弃数据包,而且丢弃数据包是根据
几方面因素来进行的,比如FT时间、CDT、HQO等等。这些会在下面进行讲解的,
首先我们来看一张图:
首先数据进到这个WFQ队列中,所有的数据都会有一个FT值(也叫SN),
这个值的计算是根据包的大小以及到达时间和权重值来进行计算的。当这个包进
到到了队列中时,如果队列中的数据包还没到达CDT时,则数据可以进入到这个
队列中。如果超出了CDT而没超出HQL值的时候,就会对比FT值,如果这个新
来的数据包的FT值大于存在于本队列中的所有数据包的FT值,则丢弃这个新的
数据包,如果没有大于的,则进入这个队列,需要注意的是,这时候队列已经超
过了CDT,也准备接近或超出HQL,有可能会发生拥塞了。如果超出了HQL的时
候,则就要开始丢弃最高FT值的数据包了。如下图:
6.2.3调度
WFQ的调度主要有两个目标:第一个,为当前的流队列提供公平的服务,也
就是说,假如说接口为100K,共有10条队列,那么每个流都会有10K的带宽。
从这也可以看得出问题了,如果有某此流是一些延时比较敏感的话,因为带宽都
是公平的,而如果他需要的带宽多一点的话,那么就会产生延时和抖动了,也正
是因为太过于“公平了”。第二个,为更高IP优先级的流提供更多的带宽,在
之前我们讲了,因为太过于公平了,所以我们为某些重要的流提供一个“加权”
的概念。根据优先级进行加权。比如说把3条流分类优级为0、1、2。那么对于
流的带宽就是(0+1)/6、(1+1)/6、(2+1)/6,那么每条流分得的带宽就是根
据这个来定义了,至于6的得来就是通过把3条流相加起来。从而通过加权来得
到公平的待遇了。
先不谈优先级,一般来说流量低的流获得更好的服务,因为FT值会更小,
而流量高的会获得更差的服务,FT值更大。而高优先级又比低优先级的流获得
更好的服务,如果把低流量的流分配更大的优先级,则该类流的流量的带宽、延
时、抖动和丢包的质量都会得到更好的服务。
WFQ的调度,实际上就是当硬件队列空闲的时候,WFQ就向硬件队列放入数
据包,也就是把所有的WFQ队列中FT值最小的放入到TX(硬件队列)中,一个
WFQ一般有4096个队列。比如说有100条队列里,有一个队列,连续10个数据
包FT值都是最小的,那么都是先发送这些数据包,反正不管你在哪个队列中,
只要是FT值小的就先调度到TX线去。
6.2.4特殊的WFQ队列
我们最多可以为WFQ配置4096个队列,而且配置队列数必须是16的倍数,
也就是说,你不可以配置队列数为31,因为不是16的倍数。
在WFQ里面,WFQ会隐藏8个队列,为路由器生成的开销流量提供服务,这
些队列的会有非常低的加权,以便为这些队列开销流量提供更多高的优先级。
还有另一种队列不是隐藏的,就是WFQ的RSVP,用来为每条WFQ流预留流,
給一个非常低的权重值。
6.2.4WFQ的配置
WFQ的理论还是比较难的,但是配置却是相对于非常简单的。之前我们讲过,
在E1(2.048M)的速率之下的接口默认都为WFQ硬件队列,不然就是FIFO。但
我们可以修改接口的硬件队列:
interfacef0/0
nofair-queue!!关掉WFQ,则就是FIFO
fair-queue!!配置为WFQ队列
fair-queue100409616!!配置CDT、最大队列数、RSVP的队列数
hold-queue500out!!配置队列的长度
6.3CBWFQ
CBWFQ就是基于类的WFQ队列。与WFQ有点类似,但是在CBWFQ里面,可以
为一个队列使用WFQ,但与WFQ不同的是,它并不为所有的流量维护流的信息了。
6.3.1分类
CBWFQ的分类机制,与之前我们学习分类与标志的时候是一样的,都是通过
MQC命令行进行配置的,也就是说,CBWFQ也是通过比较什么IPP、DSCP、COS、
基于接口等等来进行分类。只要在MQC命令里能进行分类的,CBWFQ就可以支持
这种分类方式,因为CBWFQ就是通过MQC来进行配置的,所以说还是相对简单的。
CBWFQ最多可以配置64个队列,而且最后的一个队列是系统默认的:
class-defautl队列。当我们配置的队列中如果都不匹配的时候,流量将会被这
个队列所匹配上。
6.3.2丢弃策略
CBWFQ有两种丢弃策略,一种是尾丢弃,另一种是WRED(下一章拥塞避免会
学习到)。WRED也就是说,在队列准备排满或拥塞之前,就开始丢弃一些数据包
了,以此避免拥塞。虽然可以为64个队列都配置WRED,但是并不见得都合适用,
因为如果一个队列是承载语音流量的话,肯定是不能丢包的,因为发生丢包的话,
语音的质量就会受到损害。class-default队列可以使用FIFO或WFQ,如果
class-default队列使用WFQ的话,那么CBWFQ也是会根据FT时间来发送的,
与WFQ做法相同。
在class-default里使用WFQ,会有一定的优点。因为WFQ是基于每个流来
进行分类的,并且对于流量低的数据(比如交互式流telnet等)会得到很好的
服务。由此也可以看得出,CBWFQ的强大之处了。
6.3.3调度
CBWFQ的调度,就是根据配置的值,为每个队列分配一定的带宽,也看得出,
CBWFQ是可以保证带宽的。而且如果某一个队列中暂时没有流量的时候,另一个
队列可以使用这个队列的空闲带宽。
CBWFQ特性描述
分类根据MQC的class-map来进行分类
丢弃策略尾丢弃或WRED,可以针对每个队列配置
队列数量64
最大队列长度根据设备型号和内存大小而定
单一队列中的调度
63个队列使用FIFO,class-default可以使用WFQ
或FIFO(CISCO7500可以为所有队列配置WFQ或FIFO)
所有队列之间的调度每队列提供一定的带宽
6.3.4配置
本例通过一个实验来介绍CBWFQ的配置。需求:R1访问1.1.1.1的时候,
带宽为1000K,访问2.2.2.2的时候为5000K。
配置:
access-list100permitipanyhost1.1.1.1
access-list101permitipanyhost2.2.2.2
!!使用ACL把网络分类出来
class-mapmatch-allclass2!!定义一个类,需要注意的是,match-all
的意思就是匹配所有,也就是与计算。如果是match-any的话,匹配其中
一个就行了,或计算。
matchaccess-group101!!匹配定义的网络
class-mapmatch-allclass1
matchaccess-group100
policy-mapshen!!创建一个策略映射
classclass1!!调用刚才的class-map
bandwidth1000!!定义带宽
classclass2
bandwidth500
intf0/0
rvice-policyoutputshen!!只能定义在out方向
查看:
R1#shpolicy-mapintf0/0
FastEthernet0/0
Service-policyoutput:shen
Class-map:class1(match-all)
5packets,570bytes
5minuteofferedrate0bps,droprate0bps
Match:access-group100
Queueing
OutputQueue:Conversation265
Bandwidth1000(kbps)MaxThreshold64(packets)
(pktsmatched/bytesmatched)5/570
(depth/totaldrops/no-bufferdrops)0/0/0
Class-map:class2(match-all)
7packets,798bytes
5minuteofferedrate0bps,droprate0bps
Match:access-group101
Queueing
OutputQueue:Conversation266
Bandwidth500(kbps)MaxThreshold64(packets)
(pktsmatched/bytesmatched)7/798
(depth/totaldrops/no-bufferdrops)0/0/0
Class-map:class-default(match-any)
461packets,38566bytes
5minuteofferedrate0bps,droprate0bps
Match:any!!剩下的流量都会被这个队列匹配
注意:
如果在配置分类的时候,需要匹配流量的一些标志的话,最好在靠近源的地
方做好标志,然后再在边界做QOS策略。做标志的话,也可以使用MQC命令的配
置标志。
6.4LLQ
LLQ名为低延时队列,在PQ(优先级)队列应该是最好的低延时队列了,可
是低延时队列有一个最严重的不足就是,只有当高优先级队列的转发完了,低优
先级的才可以进行转发,很容易会出现低优先级的队列出现饿死现象。而在
CBWFQ里,虽然可以配置预留足够的带宽,但是对于低延时、低抖动的流量仍然
无法提供很好的服务。因为CBWFQ的调度会当语音等数据包排列在队列中时,去
服务其它的队列。而未能及时转发,对延时和抖动会增加。所以就需要我们今天
所讲的LLQ了。LLQ对于延时敏感的流量来说,是一个很好的队列工具。而且LLQ
的配置也很简单,因为是建立在CBWFQ之上的。可以这么说,LLQ是CBWFQ里面
的一个队列(64个队列中的其中一个)而已。也就是说,如果CBWFQ里有LLQ
的队列的时候,总是会优先传输这些队列里的数据的,与PQ是一样的。
LLQ与PQ还是有不同之处的,因为如果LLQ还是按照PQ一样的话,在CBWFQ
里面,总是先转发LLQ队列里的数据的话,那么其它队列也有可能会出现饿死的
现象,所以说,LLQ里有一种限速的。可以理解成为PQ+限速。这样一来,LLQ
中的数据仍然会得到优先转发,但同时如果LLQ队列拥塞的时候,也会出现丢包
的。所以在配置LLQ的时候,最好要大概计算出LLQ队列是需要多少的带宽,以
够过少出现拥塞丢包,影响低延时的流量。过大的话,又会出现浪费带宽。这个
值取决与网络环境而定了。
LLQ配置:
我们还是用回CBWFQ里面的例子
class-mapclass-voice!!定义一个class-map,匹配ef级别的流量
matchipdscpef
policy-mapshen!!定义一个策略映射,匹配刚才的class-map
classclass-voice
priority100!!配置优先有并设定带宽为100
查看:
showpolicy-mapintf0/0
Class-map:class-voice(match-all)
0packets,0bytes
5minuteofferedrate0bps,droprate0bps
Match:ipdscpef(46)
Queueing
StrictPriority
OutputQueue:Conversation264
Bandwidth100(kbps)Burst2500(Bytes)
(pktsmatched/bytesmatched)0/0
(totaldrops/bytesdrops)0/0
使用多个优先级队列的LLQ:
在上面的配置里,只配置了一个低延时队列。当然,我们是可以配置多个
LLQ的。比如,我们配置了一个LLQ,用来传输100K的语和200K的视频流量的,
而如果当某时候视频的流量超出了,肯定会产生丢包的,这样子,不仅会影响视
频的流量质量,也会影响到了语音流量的质量。但如果我们通过配置两个队列来
分类两种流量,配置两个LLQ的话,那么就可以解决这个问题了。在LLQ里,流
量都是根据FIFO方式的。
七、拥塞避免
拥塞避免,固名思义就是避免拥塞的发生,也就是在发生拥塞之前就做好行
动,避免拥塞的发生。拥塞避免工具依赖于TCP流量来进来减小拥塞,使一些
TCP连接减低速率等。既然是通过TCP流量来进行减小拥塞的,我们就从TCP开
始入手吧。。。。。。
7.1TCP和UDP丢包的反应
注意:此章为重点内容,为理解拥塞避免必须要懂的。
TCP和UDP采取丢包的反应是不相同的,在发生丢包的时候,如果是UDP的
话,不会发生重传,丢了就丢了,而且UDP也没有任何感知数据丢包的机制,丢
了也不知道的。但是,相对于TCP就不一样了,TCP建立连接的时候,都是需要
三次握手的,而且是需要通过接收方回复ACK确认的,这样就有效的提供了可靠
的连接。TCP在发一个数据給接收方的时候,假如发送一个A数据过去,当接收
方收到这个数据包的时候,会回复一个ACK包(A+1)给发送方,A+1的意思就
是告诉发送方,我已经收到A数据包了,你接下来应该发送语为A+1的数据包了。
如果在发送方,有一定的时间内没有收到接收方回复ACK确认的时候,就会认为
对方没有收到,就会进行重传这个数据包。并且发送方会认为是丢包了,发送方
就会降低速率。
TCP使用两个窗口来进行,以此确定应该在接收方回复ACK之前可以发送多
少数据包过去。第一个窗口为:通告窗口,也叫接收方窗口(允许发送方在接收
方回复ACK之前发送多少数据过来,窗口的大小就代表可以发送多少数据)。第
二个窗口为:拥塞窗口-CWND,与通告窗口不同的是,在发送和接收方之间交互,
由TCP发送方计算出窗口。
TCP发送方总是用通告窗口和拥塞窗口的最小值,用这数值来做为收到接收
方的回复前可以发送多少数据的依据。
慢启动和拥塞避免:
如下图:
如图,当TCP开始连接的时候,拥塞窗口为1,而慢启动阀值为16。发送方
的窗口不能超过拥塞窗口和通告窗口两者的小值。发送方发送一个数据包M过
去,接收方收到之后,回复一个M+1(确认收到M,希望收到M+1)的ACK包。
然后把CWND的窗口增加1。于是发送方可以发送两个数据包过去,接收端回复
两个ACK。接收端每回复一个ACK包,CWND就增加1,现在CWND就增加到4了,
也就是说发送方可以发4个数据包过去了。所以按这种速度增加下去,只要每次
回复就增加,那么就是以指数增加了,也就每次都乘以2来增加了。
当窗口到达慢启动阀值(ssthresh时,图中的16),就证明开始进入到拥
塞避免算法了,从这里开始就不再是以指数增加了,CWND就会以线性增加,也
就是每次只增加1了。一直到出现拥塞的时候(图中的CWND达到24时),网络
超时了,此时的sshthresh慢启动阀值被设置为12(出现拥塞时的一半),而CWND
又重新被设置为1开始,并又开始执行慢启动算法,当CWND到达了12的时候,
又开始进行拥塞避免算法,以每次+1的线性增加了。
当TCP如果是超时的丢包了,速率会降低到最低。但如果是因为重复性的回
复ACK(3个ACK)的丢包,就会降低速率一半。
7.2全局同步
当网络中,在很多TCP流量的时候,由于出现拥塞了,此时就会丢弃数据包,
如果所有的TCP流量同时速率减低,然后又慢启动增加起来一直到拥塞避免,又
再发生拥塞再丢包。这样循环下来,每次的TCP都这样一起降低增加,这就是
TCP同步了。很明显,TCP同步是不有效的利用了链路的资源。而UDP则不会有
些问题了,因为不重传嘛。
如果在尾部丢弃的接口上启用了WRED(加权随机早期检测)的话,可以有
效避免这种情况出现,而且允许WRED速率与接口线速率接近,极大提高了线路
的效率。因为避免了拥塞与丢弃。
7.3TCP饥饿
当一个网络中,既有TCP也有UDP流量的时候,如果这时网络出现了拥塞,
最终就是会丢包。而UDP丢包是不影响速率的,而TCP丢包就需要重传,并且降
低速率。那么此时UDP的流量就会占据了更多,而此时TCP还在慢启动当中,最
终UDP占用了很大一部分,甚至可能会使TCP没有带宽或极少的带宽。而此时再
出现拥塞,TCP又被丢弃了,更多的UDP继续进来,以此下去,TCP就不有立足
之地了。这就是TCP饿死了。
7.4RED-随机早期检测
RED缓解了拥塞问题,通过丢弃数据包使某部分的TCP连接暂时发送较少的
数据包。也就是说,RED在发生拥塞前就开始有选择性的进行随机丢包。但是,
如果真正发生了拥塞,还是会进行尾丢弃的。RED可以使网络减缓拥塞问题,并
不一定会避免拥塞。RED的工作思想就是,在某种情况下,应该开始丢包,而当
需要丢包的时候,应该丢弃多少?
首先,RED是根据测量队列的平均队列深度,通过平常深度判断是否即将要
发生拥塞。注意,是平均深度,而不是实际队列深度。因为实际队列,可能会有
高有低,而平均数不会变化太大。如下图:
RED通过平均深度与两个阀值来对比,来决定何时丢弃数据包或丢弃多少数
据包。这两个阀值分别叫做:最低门阀值和最高门阀值。如下图:
通过上图可以看出,RED是当平均队列深度没有超出最低门阀值的时候,是
不会丢弃任何数据包。当平均队列深度超出最低门阀值但没超出最高门阀值的时
候,是随机选择丢包。如果超出了最同高门阀值的时候,就会尾丢弃数据包,在
RED里面称全部丢弃。注意上图中的%10,那是最大丢弃百分比,也就是说,如
果平均队列深度越来越靠近最高门阀值的时候,最大丢弃%10的数据包。
由此可以看出RED的核心概念就是,RED希望通过丢弃一定百分比的数据包,
而不是全部数据包,随着拥塞严重,丢弃的数据包会越来越多。
7.5WRED-加权随机早期检测
WRED与RED差别不大,都是计算出平均队列深度,根据阀值来进行丢包等
等。不同之处在于,WRED是根据IPP或者DSCP值来创建一个WRED的集。WRED
集由一组最低门阀值和最高门阀值,以及数据包丢弃最大可能性。其实換个方向
理解就是,比如说根据IPP的话,那么从0到7,假如最高门阀值都为100就全
部丢包了。但最低门阀值则根据优先级来定,比如0为30,1为35,2为40„„
以此类推下去。也就是说,如果平均队列到达了30,那么整个流量中会随机丢
弃优先级为0的数据包了,其它的不丢。但如果平均队列深度到达了40,则优
先级为0、1和2的都随机丢弃了。而且0会根据最大可能性丢弃数据包多少。
这些值都可以配置的。
需要注意的是,数据包是经过了WRED之后才会进入软队列的,这个很重要。
而且在一些有低延时低抖动的队列中,最好不要应用WRED,毕竟WRED是会丢弃
数据包的,这对于那些流量来说是无法接受的。
并不是说优先级低就会丢包多,而是看阀值的,到到最小阀值的就丢包了,
如果是高优先级的最先到达阀值,那么就丢包
配置:
class-mapmatch-allc1
matchaccess-group100
policy-mapp1
classc1
bandwidth1000
random-detect!!开启WRED,默认就是WRED
intf0/0
rvice-policyoutputp1
showpolicy-mapintf0/0!!查看结果
修改最低门阀值、最大门阀值和最大丢弃可能性:
policy-mapp1
classc1
random-detectprecedence053020
random-detectprecedence1103520
!!修改优先级0和1的最低门阀值和最门阀值、最大丢弃可能性
配置基于DSCP的WRED:
配置基于DSCP和IPP优先级的差不多是一样的。
policy-mapp1
classc1
norandom-detectprec-bad!!必须先关掉基于IPP的WRED
random-detectdscp-bad!!开启基于DSCP的WRED
修改阀值和最大丢弃可能性:
policy-mapp1
classc1
random-detectdscpef394010!!修改EF的阀值
需要注意的是,如果在配置WRED的时候,默认就是基于IPP的,也就是说
如果不指定是哪种类型的话,默认就为基于IPP的。如果是在E1速率以下的物
理接口中启用了WRED,那也就是默认也会关闭了WFQ,从而启用了FIFO。同时
也会把其它的队列全部禁用了。所以一般WRED是在CBWFQ里面配置,因为可以
根据每一个类或队列来进行配置,特别注意的是,不能在LLQ里面进行配置,
因为一般LLQ里面的流量是语音流量等,这些流量是UDP的,如果被丢弃了是
不会重传的,这些是需要注意的。
7.6ECN-显式通知拥塞
上两章学习的RED和WRED,都是想在拥塞的时候让TCP降低速率,以此来
达到避免拥塞的发生,但是有不好的就是,能过丢弃数据包来降低速率的,有点
类似于七伤拳的,伤人先伤己的意思。也就是说,通过小损害来避免大损害。
ECN是可以提供与WRED相同的作用,重要的是不需要丢包。通过在数据包
头部调协比特位,来令TCP发送方降低发送速率,通过TCP发送方降低速率后,
拥塞就会避免,并且自始至终无需丢包。
当启用了ECN之后,WRED仍然随机挑选数据包,但并不丢弃他们,WRED会
在数据包的头部标记几个字节并转发。ECN为啥会使发送方降低速率呢?为了实
现这一目标,发送方必须要知道网络准备出现拥塞,然后才能降低速率,所以就
是在数据包中设置ECN比特位,用来表示数据包正经历拥塞了。
如下图:这是一个完整的TOS字段,前6位为DSCP,后两位就是ECN了。
ECN工作原理,如下图:
双方建立好了一条连接,双方都支持ECN,只要在ECN两个比特位设
置为10或01,都表示支持ECN,如果为00则表示不支持ECN。
2.R1使用WRED来感知拥塞,然后会随机丢弃数据包。但是在配置了ECN之
后,R1会检查数据包的ECN两个比特位,发现是有01或10的,证明发送方支
持ECN,并且这时R1把ECN设置为11,然后直接转发数据包,而不是丢包。
3.数据包继续传输,一直到接收方。接收方收到数据包后发现ECN比特位为
11,接收方在回复ACK的时候,会设置一个TCP标识字段,标识ECE(显式拥塞
发生),一直发送到发送方。
4.发送方收到了这个回复包之后,发现设置了TCPECE标识位,被告知降低
发送速率。这时TCP的拥塞窗口CWND就会降低就一半,以此降低发送速率。
发送方希望接收方知道我已经收到消息了并降低了速率,因此发送方
在下一个TCP分组中,设置一个新的TCP标识位,称为CWR拥塞窗口缩小。
需要注意的是:如果发送方和接收方,有一边的ECN位为00,也就是说有
一方不支持ECN的话,那么两边都不会支持ECN的,这时设备还是会按照WRED
机制来进行避免拥塞的,也就是说当达到最小阀值的时候,会随机选择性丢包,
到达最大门阀值的时候,会全部丢包。
ECN配置:
policy-mapp1
classc1
random-detectecn!!开启ECN
ECN还是比较简单的,只需要知道,ECN的配置看起来就是像CBWFQ的配置
一样,可以理解为就是CBWFQ的其中一个特性吧。
八、整形与管制
8.1基本概念
整形和管制(也叫限速)都会测量流量发送或接收的速率。整形会将超出速
率的数据包缓存起来,以配置好的速率传输。而管制则会把超出速率的数据包直
接丢弃。一般整形会用在对端设备已经做了管制的环境中,也就是说,比如R1
是企业网边界,而R2是ISP。R2被限速为10M,可是R1企业网边界的路由器也
许是一个核心设备,高速转发。每次直接发N多个G的流量到R2,因为R2做了
限速,所以一定会大量的丢包,所以我们就可以在R1上面做整形,把速率整形
到了10M,这样就不会在R2上丢包了。当然,整形与限速,可以在很多环境中
使用,这只是其中一点而已。
8.2整形
8.2.1整形工作原理
首先,我们先了解一下几个名词。一个是物理速率:链路的物理速率,比如
千兆线、T1(1.544)、E1(2.048)、百兆线等等。流量契约:流量可以发送的速
率。举个例子,比如一台主机需要上网,在边界路由器上,线路为100M每秒,而
这个主机的上网速率为10M每秒,那么这里的物理速率就是100M,而流量契约
为10M,也就是这台主机每秒可以通过10M的带宽。需要注意是,虽然主机上网
只为10M,但是这每秒10M的流量,在100M上面传输的时候,是以100M的速率
去传输的。也就是说,在这100M的链路上,传输主机的10M流量的时候,每传
输10M只需要10分之一秒就传输完了。
继续上面的意思,既然在10分之一秒就传完了,那剩下的10分之9秒呢?
会不会传输流量呢?当然不会啦,因为被这主机的流量被整形为10M了。那么这
是如何通过整形来做到限速的呢?那就是使路由器在一段时间内发送一些数据
包,然后在另外一些时间不发送数据包,为了使只能传输每秒10M,所以在这一
秒钟里只有10分之一秒是传输流量的。其实的10分之9就不传输任何数据包,
那么这样就可以做到每秒只传输10M了。需要注意的是,这样是会有不足之处的,
比如说,如果这个网络里有些实时性或语音流量,那么就惨了,因为要经过10
分之9秒才能转发,也就是900毫秒,也就是,要传送下一数据包的时候就需
要等待900毫秒,这对于语音流量(延时<150ms)就有问题了。
再说个例子说明一下整形的工作原理,如下图:
如上图,物理速率为128K,而整形速率(流量契约)为64K。从这可以看得
出来,路由器发送完这64K只需要2分之1秒就可以发送完了。如图中,流量有
62.5毫秒发送数据,在接下来的62.5毫秒又停止发送,一共连续8次,这个8
就是TC时间了(128/1000)。8*62.5就等于500秒,就是半秒之后就可以发送
完了。
上面我们说过,间隔时间太久,会有影响,特别是在有语音或实时性的流量
下,延迟会太大,所以TC我们最好设置得更小,一般来说最好配置为100分之
1。
8.2.2超额突发
整形支持在某些时间间隔内,发送多于BC的流量,也就是流量突发,或者
说能在第一个时间间隔内发送多于BC的流量,那么这个值可以称为突发超额,
也有些专业资料说为Be。在整形的配置里,be不是必须的,是一个可选配置。
需要了解这些内容,我们就需要提到第四章的令牌桶算法了。令牌桶算法在整形
与管制里面是有些不同的。之前讲过的单速双色,只有一个令牌桶,桶的容量为
BC,这些概念性的东西可以看一下第四章复习一下。新令牌填入到桶里,然后
整形器消耗令牌来获取转发数据包的资格,一个令牌就发送一个比特的数据包。
在每个BC开始的时候(暂时不说be),令牌桶里都会放入令牌,桶是被正
好放满的,令牌不能超出桶,或者每个TC时间就放一次令牌。而且每TC时间放
令牌的时候,如果桶里还有令牌的话,因为每次TC放BC个令牌,所以里面有剩
下的话,就会多出来,这些多出来的令牌就会被丢弃。換个方向说就是,每次
TC时间的时候,桶里都满满的令牌的。
现在正式讲超额突发,废话了一大堆。整形通过把令牌桶设置得大一点,也
就是be值的由来。为了支持超额突发,所以就要把令牌多出BC的数量,这就是
be个令牌数了。
如上图,我们把bc和be设置为8000比特,CIR整形为64K,而物理速率为
128K。因为一开始就有bc+be个令牌,也就是16000,所以如果突然有大流量过
来,那么在这125秒可以发送,而这时TC时间又开始放令牌了,be桶是不会放
的。所以开可以发送数据包,那么就是一开始可以连续187.5秒发送数据包了。
8.3管制
限速与整形有点类似,但也有不同,限速是判断数据是否符合在限速速率内
或者超出,然后做动作。限速可以做三种动作:丢弃数据包,允许通过,重新打
标记,IPP或DSCP等。使用管制,首先是把流量分类,总共有三种类别:符合、
超出、违反。这个分类与之前所学的分类不一样。当然,我们可以只配置符合和
超出这两个分类行为,也可以定义三个行为。如果只有两个行为,也称为双色,
如果只使用一个桶,也叫单速。如果双速的话,会有两个比较重要的CIR(承诺
信息速率)和PIR(峰值信息速率)。
关于如何判断速率,就是按照令牌桶算法来进行的,可以看第四章节内容。
这里就不再废话了。
8.3标记
在管制里,一般超出的话,就是做丢弃的。记得在讲概念的时候说过,管制
有另外一种功能,就是做标记。也就是说,如果在管制里,超出了或违反的。就
把数据包做标记,比如做IPP或DSCP。那么这个数据包经过到另的设备的时候,
发生了拥塞了,如果有些数据IPP标记为1,有些标记为5,那么就会优先丢弃
IPP为1的数据包了。
九、链路优化
9.1压缩
压缩,相信大家都试过压缩软件的使用,就是把一个文件压缩得更小嘛。在
本例中所讲的压缩,同理,也是通过压缩可以把流量或数据包压缩成更小。在
CISCO的设备中,一般有两种压缩:一种是头部压缩,一种是负载压缩。负载压
缩就是把数据包的头部以及数据一起进行压缩。而头部压缩就是只压缩数据包的
头部而已。
从感官上看,也许会认为负载压缩更有效率,当然一开始我也这么想,可是
事实未必如此。比如我的现网中的数据包有语音或一些实时性的时候,一般这些
数据包都是比较小的,而头部一般是没什么变化(大数据包或语音小数据包),
头部不外乎都是差不多的,只不过数据不同而已有大有小。这个时候压缩这些小
包的数据就没啥意义了。,那么我们就可以只压缩头部,40字节的可以压缩成3-5
字节大小,这明显看起来更有效率了。当然,如果是压缩一些大数据包的话,就
可以通过负载压缩了。需要注意的是,压缩都是要消耗设备的CPU和内存的。但
是呢,压缩虽然把数据包压缩更小了,使传输更快,看起来会延时减小了,但这
也同时会增加了另一个延时,那就是压缩延时,压缩需要时间的。
最需要注意的是,压缩工作必须在串行链路上或者一些广域网链路上使用,
就是一些低速链路上。
9.1.1头部压缩
头部压缩,是因为头部的大小没有太多变化的,无论是TCP或者UDP包头等。
一般TCP头部压缩可以将IP和TCP头部(原本40字节)压缩到3和5字节,而
RTP头部压缩可以将IP、UDP和RTP头部(原本40字节)压缩到2-4字节(这
大小取决于是否使用了UDP校验和,没有的话RTP的话就是2字节,使用了的话,
就是4字节。头部压缩只能对TCP和RTP数据进行压缩。
9.1.1头部压缩配置
在接口下配置RTP头部压缩,在FR或HDLC也是在接口下配置
ints0/0
iprtpheader-compression!!配置头部RTP压缩
showiprtpheader-compression!!查看压缩
在HDLC或FR下配置TCP头部压缩:
ints0/0
iprtpheader-compression!!配置头部TCP头部压缩
showiptcpheader-compression!!查看压缩
配置基于class-bad的RTP头部压缩:
policy-mapshen
classc1
compressionheaderiprtp
ints0/0
rvice-policyoutputshen!!只能应用在出方向
配置基于class-bad的TCP头部压缩:
policy-mapshen
classc1
compressionheaderipTCP
9.2链路分片和交叉(LFI)
从一个例子开始说这两个概念吧,比如,在一条低速链路上,有一些语音数
据包在发送,语音数据包一般不能超过150ms的延时。可是如果在这个时候,前
面有一个大包,发送出去需要200ms,那么这些语音数据包就要等待200ms了,
这明显是不能接受的。所以我们就可以通过分片与交叉来解决这个问题。
通过把大的数据包进行分片,就是把一个大数据包分成多个小数据包,然后
再把语音这些数据包插到这些分片数据包前发送。这样子就有效的解决了这个问
题了。如下图:
未完待续„„
本文发布于:2023-02-28 18:00:04,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/167757840583910.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:qos限速.doc
本文 PDF 下载地址:qos限速.pdf
留言与评论(共有 0 条评论) |