QoS
为什么需要qos phb disable命令
华为文档定义:
qos phb disable命令用来配置接口禁止使能在接口的下行转发时检查PHB (Per-Hop Behavior)表的功能。
进行简单流分类时有两个过程:
- 上行查询BA(Behavior Aggregate)表,将路由器外部业务优先级映射成内部业务优先级;
- 下行查询PHB(Per Hop Behavior)表,将内部业务优先级再映射成外部业务优先级。
在简单流分类的下行,由于报文的服务等级、颜色等信息被存放在PHB表中,当报文转发时,检查PHB表,识别报文的业务优先级,进而根据DS域中的映射关系将路由器内部业务优先级映射成外部业务优先级。接口配置简单流trust upstream命令后,下行会执行PHB,可以配置qos phb disable命令,使报文在接口下行转发时不会检查PHB表。
仔细看映射表,会发现一个现象,在RFC定义的AF,EF,CS0,CS6和没有RFC定义的CS7可以正常映射并且反映射,然后不在RFC定义的,以及RFC定义的CS1,CS2,CS3,CS4,CS5(下表❓部分)都不能被正常进行反映射。
[!tip] 反映射为什么会出现问题? ① 是队列限制导致的,华为8个队列,无法再放入CS1~CS5,所以用AFx~EF代替 ② 由于用AF-EF代替,导致冲突,比如DSCP8和10都对应AF1+Green,那么比如出方向就会映射为一个值,那么只能牺牲CS1这个不在队列里面的DSCp值了。
| DSCP In | Service | Color | DSCP Out | RFC | PHB | Result |
|---|---|---|---|---|---|---|
| 0 | BE | Green | 0 | RFC 2474 & 4594 | CS0 | ✅ |
| 1~7 | BE | Green | 0 | |||
| 8 | AF1 | Green | 10 | RFC 2474 & 4594 | CS1 | ❓ |
| 9 | BE | Green | 0 | |||
| 10 | AF1 | Green | 10 | RFC 2597 & 4594 | AFxy | ✅ |
| 11 | BE | Green | 0 | |||
| 12 | AF1 | Yellow | 12 | RFC 2597 & 4594 | AFxy | ✅ |
| 13 | BE | Green | 0 | |||
| 14 | AF1 | Red | 14 | RFC 2597 & 4594 | AFxy | ✅ |
| 15 | BE | Green | 0 | |||
| 16 | AF2 | Green | 18 | RFC 2474 & 4594 | CS2 | ❓ |
| 17 | BE | Green | 0 | |||
| 18 | AF2 | Green | 18 | RFC 2597 & 4594 | AFxy | ✅ |
| 19 | BE | Green | 0 | |||
| 20 | AF2 | Yellow | 20 | RFC 2597 & 4594 | AFxy | ✅ |
| 21 | BE | Green | 0 | |||
| 22 | AF2 | Red | 22 | RFC 2597 & 4594 | AFxy | ✅ |
| 23 | BE | Green | 0 | |||
| 24 | AF3 | Green | 26 | RFC 2474 & 4594 | CS3 | ❓ |
| 25 | BE | Green | 0 | |||
| 26 | AF3 | Green | 26 | RFC 2597 & 4594 | AFxy | ✅ |
| 27 | BE | Green | 0 | |||
| 28 | AF3 | Yellow | 28 | RFC 2597 & 4594 | AFxy | ✅ |
| 29 | BE | Green | 0 | |||
| 30 | AF3 | Red | 30 | RFC 2597 & 4594 | AFxy | ✅ |
| 31 | BE | Green | 0 | |||
| 32 | AF4 | Green | 34 | RFC 2474 & 4594 | CS4 | ❓ |
| 33 | BE | Green | 0 | |||
| 34 | AF4 | Green | 34 | RFC 2597 & 4594 | AFxy | ✅ |
| 35 | BE | Green | 0 | |||
| 36 | AF4 | Yellow | 36 | RFC 2597 & 4594 | AFxy | ✅ |
| 37 | BE | Green | 0 | |||
| 38 | AF4 | Red | 38 | RFC 2597 & 4594 | AFxy | ✅ |
| 39 | BE | Green | 0 | |||
| 40 | EF | Green | 46 | RFC 2474 & 4594 | CS5 | ❓ |
| 41~45 | BE | Green | 0 | |||
| 46 | EF | Green | 46 | RFC 3246 | EF | ✅ |
| 47 | BE | Green | 0 | |||
| 48 | CS6 | Green | 48 | RFC 2474 & 4594 | CS6 | ✅ |
| 49~55 | BE | Green | 0 | |||
| 56 | CS7 | Green | 56 | RFC 2474 & 4594 | CS7 | ✅ |
| 57~63 | BE | Green | 0 |
HQoS
HQoS = Hierarchical Quality of Service
传统的QoS采用一级调度,举个例子,如果有2个用户user1和user2,两个用户都有相同的DSCP(比如46),那么进入到路由器都是一个队列(比如EF),如果EF拥塞了,那么路由器就会随机丢弃里面的流量,假如User1的流量比User2更加重要,那也无法保证
HQoS简单的说就是这之前一级队列的基础上多加了几级虚拟队列(有三级和五级等,厂商实现不一样),这之前进行调度,这样就可以对不同的用户进行不同的优先级设置,比如User1优先级高,那么相同队列拥塞的时候先丢弃User2的流量以此来包装User1的流量
下面是官方的图片: 普通QoS调度
HQoS调度
- 叶子节点: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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
#





