他们祝你挺拔,再挺拔一点;我只祝你,永远年少,永远一骑当先.
1. QoS的概念
QoS(服务质量) 是指一个网络能够利用各种各样的基础技术向选定的网络通信提供更好 的服务的能力。这些基础技术包括:帧中继(Frame Relay)、异步传输模式(Asynchronous Transfer Mode,简写为 ATM)、以太网和 802.1 网络,以及 IP-路由网络。为了保证在这 些网络上的 QoS,在路由器中实现了排队、时序安排以及 QoS 信令技术等功能。特别是, 通过采用支持专用带宽和避免并且管理网络拥塞情况等技术,本公司路由器可提供更好 的和更可预测的网络服务。
2. QoS 的三种服务模型
服务模型描述了一组端对端的 QoS 能力,即网络从一端到另外一端传送特殊网络通信所 要求的服务的能力。QoS 软件支持三种类型的服务模型:尽力而为的、集成的以及区分 式服务。
1. 尽力而为服务(Best-Effort Service)
尽力而为服务是一种单一的服务模型。在这种服务模型中,应用能够在任何必要的时候 发送任意数量的数据,而不需要申请许可或者事先通知网络。对于尽力而为服务来说, 如果条件允许的话,网络就能够传输数据,而不需要在可靠性、延时范围或者吞吐量方 面的保证。实现尽力而为服务的路由器 QoS 功能是先入先出(first in, first out,简写为 FIFO)排队。
2. 集成服务(Integrated Service)
集成服务是一种复合的服务模型,它能够适应多种 QoS 需求。在这种模型中,应用在发 送数据以前通过 QoS 信令向网络申请一种特殊类型的服务。这个请求主要是为了网络通 知该应用的通信的概况,并且申请某种特殊类型的服务,这种服务可以满足它的带宽和 延时需求。只有从网络得到确认信息以后,这个应用才能够发送数据。并且,它所发送 的数据必须符合它先前所描述的通信概况。
根据来自应用和可用网络资源的信息,网络能够完成准入控制。通过维持每个流的状态, 然后基于不同的流进行智能化排队的操作,只要通信量保持在请求说明的范围之内,网 络就可以实现该应用的 QoS 需求。
路由器软件的 QoS 通过使用资源保留协议(Resource Reservation Protocol,简写为 RSVP)提供可控制负载服务(Controlled Load Service)和保障速率服务(Guaranteed Rate Service)的功能。可控制负载服务即使在网络拥塞期间,也允许应用保持低延时和 高吞吐量的业务。为了实现这个目的,路由器 QoS 提供了加权公平排队(Weighted Fair Queuing,简写为 WFQ)。
3. 区分式服务(Differentiated Service)
区分式服务与集成服务模型不同的是,在发送数据以前,使用区分式服务的应用不需要 明确地给路由器发送信号。
对于区分式服务来说,网络如果想要传送的是一种特殊的服务,就要在每一个数据包中 指定相应的 QoS 标记。这种指定能够以多种不同的方式体现,例如,在 IP 数据包中使用 IP 优先权位设置。路由器使用这个 QoS 规定来进行分类,并且完成智能化排队的任务。 路由器 QoS 提供的加权随机早期检测(Weighted Random Early Detection,简写为 WRED ),自 定义排 队 (Custom Queueing, 简写 为 CQ) 以及 优先权 排队 (Priority Queueing, 简写为 PQ)可用于发送区分式服务。
3. QoS 的各种队列算法
QoS 的各种排队算法是实现 QoS 的重要保证。本公司路由器中实现了带宽分配的加权公 平排队(Weighted Fair Queueing, 简写为 WFQ),自定义排队(Custom Queueing, 简写 为 CQ),优先权排队(Priority Queueing, 简写为 PQ);实现拥塞控制的加权早期随机检测(Weighted Random Early Detection, 简写为 WRED); 以及最简单的先入先出算法(FIFO)。
1. 加权公平排队(Weighted Fair Queueing)
WFQ 是一个自动的时序安排方法,它对所有的网络通信都提供了公平的带宽分配方案。 WFQ 把优先权或者权重应用到确定的通信上以把通信划分成会话,并且决定每一个会话 相对于其他的会话来说可拥有多少带宽。WFQ 是基于数据流的算法,它能够把高优先级 通信调度到队列的前端来减少响应时间,同时也能够在高带宽数据流中公平地分享剩余 的带宽。换句话说,WFQ 为数据量少的通信(例如 Telnet 对话)提供比数据量大的通信(例如 FTP 对话)更高的优先权。WFQ 为并发的文件传输提供链接容量的平衡使用; 也就是说,当多个文件传输任务同时进行的时候,为这些数据传输任务提供同等的带宽。
WFQ 克服了 FIFO 排队方式的严重局限性。当 FIFO 排队方式生效的时候,通信根据抵 达接口的顺序发送出去,而与带宽的耗费或者相关的延时无关。其结果是,文件传输和 其他数据量较大的网络应用常常会耗费几乎所有可用的带宽,从而剥夺其他通信的带宽。 WFQ 动态地把通信划分成组成一个个的会话的消息,以便保证带宽在单个的会话之间公 平分享,保证数据量少的通信能够以一种及时的方式进行传输。
基于数据包报头的编址,WFQ 可以把通信划分成不同的数据流。由于大部分通信都是 IP 数据。所以基于 IP 头部的各个字段(源和目的地址,源和目的端口,协议类型以及 TOS) 对数据包进行分类。
在进行传输以前,WFQ 把各种会话的数据包放置在公平排队中。数据包从这些公平排队 中移走的顺序取决于每一个抵达数据包的最后一位所表示的传送虚拟时间(finish number)。
在绝大多数所配置的运行速率为 2.048Mbps 或者更低的串行接口上,WFQ 是作为默认 的排队模式来使用的。
2. 具体配置详见 WFQ
普通的加权公平排队只是自动识别流,并不能根据需要为某些特殊的流提供专门的服务。 所以本公司路由器提供基于类型的加权公平排队(CBWFQ),这种算法是对普通的加权 公平排队算法的加强。它能根据用户定义识别出某类流,并为该条流分配一定的权重。
3. 加权早期随机检测(Weighted Random Early Detection)
随机早期检测(Random Early Detection,RED)技术是一种常用的避免拥塞机制。一旦 配置上 RED 后,当路由器丢弃信息包时,便可利用 RED 进行控制。如果你不配置加权 随机早期检测(Weighted Random EarlyDetection,WRED),路由器将使用一种叫做尾 部丢弃(tail drop)的粗糙的默认信息包丢弃技术。(加权早期随机检测(WRED)并不为专 门的流保证其所占带宽比例)尾部丢弃同等对待所有的通信,不对服务等级进行区分。在发生拥塞时,发送队列将会 堆积一定量的包。当输出队列排满时,信息包将被丢弃,直到拥塞解决、输出队列不再 爆满为止。而当 RED 用来解决路由器上的拥塞时,能够避免该问题的全球化 (globalization)。全球同步(global synchronization)发生在拥塞峰值时,许多采用 TCP协议的主机降低它们的传送速率来响应撤销信息包,然后在拥塞减少后,再次提高它们 的传送速率,而这段时间转送链路未能完全被利用。RED 技术的基础是,假定大多数应用对通信中的丢失很敏感,当它们中的某些数据包被 撤销时,将会暂时降低传输速率。TCP 就是准确地——甚至是很健全地——对丢弃通信 量作出反应,即通过放慢它的传输通信量,来有效地保证 RED 的丢弃通信量技术像拥塞 避免信令技术一样有效运行。RED 的目标是控制平均队列长度,来指示末端主机,在需要时暂时降低它们的信息包传 送速度来实现的。RED 通过在高拥塞期到来之前对信息包进行随机丢弃,来告诉信息包 源降低它的传输速率。假定信息源使用了 TCP,它将降低它的发送速率,直到所有信息 包到达目的地并指示拥塞被清除为止。你可通过使用 RED 来调用 TCP,以降低信息包的 传送速率。TCP 不仅可以暂停发送,而且还可以迅速重新启动,来使传输速率适应网络 可支持的速率。
当平均队列长度已经超过最小阈值,RED 开始丢弃信息包。信息包丢弃的速率随着平均 队列大小的提高而线性增加,直到平均队列的大小达到最小阈值,信息包丢弃停止。当 平均队列超过最大阈值时,所有信息包将被丢弃。最小阈值要设得足够高,以达到链路 的最大利用率。如果最小阈值太低,信息包将有不必要的丢弃,传送链路将不会被充分 利用。最大、最小阈值间的间距要设置得足够大,以避免全球同步。如果间距太小,许 多信息包会被立刻丢弃,引发全球同步。
4. 自定义排队(Custom Queueing)
当自定义排队在某个接口上生效的时候,系统将会为这个接口维护 17 个输出队列。你可 以指定队列 1 到 16。与每一个输出队列相关的是可配置字节总数以及数据包的类型。可 配置字节总数指定在系统移动到下一个队列以前,系统应当从当前的队列中发送多少字 节的数据。编号为 0 的队列是一个系统队列;在任何编号为 1 到 16 之间的队列得到处理以前,编号 为 0 的队列将先被清空。系统把优先权级别高的数据包,例如保持活动数据包以及信令 数据包,安排到这个队列。其他的通信不能够使用这个队列。对于编号为 1 到 16 的队列来说,系统相继地在这些队列之间循环,在每次循环中都从当 前队列中取出配置好的字节总数,并且在移动到下一个队列以前把这些数据包发送出去。 当处理某个队列的时候,系统就会一直发送数据包,直到发送的字节总数已经超出这个 队列的字节总数或者这个队列已经清空为止。一个队列所使用的带宽只能够根据字节总 数来间接指定。与 PQ 相似的是,CQ 是静态配置的,因此不能够自动地适应不断变化的 网络情况。
5. 优先权排队(Priority Queueing)
优先权排队可以配置四种通信优先级(high,middle,normal,low)。在数据传输期间,优先权 排队给优先权级别高的队列提供比优先权级别低的队列绝对优惠的待遇;只要给予了最 高的优先权级别,重要的通信总会比重要性低的通信提前得到服务。根据用户所定义的标准,对数据包进行分类,然后把它们放置在四种输出队列的其中一 种队列中.未定义优先权级别的数据包将放置在一般队列中。当系统将把数据包发送出一 个接口的时候,系统就按照优先权级别由高向低开始扫描这个接口上的优先权队列。先 扫描高优先权级别的队列,然后扫描中优先权级别的队列,以此类推。然后,选中位于 最高优先权级别队列最前面的数据包,并传输。每当要发送一个数据包的时候,就重复 这个过程。
4. QoS队列配置任务列表
要进行 QoS 配置你需要配置接口上的队列算法,QoS 信令,QoS 链路效率机制。后两 种是可选的,第一类配置在每个物理接口上都有默认值,可以根据实际情况进行改变。
- * 配置加权公平排队(WFQ)
- * 配置接口上所使用的策略映像(CBWFQ)
- * 配置加权早期随机检测(WRED)
- * 配置自定义排队(CQ)
- * 配置优先权排队(PQ)
- * 监控 QoS
5. QoS队列配置任务
1.配置加权公平排队(WFQ)
如果需要在一个接口上配置公平排队,在指定了这个接口以后,可以在接口配置态中使 用以下命令:
命令 | 目的 |
fair-queue | 在一个接口上使用公平排队策略。 |
注意:在运行速率为 2.048Mbps 或者更低的接口上,WFQ 是默认的排队模式。WFQ 不适用于封装LAPB 或 X.25 的接口。
2.配置接口上所使用的策略映像(CBWFQ)
在接口上配置某个策略映像后就可使 CBWFQ 在该接口生效。如果需要在一个接口上配 置某个策略映像,在指定了这个接口以后,可以在接口配置态中使用以下命令:
命令 | 目的 |
service-policy output/input policy-name | 让接口使用某个policy-map。 |
注意:该命令 output 方向只在配置了 WFQ 算法的接口有效。
3.配置策略映像
配置策略映像以及其包含的类型映像可以指定一组不同类型的流。当某个接口使用该策 略映像时,可以根据指定类型进行一定的服务质量保障。
配置一个策略映像首先需要在全局配置态使用以下命令进入策略映像配置态:
命令 | 目的 |
policy-map policy-name | 配置一个策略映像并进入策略映像配置态。 |
进入策略映像配置态后,可以配置当前策略映像所用的类型映像的名字,所占带宽和队 列上限。要进行这些配置,可以在策略映像配置态中使用以下命令:
命令 | 目的 |
class class-name bandwidth {bandwidth(kbps)|percent bandwidth(%)} [queue-limit packet-number] [dscp dscp-value] [precedence precedence] | 在当前策略映像中配置一个类型映像的所占带宽, 队列上限,新的DSCP值和新的优先级值。 |
4. 配置类型映像
配置类型映像可以定义某种类型的流。当某个接口使用的策略映像包含该类型映像时, 可以根据指定类型进行一定的服务质量保障。
配置类型映像可以在全局配置态使用以下命令:
命令 | 目的 |
class-map class-name match protocol protocol-type | 配置一个根据协议类型分类的类型映象。 |
class-map class-name match interface interface-type interface-number | 配置一个根据接口分类的类型映象。 |
class-map class-name match access-group list-name | 配置一个根据访问列表分类的类型映象。 |
class-map class-name match ip dscp dscp-value | 配置一个根据DSCP值分类的类型映象。 |
Class-map class-name match length min min-value max max-value | 配置一个根据长度分类的类型映象。 |
5.配置加权早期随机检测(WRED)
如果需要在一个接口上配置加权早期随机检测,在指定了这个接口以后,可以在接口配 置态中使用以下命令:
命令 | 目的 |
random-detect | 在一个接口上使用加权早期随机检测。 |
6.配置自定义排队(CQ)
如果需要在一个接口上配置自定义排队,在指定了这个接口以后,可以在接口配置态中 使用以下命令:
命令 | 目的 |
custom-queue-list list-number | 在该接口上使用CQ算法,参数list-number为所 采用的自定义列表号。范围是1-16,无默认值。 |
7.配置自定义列表
自定义列表可以定义相应队列的分类方法,发送字节数和队列上限。当在某接口上使用 该自定义列表时,即可根据该列表进行调度。
配置自定义列表队列上限和发送字节数,可以在全局配置态使用以下命令:
命令 | 目的 |
queue-list list-number queue | 指定 每一个自定 义队列的上 限。参数 |
queue-number limit limit-number | limit-number指定了能够排列在队列中的数据 包的数量。范围是0到32,767,默认为20。 |
queue-list list-number queue queue-number byte-count byte-count-number | 指 定 每 个 队 列 发 送 字 节 。 参 数 byte-count-number 指定 在某 个特定 的循环 中,系统能够从一个给定的队列传输的最小字 节数,默认为1500。 |
配置自定义列表的分类方式,可以在全局配置态使用以下命令:
命令 | 目的 |
queue-list list-number protocol protocol-type queue-number [keyword key-value] | 根据协议类型建立自定义队列。 |
queue-list list-number interface interface-type interface-number queue-number | 根据从某个给定接口输入的数据包,建立自定 义队列。 |
queue-list list-number default queue-number | 为那些不符合自定义列表中的任何一条规则 的数据包,分配一个队列编号,默认为1。 |
8. 配置优先权排队(PQ)
如果需要在一个接口上配置优先权排队,在指定了这个接口以后,可以在接口配置态中 使用以下命令:
命令 | 目的 |
priority-group list-number | 在该接口上使用PQ算法,参数list-number为所 采用的自定义列表号。范围是1-16,无默认值。 |
9.配置优先级列表
优先级列表可以定义相应队列的分类方法和队列上限。当在某接口上使用该优先级列表 时,即可根据该列表进行调度。
配置优先级列表队列上限,可以在全局配置态使用以下命令:
命令 | 目的 |
priority-list list-number queue-limit high-limit middle-limit normal-limit low-limit | 指定每一个优先权队列的队列上限,默认值高 20,中40,普通60,低80。 |
10.QoS 显示
1. 显示接口队列情况 paradise
要显示接口的队列的状况,可以使用以下命令:
命令 | 说明 |
show queue interface-type interface-number | 显示该接口上的队列信息。 |
2. 显示自定义列表的配置
要显示自定义列表的配置的状况,可以使用以下命令:
命令 | 说明 |
show queueing custom | 显示自定义列表的配置。 |
3. 显示优先级列表的配置
要显示优先级列表的配置的状况,可以使用以下命令:
命令 | 说明 |
show queueing priority | 显示优先级列表的配置。 |
4. 显示类型映像的配置
要显示类型映像的配置,可以使用以下命令:
命令 | 说明 |
show class-map [class-name] | 显示类型映像的配置。 |
5. 显示策略映像的配置
要显示策略映像的配置,可以使用以下命令:
命令 | 说明 |
show policy-map [policy-name] | 显示策略映像的配置。 |
11. QoS配置方案
如果用户有四种类型的应用 A,B,C 和 D,期望的带宽比例为 10/20/40/30,包长为1428/582/371/1525。由于每次当这个队列接收服务时,系统会发送的字节数为包长的整 数倍。因此配置字节总数时应考虑包的长度,而不是简单的设为 100/200/400/300,这样 配的话,带宽分配实际为 1428/582/371/1525。要实现理想效果可按以下步骤进行:
(1) 对于每一个队列,都用你想分配给这个队列的带宽百分数除以数据包的大小(以字 节为单位)。在这个示例中比率应当是:10/1428,20/582,40/371,30/1525 或者0.007,0.03436,0.10782,0.01967。
(2) 使用最小的数字来把上面所列出的四个数字进行归一化处理:1,4.9,15.4,2.8这个结果是必须被发送的数据包数量的比率。
(3) 任何一个比率值的尾数都意味着系统将要发送一个额外的数据包。把比率值进行只 入不舍操作,所得到的整数就是实际所要发送的数据包的总数。在这个示例中,实 际的所发送的数据包的比率将是 1:5:16:3。
(4) 用每一种协议的数据包总数乘上相应的数据包大小,可以把数据包数目比率转换成 字节总数。在这个示例中,所发送的数据包总数是一个 1428 字节的数据包、5 个582 字节的数据包,16 个 371 字节的数据包以及 3 个 1525 字节的数据包;即分 别从每一个队列发送 1428、2910、5936 和 4575 字节。这就是你将在你的自定义队列配置中指定的字节总数。
(5) 为了确定这个比率所代表的带宽分配,首先要确定当对三个队列都提供一次服务的 时候,系统所传输的字节总数:(1×1428) + (5×582) + (16×371)+(3×1525) =1428+2910+5936+4575 = 14849。然后确定每一个队列所发送的字节总数的百分比:1428/14849,2910/14849,5936/14849,4575 /14849= 9.6%,19.5%,39.8%和 30.8% 。正如你所看见的一样,这三个百分比很接近我们所期望的比率10/20/40/30。
(6) 如果实际的带宽比率与所希望的带宽比率不太接近,则可以用原来的比率乘上最佳 的值,这样能够使实际的带宽比率尽量地靠近这三个整数。注意,你所使用的乘数 不必是一个整数。
具体配置如下:(假定四种应用分别为 udp 端口 100,200,400,700;使用的是一号用户列 表)
(1) 首先为这四种应用分配相应的队列(2,3,4,5)
queue-list 1 p ip 2 udp 100 queue-list 1 p ip 3 udp 200 queue-list 1 p ip 4 udp 400 queue-list 1 p ip 5 udp 700
(2) 制定每个队列的发送字节数
queue-list 1 queue 2 byte-count 1428 queue-list 1 queue 3 byte-count 2910 queue-list 1 queue 4 byte-count 5936 queue-list 1 queue 5 byte-count 4575
(3) 将该用户列表配置到端口上
interface s1/0 custom-queue-list 1
12.QoS配置示例
1. 配置自定义排队(CQ)示例
- 把匹配 IP 访问列表 aaa 的通信分配给队列编号 1:
- queue-list 1 protocol ip 1 list aaa
这个示例把 Telnet 数据包分配给队列编号 2:
queue-list 4 protocols ip 2 tcp telenet
把 UDP 域名服务(Domain Name Service)数据包分配给队列编号 3:
queue-list 4 protocol ip 3 udp dns
把大于 1000 字节的数据包分配给队列编号 6:
queue-list 5 protocol ip 6 gt 1000
2. 配置优先权排队(PQ)示例
把队列上限分别设为 15 50 70 100。 prority-list 4 queue-limit 15 50 70 100 配置优先级列表的分类方式,可以在全局配置态使用以下命令:
命令 | 目的 |
priority-list list-number protocol protocol-type {high | medium | normal | low} [keyword key-value] | 根据协议的类型来建立排队优先级。 |
priority-list list-number interface interface-type interface-number {high | medium | normal | low} | 为进入某个给定接口的数据包建立排队优先 级。 |
priority-list list-number default queue-number | 为那些不符合优先级列表内的任何规则的数 据包,分配一个优先权队列,默认为normal。 |