拥塞管理工具(包括排队工具)适用于可能遇到拥塞的接口。只要数据包进入设备的速度快于其退出速度,就会存在拥塞的可能性,并且会应用排队机制。
重要的是要注意,只有在出现拥塞时才激活排队工具。在没有拥塞的情况下,数据包一到达便立即发送。但是,发生拥塞时,必须对数据包进行缓冲或排队(这些备份数据包的临时存储和后续调度),以减少丢弃。
在对流量进行分析并确定可以通过某些操作进行处理之后,下一个服务质量(QoS)任务是为这些流量类型分配操作或策略处理,包括带宽分配,策略,整形,排队和丢弃决定。在“监管和整形”一文中,我们探讨了各种限制流量速率的方法。
本文探讨了拥塞管理(排队)和拥塞避免(提早丢弃)工具,这些工具可帮助管理多余的流量,直到可以发送为止。
本章涵盖以下主题:
- 术语和建议
- 第2层和第3层排队工具
- 拥塞避免工具,例如随机早期检测(RED)和
加权RED(WRED)
拥塞管理和避免术语
拥塞管理包括排队和调度。从概念上讲,排队和调度是互补但相互交织的过程。这些术语经常错误地互换使用:
- 排队 (也称为缓冲)是在链接的输出缓冲区中对数据包进行排序的逻辑。当接口出现拥塞时,将进行排队处理,并在拥塞清除后将其停用。随着队列的填充,可以对数据包进行重新排序,以便优先级较高的数据包比优先级较低的数据包更快地退出设备。
- 调度是决定下一个要发送的数据包的过程。无论接口是否正在发生拥塞,都会进行调度(与排队不同)。
下图显示了排队和调度的一般示例。
拥塞管理包括排队和调度方法,其中多余的流量在等待在出口接口上发送时被缓冲或排队(有时会丢弃)。
拥塞避免工具更简单;他们监视网络流量负载,以预测和避免拥塞,并在拥塞发生之前有选择地丢弃流量。
调度算法
在拥塞情况下,将使用排队算法,并且调度程序将决定接下来要服务的队列。该决策可以使用不同的调度算法,包括以下算法:
- 严格优先级:仅当较高优先级队列为空时,才服务较低优先级队列。此方法可能会降低优先级较低的队列中的流量。
- 轮询:按设置的顺序提供队列。尽管此算法永远不会使流量枯竭,但它可能会在保存实时,对延迟敏感的流量的队列中造成不可预测的延迟。
- 公平加权:通常通过IP优先级对队列中的数据包进行加权,因此某些队列的服务频率高于其他队列。尽管此方法解决了严格优先级算法和循环算法的缺点,但它不能提供实时流所需的带宽或速率保证。每个流的最终带宽会根据当前流的数量以及每个其他流的权重而瞬时变化。
因此,用于QoS部署的调度工具提供了这些算法以及各种减轻其缺点的方法的组合,从而使您可以针对当前的实际流量优化网络。
思科交换机平台还采用了其他排队方式,包括定型轮询(SRR)和不足加权轮询(DWRR)。
基于类的排队(策略图)
Cisco IOS软件中的排队算法历史悠久。对于现代富媒体网络来说,较早的方法尚不足以解决这些流量类型的问题,但是快速回顾是有益的。
关键的传统排队方法(所有方法都早于模块化QoS命令行界面[MQC]体系结构)包括以下内容:
- 先进先出队列(FIFO):单个队列,其中数据包以其到达的确切顺序发送。
- 优先队列(PQ):一组四个队列,以严格优先级顺序服务。这种方法的主要缺点是可能会饿死优先级较低的流量。
- 自定义队列(CQ):一组16个带有循环调度程序的队列。它提供带宽保证并防止饥饿,但没有提供对延迟敏感的实时流所需的严格优先级。
- 加权公平排队(WFQ):该算法将接口的带宽除以流的数量(按IP优先级或IPP加权),以确保为所有应用程序公平分配带宽。该方法为高优先级实时流提供了更好的服务,但缺少任何特定流的带宽保证。
- IP RTP优先级排队(PQ-WFQ):这是一种瞬态方法,除了为其他流量提供WFQ复合体之外,还为实时流量提供了单个严格优先级队列。它很快被低延迟排队(LLQ)所取代。
实时,对延迟敏感的流量需要排队算法的两个属性:绝对带宽保证和延迟保证。其他流量不需要在实时流量存在的情况下被饿死。当前推荐的排队算法如下:
- 基于类的加权公平排队(CBWFQ):一种混合排队算法,结合了带宽保证(来自CQ)和动态公平性,适用于一类流量中的其他流(来自WFQ)。它不提供延迟保证,因此仅适用于数据流量管理。
- 低延迟排队(LLQ):此方法为CBWFQ添加了严格的优先级功能,因此适合实时和非实时流量的混合。它提供了延迟和带宽保证。
基于类的加权公平排队
CBWFQ允许创建多达256个队列,服务多达256类流量。根据分配给该类别的带宽为每个队列提供服务。CBWFQ是使用策略图中的带宽关键字配置的。使用CBWFQ,可以明确定义和实施最小带宽。可以用绝对或百分比(百分比关键字)来指定带宽。
下面的示例显示了两个使用CBWFQ管理的应用程序。首先,将最小带宽保证给予TRANSACTIONAL-DATA类。其次,所有其他流量(属于类默认值)都处于公平队列中。
在拥塞的情况下,接口的L1 Tx环将填满并将数据包推回L3 CBWFQ队列(如果已配置)。每个CBWFQ类都分配有自己的队列。CBWFQ队列可能还应用了公平排队预分类器(使用策略映射中的fair-queue关键字)来管理争用单个队列的相当多的流。
此外,基于分配给每个类别的带宽,以加权循环(WRR)方式为每个CBWFQ队列提供服务。然后,CBWFQ调度程序将数据包转发到Tx环。
下图说明了CBWFQ的操作。
低延迟排队
LLQ本质上是CBWFQ与单个严格的PQ相结合。在服务其他CBWFQ队列之前,使用priority关键字分配给严格优先级队列的流量将达到其分配的带宽。
应将所有实时流量配置为由优先级队列提供服务。可以定义多种类型的实时流量,并为每种流量分配单独的带宽保证,但是单个优先级队列可以调度所有组合流量。
与CBWFQ一样,您可以使用绝对或基于百分比的带宽分配来配置LLQ。在下面的示例中,保证了33%的接口带宽用于实时流量。其他流量类别收到CBWFQ带宽保证。
LLQ包括一个隐式策略器,该策略器限制了实时队列中的流量可能消耗的带宽,从而防止了CBWFQ调度程序所服务的非实时流的带宽不足。此隐式策略器的管制速率是分配给该类的带宽,超过该速率的流量将被丢弃。
下图说明了LLQ的操作。在图示中,三个实时流量类别都汇入LLQ的优先级队列,而其他流量类别使用CBWFQ算法。
以下示例提供了一种配置,该配置将此流量与总计10M的实时流量汇聚到单个优先级队列中进行匹配,但每个类别分别监管1M VoIP,4M广播视频和5M交互式视频。
避免拥塞
缓冲内存是任何接口上的有限资源,并且在排队缓冲区时,填充满的数据包可能会在到达时(尾部丢弃)或有选择地在填充所有缓冲区之前被丢弃。
队列填满时选择性丢弃数据包称为避免拥塞。排队算法管理队列的前端,拥塞避免机制管理队列的后端。
拥塞避免机制最适合基于TCP的应用程序,因为选择性地丢弃数据包会导致TCP窗口机制回退并将流量速率调整为可管理的速率。TCP具有内置的流控制机制,该机制通过提高业务流的传输速率(即使受缓冲区和窗口大小限制)来运行,直到发生数据包丢失为止。
此时,TCP突然抑制传输速率,并逐渐开始使传输速率再次升高。
下图显示了尾部丢弃对TCP流量的次佳带宽利用率。因此,随机丢弃拥塞避免机制在管理TCP流量方面更为有效。
尽管此图可能有些理论化,但确实从视觉上说明了管理TCP流量排队的效果-实际上,这些“波动”可能会或多或少地发生,具体取决于实际的流量特征和流模式。
随机早期检测(RED)
RED通过在队列填充之前随机丢弃数据包来抵消TCP全局同步的影响(TCP会话进行定期的同步交换,这些交换会在网络上引起额外的流量;如果它们一次命中,则会导致全局同步事件)。容量。
像丢弃尾部那样随机丢弃数据包,而不是一次丢弃所有数据包,可以避免TCP流的全局同步。超过最小定义队列阈值时,RED会监视缓冲区深度并对随机数据包执行早期丢弃(丢弃)操作。
请注意,用户数据报协议(UDP)不包含固有的重试逻辑,因此,从狭义的理论意义上讲,拥塞避免技术对管理基于UDP的流量没有显着影响。
Cisco IOS软件不支持纯RED。它支持加权RED。但是,如果分配给接口或类的所有数据包都具有相同的区分服务代码点(DSCP)标记,那么有效的结果策略就是RED。
加权随机早期检测
Cisco IOS拥塞避免机制的主要原理是WRED。数据包丢弃选择的随机性可能会受到IPP或DSCP表示的流量权重的影响。
具有较低IPP值的数据包比具有较高IP值的数据包被更积极地丢弃。(例如,与IPP 6相比,将更积极地删除IPP 1)。
基于DSCP的WRED权重由“确保转发(AF)”丢弃首选项值表示,较高的AF丢弃首选项数据包会更主动地丢弃。(例如,从统计上讲,AF23的下降幅度要比AF22的下降幅度大,而AF22在统计上比AF21下降幅度更大。)
WRED还可以用于设置IP显式拥塞通知(ECN)位,以指示在传输过程中经历了拥塞。下图说明了基于DSCP的WRED操作。
使用random-detect 命令触发的WRED使能WRED。如果使用了可选关键字dscp-based,则将导致基于DSCP的WRED。只要功能可用,通常应使用此功能。