路由器上的 QoS 比交换机多了「进方向」与「整形」两块。 监管是超了就丢,整形是超了就缓存——前者伤 TCP,后者要缓存。
上一节讲「谁能进」,这一节讲「进去之后谁先走」。 这一节的重点是「什么时候 QoS 才有意义」——大部分时候它没意义。
一、五个动作分别在哪儿做
动作 在哪儿做 干什么
分类与标记 进方向 打 DSCP 或优先级 监管(policing) 进方向 超了就丢或降级 整形(shaping) 出方向 超了就缓存、慢慢发 队列(queueing) 出方向 谁先走 丢弃(WRED) 出方向 拥塞前提早丢
「标记在最靠边的地方做」是 QoS 的第一原则:在接入层就打上 DSCP,核心层只管信任与排队。 如果核心层自己猜,那同一个业务在不同位置会被标成不同的值。
二、监管与整形的区别
监管:超了就丢。简单,但对 TCP 很粗暴——丢了要重传,实际吞吐反而更低。 整形:超了就缓存,排队慢慢发。平滑,但需要缓存,会加延迟。
选择的原则:入口方向用监管(省资源),出口方向用整形(保平滑)。 这也解释了为什么「限速」通常配在入口、「适配运营商带宽」配在出口。
三、整形的缓存要多少
一条 100 Mbps 链路整形到 50 Mbps,超出的部分要缓存多久?这取决于「允许多大的突发」。
允许突发 10 毫秒 → 要缓存约 488 KB。允许突发 50 毫秒 → 约 2441 KB。 允许突发 100 毫秒 → 约 4882 KB。
突发 100 毫秒就要近 5 MB 缓存——这就是为什么低端路由器做不了精确整形:缓存不够,只能丢。 而一丢就退化成「监管」,整形的好处全没了。
四、QoS 只在拥塞点有意义
如果链路利用率长期不到 50%,配 QoS 一点效果都没有——因为根本没有排队。
所以「网慢」的正确排查顺序是:一、是不是真的拥塞(看接口利用率与队列丢弃计数); 二、是不是丢包(看 CRC 错误、看上游);三、才是 QoS。
反过来说,QoS 也不能凭空造带宽:一条 10 Mbps 的线,配了 QoS 也不会变成 20 Mbps, 它只能决定「谁先被牺牲」。 把这句话讲给业务方听,比讲技术细节有用。
五、动手 Demo:路由器上的 QoS,与交换机有什么不同
这段列出五个动作的方向与作用,再按「100 Mbps 整形到 50 Mbps」算四档突发时间各需要多少缓存。
for ms in (10, 50, 100, 500):
need = 50 * 1000000 // 8 * ms // 1000
P(u" 突发 %d 毫秒:要缓存 %s 字节。" % (ms, format(need, u",")))
实跑输出:
--------------------------------------------------------------------
路由器上的 QoS,与交换机有什么不同
--------------------------------------------------------------------
**交换机上的 QoS 主要管「出队列」;路由器上的 QoS 还要管「进方向」与「整形」。**
动作 在哪儿做 干什么 典型场景
---------------------------------------------------------------------------
分类与标记 进方向 打 DSCP/优先级 边缘标记
监管(policing) 进方向 超了就丢或降级 限制某部门带宽
整形(shaping) 出方向 超了就缓存、慢慢发 适配运营商带宽
队列(queueing) 出方向 谁先走 保证语音
丢弃(WRED) 出方向 拥塞前提早丢 避免全局同步
**「监管」与「整形」的区别值得说清**:
· **监管**:超了就丢。**简单,但对 TCP 很粗暴**——丢了要重传,实际吞吐更低。
· **整形**:超了就缓存,排队慢慢发。**平滑,但需要缓存,会加延迟。**
**算一下整形的缓存需求**:一条 100 Mbps 链路整形到 50 Mbps,**超出的部分要缓存多久?**
允许突发 10 毫秒:要缓存 500,000 字节(约 488 KB)。
允许突发 50 毫秒:要缓存 2,500,000 字节(约 2441 KB)。
允许突发 100 毫秒:要缓存 5,000,000 字节(约 4882 KB)。
允许突发 500 毫秒:要缓存 25,000,000 字节(约 24414 KB)。
**突发 100 毫秒就要 625 KB 缓存**——**这就是为什么低端路由器做不了精确整形**:缓存不够,只能丢。
**最后一条实践**:**QoS 只在「拥塞点」有意义**。
如果链路利用率长期不到 50%,配 QoS 一点效果都没有——**因为根本没有排队。**
**所以「网慢」先查「是不是真的拥塞」,别急着上 QoS。**
「488 KB」这个数是算出来的:50 Mbps 的差额乘以 10 毫秒,再除以 8 换成字节。 注意这里用的是「差额」不是「总带宽」——整形只需要缓存超出的那部分。
「低端设备只能丢」这一句是选型要点:很多家用或小型设备号称支持 QoS, 实际只有「优先级队列」没有「整形」,所以它做不了「适配 50 Mbps 专线」这种事。
最后一段「QoS 不能造带宽」要反复讲:现场最常见的误解就是「网慢,上 QoS」。 QoS 是分配机制,不是扩容机制。 先确认瓶颈在哪一段,再谈分配。
30 秒实验
- 看你路由器的接口利用率,判断有没有真的拥塞。
- 查一下队列的丢弃计数,看有没有在丢包。
- 想一想:如果链路只用了 30%,配 QoS 会有用吗?
常见误区
- 以为 QoS 能提高带宽。只能决定谁先被牺牲。
- 以为监管与整形差不多。一个丢、一个缓存,效果相反。
- 以为标记该在核心做。要在最靠边的接入层做。
自测三问(点开对答案)
1. 监管与整形的根本区别是什么? —— 监管超了就丢,整形超了就缓存排队慢慢发。 2. 为什么低端路由器做不了精确整形? —— 整形需要足够缓存,缓存不够只能丢,就退化成监管。 3. QoS 什么时候才有效? —— 只在发生拥塞的链路上有效,利用率低时没有任何作用。下一节:一台设备当几台用——虚拟路由器。
- ☐ (本节完,下一节 03.06.09 虚拟路由器)