1. Quality of Service(服务质量)特征
- QoS 实现在带宽有限的情况下,减少时延、抖动和丢包率
- QoS 主要是调控软件队列,提供一个可管理的不公平网络流量差分服务
1)指标
- 带宽/吞吐量
- 在一个固定时间内(一般是1s),从网络一端传输到另一端的最大速率(bps)
- 线路的带宽越大,也就有更大的传输能力。同时带宽也是影响时延、抖动、丢包率的重要因素
- 时延
- 一个报文在网络中,从一端传输到另一端所花费的时间
- 时延越小越好,如果一端的时延过大会导致报文碰撞,导致重复
- 抖动
- 网络中时延的不稳定就是抖动,抖动是影响服务质量的最大问题之一
- 抖动也会导致某些需要周期性交互报文的网络协议,交互失败
- 可以利用缓存缓解抖动的产生,但是会增大时延
- 丢包率
- 少量的丢包对业务影响并不大,但大量的丢包会影响用户体验
- UDP 的丢包会导致对方无法收到数据
- TCP 的丢包会导致重传,导致传输效率降低
2)常见业务的 QoS 指标
| 业务类型 | 带宽/吞吐量 | 时延 | 抖动 | 丢包率 | | —- | —- | —- | —- | —- | | Video | 高 | 低(≤50ms) | 低(≤10ms) | 可预计的丢包率(≤0.1%) | | Voice | 高 | 低(≤50ms) | 低(≤10ms) | 可预计的丢包率(≤0.1%) | | HTTP | 中 | NA | NA | NA | | Email | 低 | NA | NA | TCP 保证 | | FTP | 中/高 | 中 | 中 | TCP 保证 | | 流媒体 | 高 | 低(≤1ms) | 中(≤200ms) | 可预计的丢包率(≤0.1%) | | 电子商务 | 中 | 中(≤200ms) | 中(≤100ms) | TCP 保证 |
- 少量的丢包对业务影响并不大,但大量的丢包会影响用户体验
2. QoS 服务模型
1)尽力而为服务模型(Best-Effort Service)
- 通过先入先出队列(FIFO)来实现
- 尽最大努力来发送报文,对时延、可靠性等信息不提供保证(没有QoS)
- 应用程序可以在任意时候,发出任意数量的报文,不需要事先获得批准,不需要通知网络
-
2)集成服务模型(Integrated Service)
通过 RSVP 等协议来保证关键业务的通信质量
- 需要通过信令向网络描述自己的流量参数,申请特定的 QoS 服务,请求通过后才能发送数据
- 适合 VOIP、MPLS TE 等场景,但 RSVP 自身没有 QoS 保证(基于软件)
RSVP 配置复杂、使用效率较低,并且需要所有设备都支持 RSVP 协议
3)差分服务模型(Differentiated Service)
最常用的协议,把流量分成不同的类,不同类享受不同的处理方式
- 一般业务流的分类和汇聚工作在网络边缘节点完成,上层节点只需要简单地识别这些报文的标记,就可以进行资源分配和流量控制
- 差分服务角色分类
根据五元组(源、目地址,源、目端口号,协议号)等报文信息对报文进行惊喜的分类
1)PHB(Per-Hop Behaviors,逐跳转发行为)
- PHB 只定义了一些外部可见的转发行为,没有特定的实现方式
- PHB 可以用优先级、分组延迟、抖动、丢包率来定义
- PHB 的四种标准
- 类选择码(CS):兼容 IP 优先级
- 快速转发(EF):保证最小转发能力、保证带宽、又现转发、控制流量,超过的会被丢弃
- 确保转发(AF):要求较低的延迟、低丢包率、高可靠性
- 尽力而为(BE):如果 DS 节点收到一个报文,DSCP中没有定义 PHB 映射,则作为缺省PHB转发
| PHB | 含义 | 细分 | 用途 |
| —- | —- | —- | —- |
| CS |
- 与 IP Precedence 相同
- 在所有标准 PHB 中,CS 的优先级最高
| CS7 | 默认用于协议报文,如果这些报文无法接收会引起协议中断 | | | | CS6 | | | EF |
- 从任何 DS 节点发出的信息流速率在任何情况下必须获得等于或大于设定的速率
- EF PHB在 DS 域内不能被重新标记,仅允许在边界节点重新标记
- EF 流要求低时延、低抖动、低丢包率
| EF5 | EF 用于承载员工 VoIP 语音的流量,或者企业内部视频会议的数据流 | | AF |
- AF 要求较低的延迟、低丢包率、高可靠性
| AF4 | 用来承载语音的信令流量 | | | | AF3 | 可以用作远端设备的 Telnet,FTP等服务。这些业务对带宽要求适当,但是对网络时延、抖动都非常敏感,同时要求完全可靠的传输(不能丢包) | | | | AF2 | 可以用来承载企业内部 IPTV 的直播流量,可以保证员工在线视频业务流畅。直播的实时性强,需要有连续性和大吞吐量的保证,但是允许小规模的丢包 | | | | AF1 | 作企业内部普通数据流业务,例如 E-Mail。普通数据对实时性和抖动等因素要求都不高,只要保证不丢包的传达即可 | | BE | 对应于传统的 IP 分组投递服务,只关注可达性,其他方面不做任何要求。任何交换机必须支持 BE PHB | | 企业内部尽力而为的服务,用作那些不紧急,不重要,不需要负责的业务,比如员工 HTTP 网页浏览业务 |
2) 优先级分类
① IP Precedence
IP 报文头 ToS(Type of Service)由 8bit 组成,其中 3bit 的 Precedence 字段标识了 IP 报文的优先级
RFC1349 重新定义了 IP 报文中的 ToS,增加到了 6bit(DSCP,区分服务代码点),后两位为保留位
- 0~2 表示 Precedence 字段,代表报文传输的 8 个优先级
- 6~7,为路由控制保留的,标识显式拥塞通告字段 ECN
- 0~5,用户级应用使用
- D-bit 表示延迟要求(Delay)
- 0 = 正常延迟
- 1 = 低延迟
- T-bit 比特表示吞吐量(Throughput)
- 0 = 正常吞吐量
- 1 = 高吞吐量
- R-bit 比特表示可靠性(Reliability)
- 包含 3bit 的 PRI 字段和 1bit 的 CFI 字段
- 与 IP 网络的 ToS 作用一致,用来区分数据流量的服务等级
- 优先级从高到低顺序取值为 7>6>5>4>3>2>1>0
- 对于 MPLS 网络,由于报文的 IP 头对 LSR 设备是不可见的,所以需要在 MPLS 网络的边缘对 MPLS 报文的 EXP 域进行标记
- 缺省的情况下,在 MPLS 网络的边缘,将 IP 报文的 IP 优先级直接拷贝到 MPL S报文的 EXP 域;但是在某些情况下,如 ISP 不信任用户网络、或者 ISP定义的差别服务类别不同于用户网络,则可以根据一定的分类策略,依据内部的服务等级重新设置 MPLS 报文的 EXP 域,而在 MPLS 网络转发的过程中保持 IP 报文的 ToS 域不变
在 MPLS 网络的中间节点,根据 MPLS 报文的 EXP 域对报文进行分类,并实现拥塞管理,流量监管或者流量整形等 PHB 行为
④ DSCP 分类
BE:先进先出,默认行为
- AF:优先级中等,对应着十进制里的取值,取值为 AF xxxyy 0
- xxx:代表不同类别,由 DSCP 0~2bit 组成,标识优先级的高低(4>3>2>1)
- yy:代表丢包的概率,由 DSCP 3~4bit 组成,越大越容易被丢弃
- 0:固定值z
- EF:优先级最高 | DSCP Name | | | | DSCP Value | | | IP Precedence | 802.1P | EXP | | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | | BE(尽力而为) | Default(000000) | | | 0 | | | 0 | | | | CS(IP 优先级映射) | CS1(001000) | | | 8 | | | 1 | | | | | CS2(010000) | | | 16 | | | 2 | | | | | CS3(011000) | | | 24 | | | 3 | | | | | CS4(100000) | | | 32 | | | 4 | | | | | CS5(101000) | | | 40 | | | 5 | | | | | CS6(110000) | | | 48 | | | 6 | | | | | CS7(111000) | | | 56 | | | 7 | | | | AF(保证转发) | AF11(001010) | AF12(001100) | AF13(001110) | 10 | 12 | 14 | 1 | | | | | AF21(010010) | AF22(010100) | AF23(010110) | 18 | 20 | 22 | 2 | | | | | AF31(011010) | AF32(011100) | AF33(011110) | 26 | 28 | 30 | 3 | | | | | AF41(100010) | AF42(100100) | AF43(100110) | 34 | 36 | 38 | 4 | | | | EF(快速转发) | EF(101110) | | | 46 | | | 5 | | |
4. 拥塞管理
通过队列(Class Queue)机制来实现流量拥塞时的调度顺序,保证某类数据流的带宽、时延、抖动
- 不同的队列机制有不同的调度算法,队列不会排列数据包本身,而是排列指向数据包的指针,把这些内容保存在缓存中
- 导致拥塞的情况
- 从高速链路的流量流向低速链路
- 从多个端口的流量流向汇聚端口时
- 队列结构
- 每个接口都有硬件队列和软件队列
- 硬件队列永远采用 FIFO
- 软件队列取决于平台的系统版本可以选择及配置
- 如果硬件队列没有拥塞,就没有必要调整软件队列
1)FIFO(先进先出队列)
First in First out,硬件队列,先来先服务的流量调度(没有差分服务)
- 分类方式:所有报文在一个队列中
- 丢弃方式:尾部丢弃
-
2)RR(轮询队列)
Round Robin 是一种简单的调度机制,相对调度机制较公平,但容易导致时延和抖动
采用循环的方式,对多队列进行调度,以环形的方式循环,如果循环到某队列为空,则直接跳过并不会等待该队列
- 优点
- 队列之间带宽平等
- 剩余带宽可以被其他队列按比例分配
- 缺点
- 避免了 PQ 调度中的低优先级队列 “饿死” 现象
- 以报文个数来进行调度,每次只会调度各队列中的一个报文,并把权重值 - 1,当其他队列轮询到时没有报文需要发送则跳过
- 容易出现报文大小不同而导致的调度不平等,并且会出现低时延业务不能及时调度
4)DRR(差分轮询队列)
根据报文长度进行调度,解决了 WRR 因为报文大小不同导致的不平等问题,但与 WRR 一样没有解决低时延调度不及时的问题
- 不同队列可以设置不同的带宽权重值
- 每次调度前,系统按权重为各队列分配带宽,计算 Deficit 值(初始为 0),如果队列的 Deficit > 0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后 Deficit 值,作为下一轮调度的依据,每次调度前都需要加上按权重分配的带宽值;如果队列的 Deficit < 0,则不参与此轮调度,当前 Deficit 值作为下一轮调度的依据
5)PQ(优先级队列)
Priority Queuing,软件队列,按照严格的优先级进行流量调度
- 分类方式:8 个子队列(优先级从高到底 7>6>5>4>3>2>1>0)
- 丢弃方式:每个子队列中采用尾部丢弃
- 调度方式:预抢占的调度机制(高优先级的队列中排空了数据流后,才会从下一个子队列进行调度)
- 对需要低时延的业务流非常有效
- 容易造成低优先级队列的 “饿死” 现象
通过设置每个子队列占用链路带宽的比例,可以解决低优先级队列的 “饿死” 现象
6)CQ(自定义队列)
Custom Queuing,每个队列设置不同的阈值,如果队列中几个报文大小的之和特别接近阈值,则会继续调度后面一个报文,如果最后一个报文过大,也会跟着一起发送,此时这轮调度的延迟、和抖动就很高
分类方式:17 个子队列(队列 0 是系统预抢占队列,队列 1-16 之间没有优先级关系)
- 丢弃方式:每个子队列中采用尾部丢弃
- 调度方式:轮询调度(采用规定的字节进行调度,如果超过字节就轮询至其他队列)
- 实现基于字节的公平调度,但是由于每次调度的报文大小不平均,所以导致时延非常不平均,最坏的情况下时延可以达到 937ms
- 最大和最小的队列比率不能超过 10:1
- 优点
- 按照比例来分配带宽
- 实现简单
- 缺点
- 分类方式:最多 4096 个子队列(数据包通过五元组 + ToS值 Hash后,逐流分配到子队列)
- 丢弃方式:通过 HQO、CDT、FT 计算来丢弃
- HQO:所有队列的数据包总量的限制。到达排队限制值时,如果新到了一个长报文,则丢弃;如果新到达一个短报文,则丢弃排队中的长报文(优先调度短报文)
- CDT:对某个队列设置的丢弃阈值。达到 CDT 上限,但未到达 HQO 上线时,如果新到了一个长报文,则丢弃;如果新到达一个短报文,则放入队列中,不进行丢弃任何报文
- 调度方式:按照最早完成时间调度(为数据流低而且优先级高的提供优质服务)
- 如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。
- 根据队列的权重不同,划分不同的带宽,带宽大的走的多,带宽小的走的少。从统计上看,权重越小,所分得的带宽越少。权重越大,所分得的带宽越多
- 不同优先级算法:报文长度/(优先级+1)
- 不同的队列获得公平的调度机会,从总体上均衡各个流的延迟
8)CBQ(基于类的加权公平队列)
首先根据 IP 优先级或者 DSCP 优先级、输入接口、IP 报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,送入系统定义的缺省类
- 分类方式
- LLQ(低时延队列):比 EF 队列的时延更低,为时延敏感的应用(如 VoIP 业务)提供了良好的服务质量保证
- EF(快速转发队列):满足低时延业务
- 具有高优先级的队列,一个或多个类的报文可以被设定进入EF队列,不同类别的报文可以设置不同的带宽占用
- 在调度时,若有报文,会优先得到调度,以保证其获得低时延
- 当接口发生拥塞时,会优先发送,但为了防止低优先级队列(AF、BE 队列)得不到调度,可以设置带宽限速
- 当接口不拥塞时,可以占用 AF、BE 的空闲带宽。这样既可以获得空闲的带宽,又不会占用超出规定的带宽,保护了其他报文的应得带宽
- AF(保证带宽队列):满足需要带宽保证的关键数据业务
- 在调度时,按照为各类报文设定的带宽将报文发送,可以实现各个类的队列的公平调度。当接口有剩余带宽时,会按照权重共享剩余带宽
- BE(尽力而为队列,缺省):满足不需要严格 QoS 的业务
- 当报文不匹配所设定的所有类别时,会被送入该缺省队列
- 可以为
- 丢弃方式:通过 HQO、CDT、FT 计算来丢弃
- EF:默认采用尾部丢弃,可以设置为 WRED 丢弃
- AF:默认采用尾部丢弃,可以设置为 WRED 丢弃
- BE:默认采用尾部丢弃,可以设置为 WRED 丢弃
调度方式:按照最早完成时间调度(为数据流低而且优先级高的提供优质服务)
PQ+WRR
- PQ+DRR
- PQ+WFQ = CBQ
5. 拥塞避免
通过监视网络资源的使用情况,在发生网络拥塞或拥塞加剧时,主动丢弃报文来解除拥塞
- 拥塞避免依赖于 TCP 的行为来减少拥塞
- TCP 流量会在其发送的数据包丢失后降低发送速率
通过有选择的丢弃一定百分比的数据包,以降低 TCP 连接速率,从而减缓拥塞
1)尾部丢弃
在拥塞发生期间,队列长度最大后,尾部的数据报文将被全部丢弃,直到拥塞解除
- 缺点
- 无差别丢弃:会导致大量的非关键数据被转发,大量的关键数据被丢弃
- TCP 饿死现象:尾丢弃无法对流量进行区分丢弃,TCP 流量整体减小时,UDP 流量不会减小,可能会导致 UDP 流量占满队列,造成 TCP 饿死
- TCP 全局同步现象
- 对于 TCP 报文,如果大量的报文被丢弃,将造成 TCP 超时,从而引发 TCP 慢启动,使得 TCP 减少报文的发送(窗口大小变小)。而后这些 TCP 连接又会在某个时刻同时出现流量高峰。如此反复,使网络流量忽大忽小,影响链路利用率
2)RED(随机早期检测)
RED 通过随机地丢弃数据报文,让多个 TCP 连接不同时降低发送速度,从而避免了 TCP 的全局同步现象。使 TCP 速率及网络流量都趋于稳定
3)WRED(加权随机早期检测)
通过 IP 优先级或 DSCP 作为权重,一般配合 CBQ 使用
- 未满足丢弃下限,不会进行丢弃
- 丢弃下限和丢弃上限之间,随机进行丢弃
- 超过丢弃上线,进行尾部丢弃
6. 流量监管和整形(限速)
限速主要是控制时间
1)令牌桶(速率桶)
① 单速单桶双色
单速指的是 CIR(承诺信息速率);单桶指的是 CBS/BC(承诺突发速率)
- CIR:允许传输报文平均速率
- CBS/BC:瞬间能通过的突发流量
- 以 CIR 的速率向 CBS/BC 桶中添加令牌(速率/带宽)
- CIR:允许传输报文平均速率
- CBS/BC:瞬间能通过的突发流量
- EBS/BE:瞬间能通过的超出突发流量
- 以 CIR 的速率向 CBS/BE 桶中添加令牌,当 CBS 桶到满后,将溢出的令牌放 EBS 桶中
- CIR:允许传输报文平均速率
- PIR:允许传输报文的峰值速率
- CBS/BC:瞬间能通过的突发流量
- PBS/BE:瞬间能通过的峰值突发流量
以 CIR 的速率向 CBS/BC 桶添加令牌,以 PIR 的速率向 PBS/BE 桶中添加令牌
如果报文本身已经携带了颜色,会影响令牌桶评估的结果
主要应用于网络边缘入口处
- 利用 CAR 对入方向或出方向的流量进行限速控制,超过速率的流量,直接丢弃
- CAR:只能在 IP 层实现,对不经过 IP 层处理的报文不起作用
-
3)流量整形(削峰填谷)
不适用于时延敏感的报文(数据传输、 www 访问等)
对输出报文的速率进行控制,使报文以均匀的速率发送出去
- 通常是为了使报文速率与下游设备相匹配(当从高速链路向低速链路传输数据,或发生突发流量时,带宽会在低速链路出口处出现瓶颈,导致数据丢失严重)
- 主要应用在高速链路上(对端是低速链路)或者是网络边缘处
- 一般不会丢包,会把超过速率的流量放入缓冲区(buffer)
- 缓冲区就相当于队列(WFQ)
- 不能重标记流量
- FRTS:帧中继的流量整形
- GTS(Generic Traffc Shaping,通用流量整形):只能在 IP 层实现,对不经过 IP 层处理的报文不起作用
- LR(Line Rate,物理接口总速率限制):能够限制物理接口上通过的所有报文
- 配合 NQA 可以实现自适应流量整形
4)流量监管和整形的比较
| 类别 | 相同点 | 不同点 | 优点 | | —- | —- | —- | —- | | 流量监管 |
- 都用于监控网络流量(限速)
- 都采用令牌桶机制评估到达流量
- 主要都用于网络边缘
|
- 可以用在出/入方向(一般用于入方向)
- 对于超过的流量直接丢弃
- 不需要额外的内存资源,不会带来时延和抖动
- 丢包可能引发重传(再应用层看来也能引起时延和抖动)
- 可以重标记流量
|
- 优点:不需要 Buffer 资源,时延小
- 缺点:丢包量大,抗突发能力弱
| | 流量整形 | |
- 只能用再出方向
- 会将超过的流量放入缓冲区,不会直接进行丢弃
- 需要额外的内存资源,会带来额外的时延和抖动
- 较少的丢包,因而较少导致重传
- 不能重标记流量
|
- 优点:丢包量小,抗突发能力强
- 缺点:需要 Buffer 资源缓存报文,时延大
|
7. 链路效率
主要在低速链路上使用,目的是减小实时数据报文的时延和抖动
- IPHC:IP报文头部压缩
- RTP 报文头压缩
- TCP 报文头压缩
- LFI:链路分片和交叉