Qos
Qos的作用:qos是在网络做通的基础上给数据包划分369等,根据匹配内容对数据包进行区分服务,从而达到重要的数据包优先转发,不重要的数据包后转发或者在网络拥塞时先丢弃,从而保障重要业务在网络拥塞时有更好的网络体验。
网络服务分类:网络服务模型分为三种,分别为尽力而为、综合服务、区分服务。尽力而为服务模型是指没有部署任何策略,对数据包一视同仁;综合服务是指针对特定业务,端对端沿途所有设备针对该业务预留固定资源,优点是该业务网络体验好,缺点是即使该业务暂时没有流量,这些资源也不会给其他流量使用,导致资源浪费,如RSVP;区分服务模型是指对进入qos域中的流量划分369等,qos域中的流量根据流量划分的等级进行区分服务。
Qos的应用场景:qos的典型应用场景有生产网络和办公网络混合的场景,通过部署qos可以保证生产业务流量优先转发,员工刷手机的流量后转发从而保护关键流量;运营商等对用户出售网络服务也可以通过qos技术,从满足不同客户的需求。
匹配流量:在qos场景中,识别不同流量的方式分为复杂流分类和简单流分类。复杂流分类使用acl数据包五元组匹配或使用MQC关键字匹配识别流量;简单流分类使用802.1q中的优先级、IPv4头部中的DSCP、IPv6中的Traffic class、MPLS标签中的EXP字段识别。常用的Qos方案是在qos域的边缘设备使用复杂流分类抓取一条或一类流量,将这些流量根据事先规划设置对应简单流分类识别的值,后续在qos域中就能根据你设置的这些值对流量进行区分服务。
qos核心功能:流量限速、拥塞管理、拥塞避免。流量限速能够对流分类匹配的流量进行限速;拥塞管理定义不同队列调度转发机制;拥塞管理定义丢弃数据包时的丢弃策略。
流量限速:流量限速分为流量监管car和流量整形gts。流量监管对超出分配带宽的流量严格丢弃;流量整形会将超出分配带宽的流量保存起来,只有当保存数据容量存不下才会丢弃,保存下的流量会在分配带宽有空闲时再发出去。基于这些特性,流量监管有低延迟高丢包的特点,常用于延迟敏感业务如游戏、语音电话等;流量整形有高延迟地丢包的特点,常用于延迟不敏感业务如文件传输等。
令牌桶:令牌桶是实现流量限速的原理,分为单速单桶双色标记法、单速双桶三色标记法、双速双桶三色标记法;单速单桶双色标记法以CIR的速率向CBS中投放令牌,一段时间没有流量CBS会装满令牌,由于CBS>CIR,当有流量时,一开始消耗CBS中的令牌的速率大于CIR补充的速率,所以一开始传输速率会大于稳定时CIR的速率,稳定时大于CIR的那部分流量会被染红(若是流量监管则直接丢弃),小于或等于CIR的那部分流量染绿默认转发;单速双桶三色标记法以CIR的速率向CBS中投放令牌,当CBS满后会溢出给EBS,当EBS满时,若流量大于EBS则染红,介于EBS和CBS之间则染黄(降低优先级),小于CBS则染绿;双速双桶三色标记法以CIR的速率向CBS投放令牌,已PIR的速率向PBS投放令牌,P都大于C,当进来流量的速率大于PIR则染红,介于CIR和PIR之间则染黄,小于CIR则染绿。根据以上可以得出结论,单速单通和单速双桶在CBS和EBS有额外剩余令牌时允许瞬间突发流量,而双速双桶则可以有长期突发流量,允许突发流量为PIR和CIR的差值;另外单速双桶和双速双桶相对单速单桶可以对超出CIR的流量进行染黄降低优先级的操作。
拥塞管理:拥塞管理匹配被拥塞避免放行的数据包中的DSCP等字段将数据包放入对应出接口的不同队列,最后根据合适的队列调度策略将数据包发送出去,每个出接口都有0-7一共八个队列,数值越高越优先发出,其各个队列分别对应下表数据包字段。

