📡 第二章 彻底理解L2交换机
📄 一句话概括

QoS 做两件事:把包分类、让它插队。802.1p 给了 3 个 bit,所以有 8 个优先级。 语音占带宽不到 0.2%,但它必须严格优先——因为怕的不是带宽,是排队抖动。

📝 本节和前面几节的关系

上一节讲怎么看流量,这一节讲怎么给流量排队。 这一节要算:语音的带宽占比与排队延迟,这两个数差距巨大,正是 QoS 存在的理由。

一、八个优先级与两种排队法

802.1p 有 3 bit,8 个优先级(0 到 7)。7 给网络控制、6 给语音信令、5 给语音媒体、4 给视频、 0 与 1 给普通上网。

严格优先(SP):高优先级有包就发,低优先级一直等。延迟最小,但可能饿死。 加权轮询(WRR):按权重轮流发。不会饿死,但高优先级要排队。

实践是混着用:语音与协议报文用严格优先,其余按权重轮询。

二、语音为什么要严格优先

一路 G.711 语音 64 kbps,加头约 80 kbps,按 100 kbps 算。在 100 Mbps 链路上只占 0.1%。

所以语音的问题从来不是带宽,是延迟与抖动。 语音能忍端到端 150 毫秒,但抖动只能忍 30 毫秒。

如果语音排在一个大文件后面:一个 1518 字节帧在 100 Mbps 上要发 121 微秒, 排几十个大帧就是几毫秒的抖动。再遇上拥塞队列,就断续了。

三、最常见的失败:只配一跳

QoS 必须在每一跳都开。中间任何一跳不开,前面配得再好也白搭。

这是 QoS 最常见的失败原因:核心配了、接入忘了,结果语音在接入层就被打乱了。

另一条:分类要尽量靠边缘做。 在接入层就打上标记,后面所有设备只按标记排队——这叫「信任边界」,是 QoS 设计的第一步。

四、动手 Demo:语音的带宽占比与一个最大帧的发送时间

这段算 100 Mbps 与 1000 Mbps 两种链路上一路语音(100 kbps)的占用比例, 以及一个 1518 字节最大帧的发送时间。

for bw in (100, 1000):
    frac = 0.1 / bw * 100
    tmax = 1518 * 8 / (bw * 1e6) * 1e6
    T([u"%d Mbps" % bw, u"%.3f%%" % frac, u"%.1f 微秒" % tmax], [0, 0, 0])

实跑输出:

--------------------------------------------------------------------
QoS 的八个队列,语音为什么必须严格优先
--------------------------------------------------------------------
**QoS 在交换机上做的第一件事是「分类」,第二件是「排队」。**802.1p 给了 3 个 bit,
所以有 8 个优先级(0 到 7)。

  优先级     常见用途                 队列行为
  ------------------------------------------------
  7          网络控制(协议报文)     最高
  6          语音信令                 很高
  5          语音媒体流               很高
  4          视频                     较高
  3          关键业务数据             中
  2          事务性数据               中低
  0/1       普通上网、批量传输       最低

**严格优先(SP)与加权轮询(WRR)是两种排队法**,差别在「低优先级会不会饿死」:

· **严格优先**:高优先级队列有包就发,低优先级一直等。**延迟最小,但可能饿死。**
· **加权轮询**:按权重轮流发。**不会饿死,但高优先级要排队。**

**实践中是混着用**:语音、协议报文用严格优先,其余按权重轮询。

**算一下语音为什么要严格优先。**一路 G.711 语音是 64 kbps,加 IP/UDP/RTP 头约 80 kbps,
实际按 100 kbps 算:

  链路          一路语音占用     一个最大帧的发送时间
  -------------------------------------------------------
  100 Mbps      0.100%           121.4 微秒
  1000 Mbps     0.010%           12.1 微秒

**带宽占用只有 0.1%,几乎不占地方——所以语音的问题从来不是带宽,是延迟。**

**关键在这一行**:如果语音排在一个大文件后面,一个大帧在 100 Mbps 上要发 121 微秒。
要是队列里排了几十个大帧,语音就要等好几毫秒。
**语音能忍的端到端延迟是 150 毫秒,但抖动只能忍 30 毫秒**——排队抖动超过这个数,声音就开始断续。

**所以语音队列必须严格优先,而且要在**每一跳**都开。**中间任何一跳不开,
前面配得再好也白搭——**这是 QoS 最常见的失败原因。**

0.1% 与 0.01%——这两个数就是「语音几乎不占带宽」的证据。 所以「给语音留 30% 带宽」这种做法是浪费,语音只需要很小的带宽加很高的优先级。

121 微秒那一列才是重点:一个最大帧在 100 Mbps 上要占 121 微秒, 如果语音排它后面,就要等 121 微秒。排 30 个就是 3.6 毫秒——已经接近语音抖动的容忍上限了。

注意千兆上只要 12.1 微秒,所以「链路越快, QoS 越不重要」这个说法有一定道理——但只要出现拥塞,排队还是会回来。

30 秒实验

  1. 查交换机支不支持 802.1p 优先级。
  2. 看语音 VLAN 有没有配优先级标记。
  3. 数一下从终端到服务器之间有几台设备要配 QoS。

常见误区

  1. 给语音留很多带宽。它只需要很小带宽加高优先级。
  2. 只在一台设备上配 QoS。要在每一跳都开。
  3. 以为 QoS 能增加带宽。它只是重新分配。
自测三问(点开对答案) 1. 802.1p 有几个优先级? —— 3 bit,8 个,编号 0 到 7。 2. 严格优先与加权轮询各有什么问题? —— 前者可能饿死低优先级,后者让高优先级排队。 3. 语音怕的是带宽还是抖动? —— 抖动。它只占 0.1% 带宽,但抖动超过 30 毫秒就断续。

下一节:第八个功能是名单——MAC 地址过滤。

相关笔记