目录
(二)WRR(Weighted Round Robin,加权轮询)
(三)WFQ(Weighted Fair Queuing,加权公平队列)
(四)CBQ(Class-Based Queuing,基于类的队列)
在网络世界中,随着数据流量的持续增长,网络拥塞问题日益凸显。为了保障网络的高效运行,提供稳定且高质量的服务,QoS(Quality of Service,服务质量)技术应运而生。其中,拥塞管理和拥塞避免是 QoS 的关键组成部分,它们相互协作,共同维护网络的流畅性。
一、QOS 拥塞管理
拥塞管理旨在当网络发生拥塞时,对报文进行合理的调度和处理,确保关键业务的报文能够优先转发,避免因拥塞导致业务质量下降。常见的拥塞管理队列技术丰富多样。
(一)PQ(Priority Queue,优先级队列)
PQ 会将报文根据优先级划分到不同队列,优先转发高优先级队列中的报文。这种方式适用于对实时性要求极高的业务,如语音和视频传输。然而,它存在一个明显的缺陷,如果高优先级队列持续有报文,低优先级队列可能长时间得不到调度,出现 “饿死” 现象。在华为设备上配置 PQ 的示例代码如下:
# 创建PQ队列模板
queue-profile name pq-profile
queue 7 priority high // 将队列7设置为高优先级
queue 6 priority high
queue 5 priority high
queue 0 priority low // 将队列0设置为低优先级
queue 1 priority low
queue 2 priority low
queue 3 priority low
queue 4 priority low
# 在接口应用队列模板
interface GigabitEthernet0/0/1
qos queue-profile pq-profile outbound
(二)WRR(Weighted Round Robin,加权轮询)
WRR 为每个队列分配一个权重,按照权重比例依次对队列进行调度。它能保证每个队列都有机会获得带宽,避免了低优先级队列被 “饿死” 的情况。但对于一些对实时性要求严格的业务,其公平调度的特性可能无法满足需求。华为设备配置 WRR 的代码示例:
# 创建WRR队列模板
queue-profile name wrr-profile
queue 0 wrr-weight 1 // 队列0权重设为1
queue 1 wrr-weight 2 // 队列1权重设为2,以此类推
queue 2 wrr-weight 3
queue 3 wrr-weight 4
queue 4 wrr-weight 5
queue 5 wrr-weight 6
queue 6 wrr-weight 7
queue 7 wrr-weight 8
# 在接口应用队列模板
interface GigabitEthernet0/0/1
qos queue-profile wrr-profile outbound
(三)WFQ(Weighted Fair Queuing,加权公平队列)
WFQ 根据报文的流特征将其划分到不同队列,并为每个队列分配权重。它能为不同的流提供公平的带宽分配,适用于网络中存在多种不同类型流量的场景。在 CBQ 中,BE(Best Effort)队列默认使用 WFQ 调度算法。配置示例如下:
# 创建流分类
traffic classifier wfq-classifier
if-match acl 2000
# 创建流行为,指定WFQ调度
traffic behavior wfq-behavior
queue wfq // 指定使用WFQ调度
# 创建流策略并关联流分类和流行为
traffic policy wfq-policy
classifier wfq-classifier behavior wfq-behavior
# 在接口应用流策略
interface GigabitEthernet0/0/1
traffic-policy wfq-policy outbound
(四)CBQ(Class-Based Queuing,基于类的队列)
CBQ 是一种非常灵活且常用的拥塞管理技术。它可以根据报文的各种特征,如 ACL、五元组等,将报文分类并放入不同队列,还能为每个队列配置带宽保证。CBQ 提供了 EF(Expedited Forwarding)、AF(Assured Forwarding)和 BE 三种队列。EF 队列优先级最高,常用于语音和实时视频业务;AF 队列次之,可用于 FTP、邮件等业务;BE 队列优先级最低,用于尽力而为的业务。配置 CBQ 时,首先要定义流分类、流行为和流策略,然后在接口上应用流策略。下面是配置 CBQ 的代码示例:
# 创建ACL,用于匹配报文
acl number 2000
rule permit source 1.1.1.1 0
# 创建流分类,关联ACL
traffic classifier cbq-classifier
if-match acl 2000
# 创建流行为,指定进入EF队列并设置带宽
traffic behavior cbq-behavior
queue ef bandwidth 1000 kbps // 将匹配的报文放入EF队列,带宽设为1000kbps
# 创建流策略,关联流分类和流行为
traffic policy cbq-policy
classifier cbq-classifier behavior cbq-behavior
# 在接口应用流策略
interface GigabitEthernet0/0/1
traffic-policy cbq-policy outbound
不同的队列技术可以相互搭配使用,以发挥各自的优势。例如,PQ + WRR 的组合,将部分队列配置为 PQ 调度,用于保障关键业务的低延迟转发;其余队列配置为 WRR 调度,确保其他业务也能获得一定的带宽。
二、QOS 拥塞避免
当网络拥塞发生时,队列可能会被填满,此时就会出现报文丢弃的情况。传统的尾丢弃(Tail Drop)方式会在队列满时丢弃新到达的报文,这种方式会引发一系列问题。
(一)TCP 全局同步
TCP 协议通过 ACK 报文来检测网络拥塞。当大量 TCP 报文因尾丢弃被丢弃时,TCP 会认为网络拥塞,从而降低窗口大小,减少流量发送。这会导致网络中 TCP 流量出现 “一会儿高一会儿低” 的现象,即 TCP 全局同步,严重影响网络的稳定性和传输效率。
(二)TCP 饿死现象
当 TCP 流量因拥塞而减少发送时,UDP 流量可能会占用 TCP 腾出的缓存空间。由于 UDP 没有拥塞控制机制,会持续发送报文,导致后续的 TCP 报文再次被丢弃,TCP 流量进一步减少,最终可能出现 TCP 饿死现象。
(三)无差别丢弃
尾丢弃和早期随机检测(RED)在丢弃报文时,无法区分报文的重要性,可能会将关键业务的报文丢弃,影响业务质量。
为了解决这些问题,加权随机早期检测(WRED,Weighted Random Early Detection)技术应运而生。WRED 可以根据报文的 DSCP 值或 IP 优先级,为不同优先级的报文设置不同的丢弃门限和丢弃概率。当队列长度达到低门限时,开始随机丢弃低优先级的报文;随着队列长度增加,丢弃概率逐渐增大;当达到高门限时,按照最大丢弃概率丢弃报文。配置 WRED 的步骤如下:
- 创建丢弃模板:定义不同优先级报文的丢弃门限和丢弃概率。
# 创建WRED丢弃模板
wred-profile name wred-profile
dscp-based
dscp 0 low-limit 20 high-limit 40 discard-probability 10 // 对于DSCP值为0的报文,低门限20%,高门限40%,最大丢弃概率10%
dscp 1 low-limit 30 high-limit 45 discard-probability 15
dscp 2 low-limit 35 high-limit 50 discard-probability 20
- 在队列中应用丢弃模板:将创建好的丢弃模板应用到相应的队列。
# 创建队列配置模板
queue-profile name queue-profile
queue 0 wfq // 队列0使用WFQ调度
queue 0 wred-profile wred-profile // 在队列0应用WRED丢弃模板
# 在接口应用队列配置模板
interface GigabitEthernet0/0/1
qos queue-profile queue-profile outbound
通过 WRED 技术,可以优先丢弃不太重要的报文,减少对关键业务的影响,延缓 TCP 全局同步的到来,提高网络的稳定性和可靠性。
QoS 的拥塞管理和拥塞避免技术对于保障网络的高效运行至关重要。通过合理选择和配置拥塞管理队列技术,以及采用有效的拥塞避免机制,能够确保网络在拥塞情况下仍能为关键业务提供高质量的服务,提升用户的网络体验。在实际的网络部署中,需要根据网络的业务需求、流量特征等因素,灵活运用这些技术,打造稳定、可靠的网络环境。