流量整形
什么是流量整形
流量整形是对输出报文的速率进行控制,使报文以均匀的速率发送出去。
流量整形通常是为了使报文速率与下游设备相匹配。当从高速链路向低速链路传输数据,或发生突发流量时,带宽会在低速链路出口处出现瓶颈,导致数据丢失严重。这种情况下,需要在进入高速链路的设备出口处进行流量整形,如图6-10。
通过在上游设备的接口出方向配置流量整形,将上游不规整的流量进行削峰填谷,输出一条比较平整的流量(如图6-11),从而解决下游设备的瞬时拥塞问题。
流量整形的实现原理
流量整形通常使用缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下再均匀地发送这些被缓冲的报文。
路由器上,流量整形中令牌添加方式是周期性添加,添加的时间间隔为CBS/CIR,每次添加的令牌数为CBS个。
路由器上,流量整形之后的带宽计算不包括帧头和CRC,这与CAR相反。例如shaping 23Mbps,对于IPoE而言,是指IP流量为23Mbps,不包含帧头、CRC。
此外,流量整形中的CBS参数是否支持手工修改与产品类型、版本、单板类型相关。
流量整形是在队列调度之后,数据包在出队列的过程中进行的(队列及队列调度的相关介绍请参见本文下一章节“拥塞管理和避免”)。
流量整形分为两种:
- 队列流量整形:对接口的每个队列进行流量整形,区分优先级。
- 队列调度之后在出队的时候,对于不需要整形的报文,直接转发;对于需要进行整形的报文,则先进行令牌桶评估。
- 在令牌桶评估后,如果数据包速率符合要求,则被标记为绿色并转发;如果数据包速率超标,则当前正在出队的数据包仍然转发出去,同时,将该数据包所在队列的状态改为不可调度,等令牌桶填充了新的令牌时再调度此队列。队列的状态改为不可调度后,该队列允许报文继续入队,但入队满了的时候会丢弃报文。因此,虽然流量整形使超额的数据能够从接口平滑地输出,但并不表示流量整形永远不会丢包。
- 图6-12 队列流量整形过程
- 假设设备端口某队列配置shaping的CIR为1Mbps,PBS为2000 bytes,初始状态时C桶满(即C桶为2000 bytes),报文每毫秒填充1Mbps*1ms=1000bit=125bytes。
- 假设第1个到达的报文是1500 bytes时,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少1500 bytes,还剩500 bytes。
- 假设1ms之后,到达第2个报文1500 bytes。此时新增令牌125 bytes,加上C桶原来剩余的令牌500bytes,此时C桶共有625 bytes,令牌数大于0,报文被转发,C桶此时剩余令牌为625 bytes-1500 bytes=-875 bytes。由于令牌桶减为负数,队列被暂停转发。
- 又过1ms后到达第3个报文1000 bytes,但C桶只有-875 bytes +125 bytes = - 750 bytes,依然为负数,因此队列被暂停转发。
- 假设又过6ms后到达第4个报文1500 bytes,此时C桶有- 750 bytes+125 bytes x 6 = 0个令牌,因此队列被暂停转发。
- 假设又过1ms后到达第5个报文1500 bytes,此时C桶有125 bytes令牌,因此第3个报文被转发。此时令牌桶剩余令牌数为125 bytes -1000 bytes = - 875 bytes,因此队列被暂停转发。
以上过程汇总如下:表6-1包序号
时刻
包长
报文处理前C桶令牌
报文处理后C桶剩余令牌
处理结果
处理前队列状态
处理后队列状态
-
-
-
2000
2000
-
可调度
可调度
1
0
1500
2000
500
第1个报文出队列
可调度
可调度
2
第1ms
1500
625
-875
第2个报文出队列
暂停调度
暂停调度
3
第2ms
1000
-750
-750
第3个报文出队列
暂停调度
暂停调度
4
第8ms
1500
0
0
第4个报文出队列
暂停调度
暂停调度
5
第9ms
1500
125
-875
第3个报文出队列
可调度
暂停调度
- 接口流量整形:也叫接口限速LR(Line rate),限制接口发送的所有报文(包括紧急报文)的总速率,是对整个出接口进行流量整形,不区分优先级。如图6-13,
- 队列调度之后在出队的时候,对所有队列的数据包总和进行令牌桶评估。
- 在令牌桶评估后,如果数据包总速率符合要求,则转发;如果数据包总速率超标(即令牌桶中的令牌不足),则接口暂停调度,等令牌足够时再继续调度。
端口整形的报文标记过程与队列整形原理一样,此不赘述。
流量整形的应用
流量整形的典型应用是基于下游网络节点的流量监管的SLA指标来控制本地流量的输出,减少报文丢失。
端口流量整形的应用
如图6-15,假设一个Hub-Spoke组网模式的企业,总部与分支机构通过ISP使用专线相连,其链路带宽为1Gbps。当所有分支同时向总部发送数据时,可能会在连接总部的ISP边缘节点造成拥塞。为了避免在ISP丢包,可以在各分支的边缘设备出口处进行端口流量整形。
队列流量整形的应用
如图6-16,假设一个Hub-Spoke组网模式的企业,总部与分支机构通过ISP使用专线相连,其链路带宽为1Gbps。分支机构访问Internet是经过总部的,而总部到Internet的链路只有100Mbps。如果所有分支机构以高速率同时访问Internet,则可能使分支机构及总部访问Internet的总web流量超过100Mbps,导致web流量在ISP被丢弃。
如果在分支机构的出口设备及总部访问Internet的出口设备上配置基于队列对web流量进行整形,可防止web流量的丢失。
整形精度调整-最后一公里QoS
最后一公里是指宽带接入交换机(如以太 DSLAM)到最终用户的这一段传输线路。在最后一公里,如图6-17,企业/家庭用户通常采用IPoE、PPPoE方式接入到以太 DSLAM,DSLAM再通过城域网接入到IP骨干网边缘设备BRAS/SR。
对于宽带接入的场景,BRAS/SR和DSLAM之间是以太链路,BRAS/SR采用以太封装报文,其流量整形是基于以太封装的。
即使用户和DSLAM之间也是以太链路,其封装开销也可能比BRAS/SR上的用户侧封装开销大。例如,BRAS/SR封装的以太报文不带VLAN Tag,用户和DSLAM之间采用VLAN或QinQ封装,其报文则携带了一层或两层VLAN TAG。
为了解决上述问题,可在BRAS/SR配置最后一公里QoS特性。最后一公里QoS是指设备在进行流量整形时,根据用户订购带宽和DSLAM下行接口带宽进行精度调整,通过调整报文字节对整形带宽进行补偿。
以上原因导致BRAS/SR无法自动推断出报文经过DSLAM封装后的总长度,需要手工配置补偿字节数overhead。
配置补偿字节数之后,对于DSLAM采用以太链路接入CPE的场景,BRAS/SR会自动根据转发的报文长度及配置的overhead,直接推断出报文经过DSLAM封装后的总长度,从而自动对整形带宽进行修正。
作为参考,下文给出了常见报文封装开销及几种典型场景下需要配置的补偿值。
封装类型 |
封装开销(字节) |
|
---|---|---|
PPP首部 |
2 |
|
Eth首部 |
14 |
|
VLAN首部 |
4 |
|
QinQ首部 |
8 |
|
AAL5封装 |
VC方式 |
AAL5 Header + AAL5 tail = 0 + 8 = 8 |
LLC Type1(无连接模式,如IPoE、PPPoE) |
AAL5 Header + AAL5 tail = 8 + 8 = 16 |
场景 |
配置补偿值(字节) |
---|---|
= VLAN header - QinQ header = - 4 |
|
= 0 - QinQ header = - 8 |