语音视频数据挤一条出口分不清先后?华为路由器按优先级映射分队列整形
出口带宽就那么宽,业务却有三六九等。语音电话丢两个包对面就听见滋滋声,视频会议抖一下画面就糊,普通的文件下载慢半分钟没人有意见——可是在设备眼里,这些报文如果不做标记,进的是同一个队列、抢的是同一份带宽,谁的运气好谁先走。等到高峰期一出流,最先烂掉的恰恰是最不能烂的语音。
华为路由器处理这个问题的思路分两步:先把带优先级标识的报文按规则映射进不同的队列,再给每个队列划一块保证带宽。示例里语音、视频、数据业务的报文使用 802.1p 优先级标识,分别为 6、5、2;接口带宽限制为 10000kbit/s,三块业务的保证带宽规划为语音 3000kbit/s、视频 5000kbit/s、数据 2000kbit/s。报文从用户侧设备上来,经本设备转给出口,靠 DiffServ 域里的映射规则各回各的队列,再用队列整形把每类业务的速率框死——总闸门一把,分闸门三把。这样配完的效果是:三类业务互相之间有了明确的带宽边界,谁也吃不掉谁;突发来得再猛,语音那三千的底始终留着。
组网与配置
官方示例中,用户侧的语音、视频、数据业务经 DeviceA、DeviceB 上送报文,由 DeviceC 与外部网络互通,本例的配置全部落在 DeviceB 上——报文从 DeviceB 的 interface1(10GE0/0/1)进、interface2(10GE0/0/2)出,可能在出口方向发生抖动,映射与整形就卡在这两口之间完成。先创建 VLAN 10 并把两个互联口以 Trunk 方式加入,让用户流量能通过 DeviceB:
<HUAWEI> system-view
[HUAWEI] sysname DeviceB
[DeviceB] vlan batch 10
[DeviceB] interface 10ge 0/0/1
[DeviceB-10GE0/0/1] portswitch
[DeviceB-10GE0/0/1] port link-type trunk
[DeviceB-10GE0/0/1] port trunk allow-pass vlan 10
[DeviceB-10GE0/0/1] quit
[DeviceB] interface 10ge 0/0/2
[DeviceB-10GE0/0/2] portswitch
[DeviceB-10GE0/0/2] port link-type trunk
[DeviceB-10GE0/0/2] port trunk allow-pass vlan 10
[DeviceB-10GE0/0/2] quit
第二步,配置优先级映射。创建 DiffServ 域 ds1,把三类业务自带的 802.1p 优先级分别映射为不同的 PHB 行为,让语音进 CS7、视频进 EF、数据进 AF2——PHB 行为对应设备内部的本地队列,映射做完,报文一进设备就知道自己该排哪条队:
[DeviceB] diffserv domain ds1
[DeviceB-dsdomain-ds1] 8021p-inbound 6 phb cs7 //将不同业务携带的802.1p优先级映射为不同的PHB行为,保证其分别进入不同的队列
[DeviceB-dsdomain-ds1] 8021p-inbound 5 phb ef
[DeviceB-dsdomain-ds1] 8021p-inbound 2 phb af2
[DeviceB-dsdomain-ds1] quit
[DeviceB] interface 10ge 0/0/1
[DeviceB-10GE0/0/1] trust 8021p outer
[DeviceB-10GE0/0/1] trust upstream ds1
[DeviceB-10GE0/0/1] quit
入接口上两条 trust 命令是映射生效的前提:trust 8021p outer 声明本接口信任报文外层的 802.1p 优先级,trust upstream ds1 指定用哪个 DiffServ 域的规则来做这份翻译。没有这两句,报文带着优先级进来设备也不看,映射规则就是空转。
第三步,在出接口上配置接口整形,把总速率限制在 10000kbit/s:
[DeviceB] interface 10ge 0/0/2
[DeviceB-10GE0/0/2] qos lr cir 10000 outbound //在接口的流量出方向配置基于接口的限速,限制总带宽
第四步,配置端口队列整形。根据 PHB 与本地优先级缺省的映射关系,CS7 对应队列 7、EF 对应队列 5、AF2 对应队列 2,三条命令把三类业务的保证带宽分别落实:
[DeviceB-10GE0/0/2] qos queue 7 shaping cir 3000 //根据PHB与本地优先级缺省的映射关系,配置进入队列7的语音报文带宽为3000kbit/s
[DeviceB-10GE0/0/2] qos queue 5 shaping cir 5000
[DeviceB-10GE0/0/2] qos queue 2 shaping cir 2000
[DeviceB-10GE0/0/2] quit
配置完成后,DeviceB 的配置脚本如下:
#
sysname DeviceB
#
vlan batch 10
#
diffserv domain ds1
8021p-inbound 6 phb cs7 green
#
interface 10GE0/0/1
portswitch
port link-type trunk
port trunk allow-pass vlan 10
trust 8021p outer
trust upstream ds1
#
interface 10GE0/0/2
portswitch
port link-type trunk
port trunk allow-pass vlan 10
qos lr cir 10000 kbps outbound
qos queue 2 shaping cir 2000 kbps
qos queue 5 shaping cir 5000 kbps
qos queue 7 shaping cir 3000 kbps
#
return
验证
在 DeviceB 上查看 10GE0/0/2 出方向的队列统计计数:
[DeviceB] display qos queue statistics interface 10ge 0/0/2
Queue CIR/PIR Passed Pass Rate Dropped Drop Rate Drop Time
(% or kbps) (Packets/Bytes) (pps/bps) (Packets/Bytes) (pps/bps)
----------------------------------------------------------------------------------------------
2 2000 54584 0 0 0 -
2000 5676736 0 0 0
----------------------------------------------------------------------------------------------
5 5000 49648 0 0 0 -
5000 5163392 0 0 0
----------------------------------------------------------------------------------------------
7 3000 49998 0 0 0 -
3000 5199792 0 0 0
----------------------------------------------------------------------------------------------
队列 2、5、7 的 CIR 分别是 2000、5000、3000,与规划一一对应,三个队列都有通过的报文计数、零丢弃——说明映射把三类业务正确分了队,整形也给各自的带宽兜住了底。每段第二行是字节口径的计数与速率,与首行的包口径互相印证。空队列 0、1、3、4、6 的 CIR/PIR 显示为接口总速率 10000000,未配置的队列不受限,这也是规划外的流量留活路。
整套配置的关键在于先想清楚"谁进哪条队"再谈"每队分多少"。贵州诚鑫致达科技给客户调语音专网时,第一步永远是核两端的 802.1p 标识与映射规则是否对得上——映射错一层,后面的带宽规划全是白搭。你们的出口 QoS 是怎么给业务排队的,欢迎留言交流。