☰
优先级调度(10月9日)
2026/10/15 4:06:29 网站建设 项目流程

802.1Q标签的TCI字段中,Priority占3bit

报文携带的802.1p CoS → 交换机内部本地优先级 → 硬件队列号

cos的优先级及对应的报文:

802.1p值IEEE推荐业务华为内部优先级→队列H3C S125-X默认队列
0Best Effort(普通数据)BE → Q0Q2← 反例
1BackgroundAF1 → Q1Q0← 反例
2Excellent EffortAF2 → Q2Q1← 反例
3Critical ApplicationsAF3 → Q3Q3
4Video(流媒体)AF4 → Q4Q4
5Voice(VoIP)EF → Q5Q5
6Internetwork Control(OSPF等)CS6 → Q6Q6
7Network Control(BGP等)CS7 → Q7Q7

数字越大优先级越高,这也是802.1p、IP Precedence、MPLS EXP共通的一致约定。

队列管理:

一、RED方法:

1. 简介

RED方法:Random Early Detection(随机早期检测),是一种主动式队列管理算法,用来避免网络拥塞。

简单说:路由器/交换机在队列还没满时,就随机丢弃少量数据包,提前通知发送端“要慢了”,从而避免队列填满后大量丢包。

传统尾部丢弃是队列满了之后,新来的包全部丢掉。这种方法容易造成所有 TCP 连接同时感受到丢包、同时降速、又同时恢复,带宽利用率暴跌,延迟剧烈抖动。

RED是别等满了再扔,在快要满的时候就开始随机扔几个包。

2. RED 怎么工作

RED 维护两个阈值:

  • min_th:最小阈值(比如队列占 30%)
  • max_th:最大阈值(比如队列占 70%)

还有一个max_p(最大丢弃概率,比如 10%):

当前平均队列长度

RED 行为

< min_th

不丢包,正常转发

min_th ~ max_th

按线性增长的概率随机丢包(概率从 0 → max_p)

> max_th

所有新来包都丢(强制拥塞控制)

关键:RED 用的是指数加权移动平均(EWMA)​ 计算的“平均队列长度”,不是瞬时长度,避免对突发流量过度反应。

3. RED 的效果

  • ✅ 打破全局同步:不同 TCP 流在不同时间被丢包,错峰减速
  • ✅ 队列深度稳定,延迟抖动减小
  • ✅ 在高带宽延迟积(BDP)网络中吞吐更高
  • ❌ 参数调不好反而更糟(min_th / max_th / max_p 要针对链路手动调)
  • ❌ 对非 TCP 流量(UDP 视频流、QUIC)效果有限

4. 常见变种

变种

改进点

WRED​

对不同优先级/ DSCP 的流用不同丢弃曲线

ARED​

自适应调整 max_p,减少人工调参

CoDel​

基于“最小驻留时间”而非队列长度,更适应现代网络

PIE​

类似 CoDel,实现更简单,Linux 里 fq_codel 常用

二、共享缓冲区分配策略:

数据包进入相应的队列的准入规则:

Qlen< α * (可用空间)

Qlen 指的是队列当前使用的空间,α 指的是一个变量,它可以设置队列可以使用的缓冲区空间的上限。

队列可使用的空间可限制为共享缓冲区空间的:

其中 N 为拥塞队列的数量。

特点及理解:

1.越大,单个队列能用的比例越高。

2. 分母里有N,所以随着队列数量增多,每个队列能用的比例会下降。

这个公式的设计目的是防止单个队列饿死整个缓冲区,同时又允许一定程度的弹性占用。

  • 队列少时,每个队列拿得多,但总占用不高(留有缓冲余量)
  • 队列多时,每个队列拿得少,但总占用接近 100%
  • 永远不会出现一个队列独占全部缓冲区的情况

关于Qmax的推导:

前提DT机制对所有队列一视同仁,N个活跃队列同时争抢、都贴着阈值排队时,稳态下各队列等长为 q。设总缓存为 B,剩余空闲空间设为 R:

每个队列的准入条件: q ≤ α × R
R = B − N·q(N个队列各占q)
取临界值(=号即上限):
q = α·(B − N·q)
q = αB − αNq
q(1 + αN) = αB
q_max = αB / (1 + αN)

α=1 时退化为干净的形式:q_max = B/(1+N)

q_max 是机制的结构性上限,实际需要结合流量模型才能计算效果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询