HQoS = Hierarchical Quality of Service
传统的QoS采用一级调度,举个例子,如果有2个用户user1和user2,两个用户都有相同的DSCP(比如46),那么进入到路由器都是一个队列(比如EF),如果EF拥塞了,那么路由器就会随机丢弃里面的流量,假如User1的流量比User2更加重要,那也无法保证
![[Pasted image 20250430225301.png]]
HQoS简单的说就是这之前一级队列的基础上多加了几级虚拟队列(有三级和五级等,厂商实现不一样),这之前进行调度,这样就可以对不同的用户进行不同的优先级设置,比如User1优先级高,那么相同队列拥塞的时候先丢弃User2的流量以此来包装User1的流量
![[Pasted image 20250430225740.png]]
下面是官方的图片:
普通QoS调度
![[1.png]]
HQoS调度
![[2.png]]
- 叶子节点:FQ(Flow Queue)队列
- 每个用户的数据流都可以划分为1~8个优先级,即每个用户可以使用1~8个FQ
- 中间节点:SQ(Subscriber Queue)
- 一个SQ代表一个用户或者业务
- 根节点:GQ(Group Queue)
- 多个用户定义为一个用户组GQ
下面举例说明FQ、SQ、GQ及其关系
- 有2个家庭用户,User1和User2
- 要求对每个用户的总带宽限制在120Mbps以内,保证带宽为100Mbps,每个用户的VoIP和IPTV的带宽保证分别为60Mbps和40Mbps,其他业务不做带宽保证,2个用户的总带宽为150Mbps
![[Pasted image 20250430232137.png]]
```bash
flow-queue user1
queue af4 wfq shaping 40000 # --> IPTV
queue ef pq shaping 60000 # --> VoIP
#
user-group-queue user1
shaping 150000 outbound
#
qos-profile user1
user-queue cir 100 pir 120 flow-queue user1 user-group-queue user1
#
flow-queue user2
queue af4 wfq shaping 40000 # --> IPTV
queue ef pq shaping 60000 # --> VoIP
#
user-group-queue user2
shaping 150000 outbound
#
qos-profile user2
user-queue cir 100 pir 120 flow-queue user1 user-group-queue user2
#
interface GigabitEthernet 1/0/0.100
vlan-type dot1q 100
qos-profile user1 outbound
#
interface GigabitEthernet 1/0/0.200
vlan-type dot1q 200
qos-profile user2 outbound
#
```