上行一抖视频电话就花屏?华为路由器队列流量整形按业务给保证带宽
出口带宽受限的网络里,最折磨人的故障不是慢,而是抖。语音、视频、数据三类业务挤同一条上行链路,数据业务一阵批量传输涌上来,视频会议立刻花屏、语音断续——不是带宽总量不够,而是流量忽高忽低,没有哪类业务拿到过稳定的发送节奏。直接限速丢弃是一种办法,但丢掉的报文对实时业务同样是伤害。
流量整形走了另一条路:超出速率的报文不丢,先放进缓存,之后匀速向外发送,把一股一股的突发流量"熨平"成稳定输出。华为路由器按端口队列做整形,语音、视频、数据各自有保证带宽,互不抢占,链路上的抖动随之收敛。它与流量监管的本质差别就在这里——监管对超标流量直接丢弃,整形选择缓存等待,对不能丢也不能抖的实时业务,后者的思路明显更合适。
再看示例里三档带宽的数字,也能读出配置的思路:语音队列的保证带宽 3000kbit/s 反而比视频的 5000kbit/s 小——语音通话本身码率低,要的不是大带宽而是稳定节奏,整形给它的恰恰是匀速输出;视频带宽需求大,分档就高;数据业务 2000kbit/s 兜底,突发的批量传输被缓存慢慢放行,不会瞬间冲垮前两者。每队列一个承诺信息速率,队列之间各走各的节奏,这正是"按业务给保证带宽"的含义。
组网与配置
示例组网中,三台主机分别提供语音、视频、数据业务,通过 DeviceA 和 DeviceB 上送报文,经 DeviceC 与外部网络互通。连接语音主机的接口划分到 VLAN 10,视频到 VLAN 20,数据到 VLAN 30。三类业务的报文使用 802.1p 优先级标识,分别为 5、3、2。DeviceB 的上行口给出保证带宽:语音 3000kbit/s、视频 5000kbit/s、数据 2000kbit/s。
第一步,在 DeviceB 上创建 VLAN 并配置各接口,使用户能够通过 DeviceB 访问网络。创建 VLAN 10、20、30:
<HUAWEI> system-view
[HUAWEI] sysname DeviceB
[DeviceB] vlan batch 10 20 30
将接口 10GE0/0/1、10GE0/0/2 分别以 Trunk 方式加入 VLAN 10、VLAN 20 和 VLAN 30:
[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 20 30
[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 20 30
[DeviceB-10GE0/0/2] quit
第二步,配置 DeviceA 与主机端相连接口的端口优先级,以区分不同业务报文。在 DeviceA 上配置 10GE0/0/1、10GE0/0/2、10GE0/0/3 的端口优先级为 5、3、2,接口 10GE0/0/4 加入 VLAN 10、VLAN 20 和 VLAN 30:
<HUAWEI> system-view
[HUAWEI] sysname DeviceA
[DeviceA] vlan batch 10 20 30
[DeviceA] interface 10ge 0/0/1
[DeviceA-10GE0/0/1] portswitch
[DeviceA-10GE0/0/1] port link-type access
[DeviceA-10GE0/0/1] port default vlan 10
[DeviceA-10GE0/0/1] port priority 5
[DeviceA-10GE0/0/1] quit
[DeviceA] interface 10ge 0/0/2
[DeviceA-10GE0/0/2] portswitch
[DeviceA-10GE0/0/2] port link-type access
[DeviceA-10GE0/0/2] port default vlan 20
[DeviceA-10GE0/0/2] port priority 3
[DeviceA-10GE0/0/2] quit
[DeviceA] interface 10ge 0/0/3
[DeviceA-10GE0/0/3] portswitch
[DeviceA-10GE0/0/3] port link-type access
[DeviceA-10GE0/0/3] port default vlan 30
[DeviceA-10GE0/0/3] port priority 2
[DeviceA-10GE0/0/3] quit
[DeviceA] interface 10ge 0/0/4
[DeviceA-10GE0/0/4] portswitch
[DeviceA-10GE0/0/4] port link-type trunk
[DeviceA-10GE0/0/4] port trunk allow-pass vlan 10 20 30
[DeviceA-10GE0/0/4] quit
端口优先级是整条链路的"分拣起点":报文带着各自优先级进入 DeviceB,按值进入不同的端口队列,为下一步按队列整形铺路。
第三步,配置端口队列流量整形,限制语音、视频、数据三类业务的带宽。在 DeviceB 上配置端口队列流量整形,使三类业务的保证带宽分别为 3000kbit/s、5000kbit/s、2000kbit/s:
[DeviceB] interface 10ge 0/0/2
[DeviceB-10GE0/0/2] qos queue 5 shaping cir 3000
[DeviceB-10GE0/0/2] qos queue 3 shaping cir 5000
[DeviceB-10GE0/0/2] qos queue 2 shaping cir 2000
[DeviceB-10GE0/0/2] quit
三条命令就是全部核心配置:队列号对准端口优先级——队列 5 装语音、队列 3 装视频、队列 2 装数据,各自给一个承诺信息速率,超出的部分进缓存排队,整形后的流量匀速送出。
配置完成后,DeviceB 与 DeviceA 的配置脚本分别如下:
#
sysname DeviceB
#
vlan batch 10 20 30
#
interface 10GE0/0/1
portswitch
port link-type trunk
port trunk allow-pass vlan 10 20 30
#
interface 10GE0/0/2
portswitch
port link-type trunk
port trunk allow-pass vlan 10 20 30
qos queue 2 shaping cir 2000 kbps
qos queue 3 shaping cir 5000 kbps
qos queue 5 shaping cir 3000 kbps
#
return
#
sysname DeviceA
#
vlan batch 10 20 30
#
interface 10GE0/0/1
portswitch
port link-type access
port default vlan 10
port priority 5
#
interface 10GE0/0/2
portswitch
port link-type access
port default vlan 20
port priority 3
#
interface 10GE0/0/3
portswitch
port link-type access
port default vlan 30
port priority 2
#
interface 10GE0/0/4
portswitch
port link-type trunk
port trunk allow-pass vlan 10 20 30
#
return
脚本里整形命令带着 kbps 单位,操作步骤里不带——两种写法都能生效,设备落盘时按自身口径补全单位,属正常回显差异。
验证
在 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)
----------------------------------------------------------------------------------------------
0 0 0 0 0 0 -
10000000 0 0 0 0
----------------------------------------------------------------------------------------------
1 0 0 0 0 0 -
10000000 0 0 0 0
----------------------------------------------------------------------------------------------
2 2000 54584 0 0 0 -
2000 5676736 0 0 0
----------------------------------------------------------------------------------------------
3 5000 49648 0 0 0 -
5000 5163392 0 0 0
----------------------------------------------------------------------------------------------
4 0 0 0 0 0 -
10000000 0 0 0 0
----------------------------------------------------------------------------------------------
5 3000 49998 0 0 0 -
3000 5199792 0 0 0
----------------------------------------------------------------------------------------------
6 0 0 0 0 0 -
10000000 0 0 0 0
----------------------------------------------------------------------------------------------
7 0 0 0 0 0 -
10000000 0 0 0 0
----------------------------------------------------------------------------------------------
读这张表抓三列:队列 2、3、5 的 CIR 分别是 2000、5000、3000,与规划值逐一对上;Passed 计数在涨,说明整形后流量持续转发;Dropped 全为 0——这正是整形与监管的分野,缓存机制在起作用,突发没有被丢掉,而是被匀了出来。盯一段时间 Pass Rate,三个队列的速率曲线平稳不再大起大落,抖动问题即告收敛。
上行带宽的账要算在业务头上才有效。贵州诚鑫致达科技在做园区出口优化时,会先把各类业务的真实带宽基线测出来再定队列参数,避免拍脑袋给的数值反而制造新的瓶颈。你的上行链路是靠限速丢包还是整形缓存,欢迎留言说说。