前言学习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.3Diffserv-差分服务模型差分模型,在有些资料中也称为区分模型。在实施了差分模型的QOS网络中,都是把网络中的不同数据根据不同的类型来进行传输。这个模型,可以把不同的数据分配不同的优先级,做不同的标志。当网络发生拥塞的时候,QOS就可以根据不同的优先级做不同的转发策略。比如优先传输高优先级的,丢弃低优先级的。至于优先级的定义,可根据网络中数据的重要性来划分。一般在网络中实施QOS的时候,都是采用差分服务模型。在差分服务模型中,数据从源到目的地,所有设备做出的区分服务QOS行为都称为:PHB(每跳行为)。所谓的PHB,也就是差分服务模型里,每节点之间做的QOS动作。而且在QOS网络里,都是端到端QOS的。而在集成服务模型里,无论相隔多少设备,始终都全是端到端QOS。而如果在差分模型里,需要从源到目的地的路径中所有设备都为某相同的差分服务行为,那么才会是端到端QOS。三、DSCPDSCP是一个非常难理解的玩意。其实不难,一开始接触的时候,很容易就掉进坑了。DSCP中文原意为:差分服务代码点。在IP数据头的头部里,共有6个比特。也就是可以划分为64个类。在DSCP出现之前,是只出现有3个比特的IP优先级的,也就是说,当时分类数据最多也只能分为8类而已。而最近的RFC2474定义了一个新的分类值DSCP,因为有6个比特,所以分类可以更多更详细了。DSCP六个比特:101110DSCP分为有四种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有不同之处。如下表:丢弃率低丢弃率中丢弃率高1AF11AF12AF132AF21AF22AF233AF31AF32AF334AF41F42AF43从上表可以看出,并不是值越大就是越优先的。在二进制的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(最大数量值),也就是