|
一、QoS基础理论 第一条、QoS旨在针对不同用户和不同应用的需求,为其提供不同的服务质量保证,例如:提供专用带宽、减少延迟、降低抖动、减少丢包率、平滑网络流量等。 第二条、在每一段链路上,数据包的延迟包括串行化延迟、传播延迟和交换延迟。 第三条、串行化延迟指在输出速率一定的情况下,设备将数据包从硬件队列全部发送到线路上的时间。串行化延迟取决于线路的带宽以及数据包的大小。例如:在64Kbps线路上发送一个1500字节数据包的串行化延迟计算如下,64Kbps的线路速率相当于每秒钟能够发送8K字节(即8192字节),也就是每毫秒发送8.192字节,因此发送一个1500字节需要的时间为1500/8.192,大约需要183毫秒。从上面的例子可知,在低速线路下数据包的串行化延迟很大,我们可以通过修改MTU等方式调整数据包的大小,减少数据包的串行化延迟,或者采用通过将小数据包放入优先队列的方式,减少大数据包的串行化延迟对小数据包延迟的影响。 第四条、传播延迟指一个数据包从发送方到达接收方所需的时间。该延迟取决于距离和介质,而与带宽无关。在进行QoS的设计时我们不考虑传播延迟。 第五条、交换延迟指设备从收到数据包到开始传输的时间,包括路由、交换、软件队列调度。不拥塞时交换延迟通常少于10us;拥塞时随着队列中等待调度的分组的增加,交换延迟将锐增,因此在进行QoS的设计时我们主要关注的是拥塞条件下数据包的交换延迟。 第六条、当网络不拥塞时,QoS并不起作用,所有的数据包直接进入硬件队列等待传输而不会进入软件队列,但是show policy-map interface <interface name>命令的输出结果仍然能够正确的衡量出匹配到各软件队列的流量速率。 第七条、当网络拥塞时,QoS才起作用,所有的数据包都会进入软件队列等待调度。 第八条、拥塞就是指硬件队列满,即硬件队列不满时数据包直接向硬件队列发送,硬件队列满时就向软件队列中发送,此时就产生了拥塞。拥塞状态下,硬件队列每次传送完队列中所有数据包,就产生一次中断,由cpu运行一次调度算法,将多个软件队列中的一些数据包(这些数据包的总字节数量不大于硬件队列的大小)放入硬件队列。 第九条、硬件队列的大小是由端口硬件决定的,有一个最大值,实际使用值一般随端口的速率自动调整到合适数量(例如端口从10M改为100M时,硬件队列的个数可能会自动调整),一般不需要手工改变。软件队列的空间取自于huge/large/small buffer,而这些buffer又是从内存中获得,并且可以根据需要自动增加或减少。当硬件队列满时,后续的数据包会进入软件队列中。 第十条、硬件队列位于接口适配器或者网络模块上,只能使用FIFO队列技术,不能使用各种QoS队列技术。软件队列位于三层处理器系统或者接口buffer上,可以使用各种QoS队列技术,例如PQ、CBWFQ、LLQ、MDRR等。 第十一条、目前QoS使用的主要模式为以下两种:Integrated Services和Differentiated Services,简称IntServ模式和DiffServ模式。我们使用的是DiffServ模式。 第十二条、DiffServ模式的工作方式:当网络拥塞时,首先网络设备会对流经的数据包进行分类和标识,根据分类和标识的情况数据包会进入不同的队列中,进入队列前可以对这些数据包进行流量控制和拥塞避免,进入队列后可以对这些数据包实施拥塞管理,最终数据包或者被发送出去或者被丢弃,这样就保证了整个网络的高效运行。因此,DiffServ模式只是对端口的出向流量进行QoS控制,对端口的入向流量只能在对端端口的出向做QoS控制。 第十三条、网络设备可以根据不同的信息对数据包进行分类,比如:IP precedence值、dscp值、源/目的IP地址、协议端口、二层802.1Q的CoS值、流入端口、源/目的Mac地址等。 第十四条、标识是指通过设置不同级别数据包的IP precedence值和dscp值来实现的,它用于把属于不同级别的数据包“染色”。 第十五条、流量控制包括流量管制和流量整形。流量管制和流量整形都是通过检测来确定流量是否超出了限制,但对超出限制的流量采用了不同的处理方法。流量管制一方面可以通过丢弃超出限制流量的数据包把网络流量限制在一定的速率里,另一方面还可以对超出限制流量的数据包进行重新标识,例如:承诺接入速率(committed access rate,CAR)可以丢弃超出流量的数据包,也可以重写这些数据包的IP Precedence值;流量整形则将超过限制流量的数据包缓存到buffer里,通过延迟发送这些数据包把网络流量控制在一定的速率里,如果buffer满了,则丢弃后续的数据包。例如,通用流量整型(Generic Traffic Shaping,GTS)和基于类的整形(Class-Based Shaping)使用WFQ(加权公平队列)来延迟发送超出限制流量的数据包。在我行的QoS设计方案中没有使用流量管制和流量整形。 第十六条、拥塞避免包括RED和WRED两种方法,它们会在网络拥塞时根据当前队列的平均长度随机丢弃数据包。当前队列的平均长度取决于之前队列的平均长度和当前队列的实际长度。当前队列的平均长度计算公式如下:当前队列的平均长度 =(之前队列的平均长度×(1-2–n))+(当前队列的实际长度×2–n)。其中n是指数权重因子,它可以由用户自己配置。n值越大,之前队列的平均长度对当前队列的平均长度的影响越大;n值越小,当前队列的实际长度对当前队列的平均长度的影响越大。数据包被丢弃的可能性基于三个参数:最低门限值、最高门限值和最大丢弃概率。对于指数权重因子n,最低门限值,最高门限值和最大丢弃概率,一般情况下使用系统的缺省值即可,用户不需要进行重新配置。 Ø 最低门限值:当队列的平均长度超过最低门限值时,开始丢弃数据包。随着队列平均长度的增加,包丢弃的可能性呈线形的增长,直到队列的平均长度达到了最高门限值。 Ø 最高门限值:当队列的平均长度超过最高门限值时,所有后续到达的数据包都会被丢弃。 Ø 最大丢弃概率:指当队列平均长度达到最高门限值时数据包被丢弃的概率。 的对比情况如下: Ø 由于PQ队列没有最高上限限制,因此PQ队列流量突发时可以抢占Round Robin配置的带宽,并最终将可用带宽完全占用,所以Round Robin队列也就没有最小带宽保障,在PQ严重拥塞时,有可能一点带宽也拿不到 Ø 由于PQ队列拥有最高优先调度权,因此PQ队列能提供低延迟保证,Round Robin队列不能提供低延迟保证 第三十四条、MDRR严格优先级模式下PQ队列和Round Robin队列的配置方法 | | | | | | | bandwidth remaining percent {value} | 配置Round Robin队列所占剩余带宽的百分比。 |
第三十三条、MDRR严格优先级配置举例:端口总带宽是20M,两个Round Robin队列分配的带宽分别是剩余带宽的50%和40%,剩余的10%分配给default队列,下表中给出了具体的配置命令。 policy-map QoS class PQ1 priority class RR1 bandwidth remaining percent 50 class RR2 bandwidth remaining percent 40 |
第三十四条、每个物理端口有硬件队列,每个ATM子端口也有自己的硬件队列,硬件队列也被称为TX-Ring。对于不同的路由器平台,TX-Ring可以通过bandwidth或是TX-ring-limit命令进行修改(思科建议不要修改这个值)。对于低端设备,TX-Ring以数据包的个数为单位;对于高端设备,TX-Ring以大小为512字节的颗粒的个数为单位。 第三十五条、对于ATM端口,QoS service policy可以应用在ATM物理端口上、ATM子端口上或ATM PVC上。 (1)当QoS service policy应用在ATM物理端口上时,它是面对所有的PVC提供共同的服务。 (2)当QoS service policy应用在ATM子端口上时,它是面对子端口下的所有PVC提供共同的服务。 (3)当QoS service policy应用在ATM PVC上时,它是面对每个独立的PVC提供服务。每个PVC相当于一个独立的端口,拥有独立的队列调度机制。基于VC的LLQ/CBWFQ的队列分配和调度方式,与PPP/HDLC端口上的LLQ/CBWFQ是一致的。带VIP的7500系列路由器, 从IOS 12.1(5)T开始支持这种基于VC的QoS,在使用时需要启用分布式CEF(dCEF)。 第三十六条、各类应用对网络的要求 二、QoS测试结果及推导结论 以下是进行LLQ技术测试后得到的测试结果及推导结论。 第一条、当配置了多个PQ队列时,如果由于某个PQ队列而导致网络拥塞,那么其他PQ队列不会有丢包发生、延迟也不会受到影响。参见附件2《QoS测试场景》中的实验一。 第二条、假设有一个PQ和一个CBWFQ队列,当因CBWFQ造成网络拥塞且PQ还有剩余带宽时,CBWFQ可以利用PQ没有使用的带宽传输超出的流量。同时,PQ队列的平均延迟相对于网络不拥塞时有所增加,但随着拥塞量的增加,PQ队列的平均延迟变化不大。如果此时PQ的流量增加了,那么CBWFQ就不能使用这部分带宽而是要优先保障PQ流量的使用。参见附件2《QoS测试场景》中的实验二。 第三条、假设有一个PQ和一个CBWFQ队列,当因这两个队列造成网络拥塞时,如果PQ实际需要的带宽超过分配给它的最高上限带宽,CBWFQ实际需要的带宽超过分配给它的最小保障带宽,那么PQ和CBWFQ只能使用配置中定义的带宽。参见附件2《QoS测试场景》中的实验三。 第四条、假设有一个PQ和一个CBWFQ队列,当PQ出现大量突发/异常流量需要超过预先配置的最高上限带宽,甚至要产生网络拥塞时,如果存在空闲的剩余带宽,PQ可以使用这些空闲带宽,如果CBWFQ队列的流量很小,PQ甚至会使用到CBWFQ最小保证带宽中没有使用的那一部分,并且CBWFQ没有丢包,延迟影响也很小。但是,此时如果CBWFQ队列流量开始持续增加,PQ占用的带宽将持续减少,一直减少到PQ预先设置的最高上限带宽。这时,如果PQ和CBWFQ得不到带宽满足的流量都将被丢弃。例如:我们在进行QoS的设计时,将关键业务类、语音业务类、视频业务类、交互业务类都放置到了PQ队列中,将批量数据库类、办公业务类都放置到了CBWFQ队列中。当白天关键业务类(PQ)需要超额使用带宽时,如果批量数据库类和办公业务类(CBWFQ)没有使用完所有的剩余带宽,那么关键业务类(PQ)就可以利用批量数据库类和办公业务类(CBWFQ)没有使用的、空闲的剩余带宽来传输超出的流量。参见附件2《QoS测试场景》中的实验四。 第五条、假设有2个PQ和2个CBWFQ队列,当因1个PQ和1个CBWFQ造成网络拥塞时,如果第1个PQ需要的带宽没有超过分配给它的最高上限带宽,或者第1个CBWFQ需要的带宽没有超过分配给它的最小保障带宽,第2个PQ需要的带宽超过分配给它的最高上限带宽,第2个CBWFQ需要的带宽超过了分配给它的最小保障带宽,那么第2个CBWFQ将会获得第1个PQ或者第1个CBWFQ没有使用的那部分带宽,而第2个PQ最多只能获得配置的最高上限带宽。例如:我们在进行QoS的设计时,将关键业务类、语音业务类、视频业务类、交互业务类都放置到了PQ队列中,将批量数据库类、办公业务类都放置到了CBWFQ队列中。当白天发生网络拥塞时,如果批量数据库类(CBWFQ)实际使用的带宽没有超过分配给它的最小保障带宽,而办公业务类(CBWFQ)需要的带宽超过了分配给它的最小保障带宽,关键业务类(PQ)需要的带宽也超过了分配给它的最高上限带宽,那么办公业务类(CBWFQ)将会获得所有的剩余带宽,而关键业务类(PQ)最多只能获得配置的最高上限带宽。参见附件2《QoS测试场景》中的实验五。 第六条、假设有1个PQ和2个CBWFQ队列,当因2个CBWFQ造成网络拥塞时,如果PQ需要的带宽没有超过分配给它的最高上限带宽,CBWFQ需要的带宽超过了分配给它的最小保障带宽,那么CBWFQ可以按照配置带宽的比例关系使用PQ没有使用的带宽来传输超出的流量。参见附件2《QoS测试场景》中的实验六。我们在进行QoS的设计时,对于PQ中的业务都分配了与实际流量最大值相等的带宽,对于CBWFQ中的业务没有按照实际流量分配带宽,只是分配了一定比例的带宽。由于PQ队列是按照实际流量的最大值进行带宽分配,在大部分情况下PQ队列使用的流量都不会超过分配给它的最高上限带宽,如果由于CBWFQ队列造成网络拥塞,那么CBWFQ就可以按照配置带宽的比例使用PQ没有使用的带宽。在前面第三十条的配置举例中,PQ1分配的最高上限带宽是15M,CB1与CB2分配的带宽比例是3:2,如果某一时刻PQ1有10M的流量发送,CB1有8M的流量发送,CB2有8M的流量发送,此时网络发生了拥塞,由于PQ1实际需要的带宽小于分配的最高上限带宽,因此PQ1没有使用的5M带宽就可以被CB1和CB2按照3:2的比例使用,即CB1可以发送5×3/5=3M的流量,有5M的流量被丢弃,CB2可以发送5×2/5=2M的流量,有6M的流量被丢弃。 第七条、假设有2个PQ队列和1个CBWFQ队列,当由于CBWFQ队列而导致网络拥塞时,在保持PQ队列数量不变的情况下,增加第1个PQ队列的带宽,第2个PQ队列的延迟会增加。这是因为增加了第1个PQ队列的带宽,轮循到第2个PQ队列的时间就会增大,从而增加了这些队列的延迟。参见附件2《QoS测试场景》中的实验七。 第八条、当因CBWFQ队列导致网络拥塞时,在保持所有PQ队列分配的总带宽不变的情况下,增加PQ队列的数量,不会影响原有PQ队列的延迟。这是因为虽然增加了PQ队列的数量,但是PQ队列分配的总带宽并没有发生改变,轮循到原有PQ队列的时间也就不会发生改变,从而不会影响这些队列的延迟。参见附件2《QoS测试场景》中的实验八。 第九条、当因CBWFQ队列导致网络拥塞时,增加CBWFQ队列不会影响PQ队列的延迟。根据LLQ的调度算法,当网络拥塞时,在PQ配置的带宽范围内LLQ会优先保证PQ队列中数据包的传输,其他的队列采用CBWFQ的调度方法,因此增加CBWFQ队列并不会影响PQ队列数据包的调度方式,也就不会影响PQ队列的延迟。 第十条、当因CBWFQ队列导致网络拥塞时,每向PQ队列中增加一个新PQ队列(PQ最大上限带宽总和也相应增加),原有PQ队列的延迟都会增加。这是因为增加了一个PQ队列后,轮循到原有PQ队列的时间就会增大,从而增加了这些队列的延迟。 第十一条、假设有1个PQ和1个CBWFQ队列,当因PQ队列导致网络拥塞时,如果将CBWFQ队列变成PQ队列,那么该队列的平均延迟会变小,同时原有PQ队列的平均延迟会增大。这是因为该队列中的数据包不需再等待原有PQ队列的数据包传输完毕后才能传输发送,而是会与原有PQ队列的数据包按照FIFO的方式进行调度,从而该队列的平均延迟会变小;同时数据包从CBWFQ队列移到PQ队列相当于增加了一个PQ队列,这样轮循到原有PQ队列的时间就会增大,从而增加了原有PQ队列的延迟。参见附件2《QoS测试场景》中的实验九。 第十二条、当某一队列(PQ或CBWFQ)数据包较小时,每个数据包只需花费相对较短的时间就可以传输完毕,因此对其他PQ队列造成的影响也较小;当某一队列数据包较大时,每个数据包则会花费相对较长的时间才能传输完毕,因此对其他PQ队列造成的影响较大。 第十三条、输出时间也就是串行化延迟,指每个数据包发送到线路上所需要的时间,它取决于线路的带宽和数据包的大小。当数据包大小保持不变的情况下,线路带宽越大,线路输出速率越大,数据包输出时间越小。 第十四条、输入速度指单位时间内进入队列的数据包大小,它取决于分配给该队列的带宽大小。一个PQ队列的输入速度越快,在单位时间内这个队列被调度的机会越大,调度的机会越大,受影响次数也就越大,因此平均时延的上涨也比其他PQ队列明显。
|