队列调度策略:队列调度策略有以下几种,FIFO先进先出、PQ优先级队列、RR轮询、WRR权重轮询、DRR赤字轮询、PQ加轮询机制、WFQ权值公平队列、CBQ基于类的队列。FIFO无视队列的优先级,先进入队列的先发出;PQ严格按照从7号队列至0号队列发出数据包;RR在每一次轮询严格从每个接口队列发出一个数据包;WRR为每个队列设置一个权重值,该值为每次轮询该队列可以发出的数据包个数,每小轮从数值高的队列开始依次轮询,每小轮每个队列只能发出一个数据包,队列发出一个数据包后会在队列计数器上减一,某队列计数器减为0则本次轮询无法继续发送数据包,然后一直重复此操作,直至所有队列计数器为0则本轮结束,将计数器恢复为设置的权重值,再开始下轮轮询,WRR只关心数据包的数量;DRR每轮轮询会给每个队列补充设置的金额,若金额大于零则可以发送数据包,小于零则无法发送,例如通过配置0号队列每轮可以补充200金额,若此时剩余金额为1,当本轮调度到0号队列需要发送1000byte数据包,则将该数据包发送出去后金额为-999,后续若要继续发送数据包,则需要等到5轮后金额又为1时才能再发送数据包,DRR只关心数据包的大小;PQ加轮询策略将高优先级的队列例如将5-7号队列设置为PQ,0-4设置为WRR或DRR,只有设置为PQ的队列将数据包发送完后才能发送RR,并且PQ可以随时插队;WFQ根据管理员的配置能够将DSCP等字段映射为权值,并且能够综合数据包的大小,让权值高、数据包小的优先转发,从而降低总体转发时延;CBQ除了使用出接口0-7物理队列,还使用BE、AF、EF三种逻辑队列,管理员可以通过配置将物理队列映射为逻辑队列,默认BE队列,AF队列确保带宽,EF队列优先转发并且可以限制最大带宽,使用CBQ可以简化管理员的配置。
拥塞避免:拥塞避免的核心是主动的、智能的数据包丢弃策略,为了防止队列排满,当达到阈值时开始主动地丢弃数据包。
拥塞避免机制:需要知道的是,当存在长期大于带宽的流量,队列排满之后会执行TD尾丢弃,这会照成TCP全局同步和TCP饿死现象,所以应该尽量减缓队列排满的到来,也就是使用拥塞避免机制WRED权值随机早期丢弃,WRED能够对不同的流分类设置低阈值、高阈值、概率值,当该队列排队的流量低于阈值时,不对该流分类丢弃,当排队的流量介于低阈值和高阈值之间时,越接近高阈值,这丢弃概率越接近概率值,当排队的流量大于高阈值时,该流分类的流量全部丢弃。所以可以针对不同重要程度的流分类,合理设置对应的低阈值、高阈值和概率值,确保当排队的流量到达一个门槛后就以高概率值丢弃不重要的流分类。
TCP全局同步和TCP饿死 :队列排满后会使用TD,所有报文都会被丢弃,其中就包括TCP的ACK,当发送方没有收到接收方的ACK,认为此时链路发生拥塞会主动减小滑动窗口为原来的一半,此时由于滑动窗口大幅减小,所以很快链路就不再拥塞,滑动窗口的大小又逐渐变大,最后又会造成收不到ACK,再将滑动窗口变为原来的一半,如此反复就可以看到TCP的流量会周期性的变为原来一半然后缓慢提升一直循环,此现象就是TCP同步,由于TCP是慢启动,所以在慢启动的过程中就无法充分利用链路带宽造成浪费。如果此时有UDP流量和TCP流量共享此带宽,TCP滑动窗口减半的那部分带宽会迅速被UDP抢占,因为TCP是慢启动,然后TCP又会收不到ACK,如此TCP滑动窗口一直减半,UDP一直抢占,最终会导致带宽基本都被UDP使用,导致TCP饿死。TCP全局同步可以使用拥塞避免机制WRED,在队列到达低高阈值之间就随机丢弃部分TCP连接的ACK,错开各个TCP连接滑动窗口的峰值,让流量更加平稳,并且由于TCP收不到ACK滑动窗口减半和慢启动的特性,通过设置合理的低阈值、高阈值和丢弃概率值,能够从根本上避免队列排满;TCP饿死可以使用确保TCP固定带宽解决,让UDP无法侵占TCP的那部分固定带宽。