logo资料库

Linux流量控制指南中文翻译(Traffic control HOWTO).pdf

第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
资料共35页,剩余部分请下载后查看
流量控制指南
版本 1.0.2
Martin A. Brown
1.1. 目标及假定读者
1.2. 排版约定
1.3. 推荐学习方法
1.4. 待补充内容,错误指正及读者反馈
2. 流量控制思想概述
2.1. 什么是流量控制?
2.2. 为什么要应用流量控制?
2.3. 优点
2.4. 缺点
2.5. 队列
2.6. 数据流
2.7. 令牌桶
2.8. 包和帧
3. 流量控制中的几个必备元素
3.1. 整流
3.2. 调度
3.3. 分类
3.4. 监管
3.5. 丢弃
3.6. 标记
4. 流量控制组件
4.1. 排队规则(qdisc)
4.2. 分类(class)
4.3. 过滤器(filter)
4.4. 分类器(classifier)
4.5. 监管器(policer)
4.6. 丢包(drop)
4.7. 句柄(handle)
5. 软件包和工具集
5.1. 内核版本要求
5.2. iproute2 工具 (tc)
5.3. tcng, 下一代流量控制(Traffic Control Next Generation)
5.4. IMQ, 中间队列设备
6. 无分类排队规则 (qdiscs)
6.1. FIFO, 先进先出 (pfifo and bfifo)
6.2. pfifo_fast, Linux默认排队排队
6.3. SFQ, 随机公平队列
6.4. ESFQ, 扩展的随机公平队列
6.5. GRED, 通用早期随机丢包
6.6. TBF, 令牌桶过滤器
7.1. HTB, 分层令牌桶
7.1.1. 软件要求
7.1.2. 整流
7.1.3. 租借
7.1.4. HTB分类参数
7.1.5. 规则
7.3. PRIO, 优先级调度
7.4. CBQ, 基于类的队列
8. 流量控制的常见规则和方法
8.1. Linux流量控制的一般规则
8.2. 在已知带宽的线路上实施流量控制
8.4. 基于流来分享、划分带宽
8.5. 基于IP来分享、划分带宽
9. 用于Qos和流量控制的脚本
9.1. wondershaper
9.2. 用于ADSL宽带的指南脚本 (myshaper)
9.3. htb.init
9.4. tcng.init
9.5. cbq.init
10. 图表
10.1. 总图
11. 有关流量控制的资源链接
流量控制指南 版本 1.0.2 Martin A. Brown 2006-10-28 2003-11-17 2003-09-24 修订者:MAB 修订者:MAB 修订者:MAB 原文地址:http://www.tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/ 翻译 :ziven (http://blog.csdn.net/zgangz) 水平有限,仅供参考! 修订记录 修订号 1.0.2 增加对 HFSC 的说明,更改作者的电子邮箱 修订号 1.0.1 对引用的 Leonardo Balliache 的文献增加链接 修订号 1.0 被 TLDP 审查且批准 修订号 0.7 增加修订号,校对,为添加进 TLDP 做好准备 修订号 0.6 来自 Stef Coene 的细微修正 修订号 0.5 HTP 章节基本完成,更多的图表,LARTC 预览版 修订号 0.4 增加图表 修订号 0.3 真正的完成无等级,软件,规则,要素及组件(classless, software, rules, elements and components)章节 修订号 0.2 2003-08-23 主要集中在概览,要素,组件和软件(overview, elements, components and software)章节 修订号 0.1 初始版本(完成大纲) 修订者:MAB 修订者:MAB 修订者:MAB 修订者:MAB 修订者:MAB 修订者:MAB 2003-08-29 修订者:MAB 2003-9-14 2003-09-09 2003-09-01 2003-08-30 2003-08-15 流量控制包含一组机制和操作,这些机制和操作作用于某个网口上被排队等待发 送/接收的报文。其中操作包括入队,监管,分类,调度,整流,丢弃。本指南 介绍了 Linux 下流量控制的能力及其运用。 © 2006, Martin A. Brown
本文档允许在自由软件基金的 GNU 1.1 版或以后发布的条款下复制,分发和修改。本文 档没有不变的部分,没有封面文字,没有封底文字。许可证副本在: http://www.gnu.org/licenses/fdl.html 目录 1. Linux 流量控制介绍 ........................................................................................... 4 1.1. 目标及假定读者 ....................................................................................................... 4 1.2. 排版约定 ..................................................................................................................... 4 1.3. 推荐学习方法 ............................................................................................................ 4 1.4. 待补充内容,错误指正及读者反馈 ................................................................... 5 2. 流量控制思想概述 ............................................................................................. 5 2.1. 什么是流量控制? ................................................................................................... 5 2.2. 为什么要应用流量控制? ..................................................................................... 6 2.3. 优点 .............................................................................................................................. 7 2.4. 缺点 .............................................................................................................................. 7 2.5. 队列 .............................................................................................................................. 7 2.6. 数据流 ......................................................................................................................... 8 2.7. 令牌桶 ......................................................................................................................... 8 2.8. 包和帧 ......................................................................................................................... 9 3. 流量控制中几个必备元素 ................................................................................. 9 3.1. 整流 .............................................................................................................................. 9 3.2. 调度 ............................................................................................................................ 10 3.3. 分类 ............................................................................................................................ 10 3.4. 监管 ............................................................................................................................ 11 3.5. 丢弃 ............................................................................................................................ 11 3.6. 标记 ............................................................................................................................ 11 4. 流量控制组件 .................................................................................................. 11 4.1. 排队规则(qdisc) ................................................................................................. 12 4.2. 分类(class) .......................................................................................................... 12 4.3. 过滤器(filter) ................................................................................................... 13 4.4. 分类器(classifier) .......................................................................................... 13 4.5. 监管器(policer) ................................................................................................. 13 4.6. 丢包(drop) ............................................................................................................ 14 4.7. 句柄(handle)........................................................................................................ 14 5. 软件包和工具集 ............................................................................................... 14 5.1. 内核版本要求 .......................................................................................................... 15 5.2. iproute2 工具 (tc) ............................................................................................ 16 5.3. tcng, 下一代流量控制(Traffic Control Next Generation) ........ 18 5.4. IMQ, 中间队列设备 .............................................................................................. 18 6. 无分类排队规则 (qdiscs) .............................................................................. 18 6.1. FIFO, 先进先出 (pfifo and bfifo) ............................................................ 18 6.2. pfifo_fast, Linux 默认排队排队 .................................................................. 20 6.3. SFQ, 随机公平队列 .............................................................................................. 21
6.4. ESFQ, 扩展的随机公平队列............................................................................... 23 6.5. GRED, 通用早期随机丢包 ................................................................................... 23 6.6. TBF, 令牌桶过滤器 .............................................................................................. 23 7.1. HTB, 分层令牌桶 ................................................................................................... 25 7.1.1. 软件要求 ..................................................................................... 26 7.1.2. 整流 ............................................................................................. 26 7.1.3. 租借 ............................................................................................. 26 7.1.4. HTB 分类参数 ............................................................................... 28 7.1.5. 规则 ............................................................................................. 29 7.3. PRIO, 优先级调度 ................................................................................................. 29 7.4. CBQ, 基于类的队列 .............................................................................................. 30 8. 流量控制的常见规则和方法 ............................................................................ 30 8.1. Linux 流量控制的一般规则 ................................................................................ 30 8.2. 在已知带宽的线路上实施流量控制 ................................................................. 30 8.4. 基于流来分享、划分带宽 ................................................................................... 31 8.5. 基于 IP 来分享、划分带宽 ................................................................................. 31 9. 用于 Qos 和流量控制的脚本 ............................................................................ 31 9.1. wondershaper .......................................................................................................... 31 9.2. 用于 ADSL 宽带的指南脚本 (myshaper) ........................................................ 31 9.3. htb.init ................................................................................................................... 31 9.4. tcng.init ................................................................................................................. 31 9.5. cbq.init ................................................................................................................... 32 10. 图表 ................................................................................................................ 32 10.1. 总图 .......................................................................................................................... 32 11. 有关流量控制的资源链接 .............................................................................. 33
Linux 流量控制介绍 Linux 提供了丰富的工具来管理和控制报文的发送。Linux 社区对于在 Linux 下 对报文进行修改、应用防火墙策略(netfiler,以及之前的 ipchains)以及大 量的可以运行在操作系统上的网络服务工具非常熟悉。但只有小部分 Linux 社区 内和更少的 Linux 社区外人员了解 Linux 流量控制子系统的强大功能,并且该子 系统已经在 2.2 和 2.4 内核中变得更为成熟。 本指南试图介绍流量控制的思想,传统的流量控制要素,Linux 流量控制组件, 同时提供了一些参考。这份指南是通过对 LARTC 指南上的文档以及重要的 LARTC 邮件列表学习、整理出来的。 对于没有耐心阅读本指南,想要立即体验流量控制的用户,推荐你们阅读 Traffic Control using tcng and HTB HOWTO 和 LARTC HOWTO,这两份文档会很有用。 1.1. 目标及假定读者 本指南的目标读者是想对流量控制及对 Linux 下的流量控制工具有所了解的网 络管理人员或者有一定基础的家庭用户 本指南的读者应该熟悉 UNIX 操作环境及命令行且具备一定的 IP 网络知识。如果 想要对流量控制进行应用,还需具有对 linux 内核或软件进行打补丁,编译及安 装的能力。对于拥有较新内核版本(2.4.20 及以上,参见 5.1 节)的用户,只需 要会安装和使用软件就够了。 一般来说,本指南应该适合各类用户。虽然有些读者可能已经有在 Linux 下进行 流量控制的经验,但我仍假设所有读者都没有相关经验 1.2. 排版约定 本文档是在 DocBook 中通过 vim 来编写的。所有格式由基于 DocBook XSL 和 LDP XSL 表格样式的 xsltproc 来控制。字体格式和显示样式和大多数印刷及电子技 术文档相似。 1.3. 推荐学习方法 强烈建议读者先通过 tc 和 tcng 来突击学习下流量控制的规则,在集中学习 tcng 之前,只需对 tc 命令行工具有一个大致的了解。tcng 软件包定义了一个完整的 语言来描述流量控制结构。第一眼看上去,这门语言会让人生畏,但当你掌握之 后,它会使你能很容易使用流量控制,而这是直接使用 tc 工具不能办到的。
如果可能的话,我将以一种抽象的方式来描述 Linux 下流量控制系统的行为,但 有些时候我也会借用其他类似的系统来描述这些结构。同一个例子,我不会既用 tcng 语言又用 tc 命令行来实现,聪名的读者会将两者融会贯通。 1.4. 待补充内容,错误指正及读者反馈 本指南仍然缺少些内容。下面的内容会在未来某个时间点添加进本文档。  有关 GRED, WRR, PRIO 和 CBQ 的描述及图表。  使用示例  对分类器(classifier)进行详细介绍的小节。  对流量测量技术进行讨论的小节。  对标记有覆盖的小节。.  更多关于 tcng 的细节. 欢迎将建议,错误指正及反馈发送至。理论上来说,所 有的错误和疏忽都是我的错,虽然我已经尽力确保了当前文档的正确性,但我不 能承担读者根据此文档进行操作后的任何后果。 2. 流量控制思想概述 本节将会对流量控制进行介绍并且说明为什么要使用流量控制,然后指出流量控 制的一些优缺点,最后介绍在流量控制中涉及的一些关键思想。 2.1. 什么是流量控制? 流量控制是路由器上报文的接收和发送机制及排队系统的统称。这包括在一个输 入接口上决定以何种速率接收何种报文,在一个输出接口上以何种速率、何种顺 序输出何种报文。 在绝大多数情况下,流量控制只包含一个单一队列,此队列以硬件所能处理的最 大能力接收报文并尽快输出它们,这种队列就叫 FIFO(first in,first out)。 Linux 下的默认排队规则是 pfifo_fast,此规则比 FIFO 稍复杂。 在很多类型的软件中都有使用队列的例子。队列是组织未定任务或数据流的一种 方法(参考 2.5 节)。因为网络链路层单纯的以串行方式发送数据流,所以队列 对于管理输出报文是必要的。 如果一桌面电脑和一台高效 web 服务器共享同一条上行链路,它们对带宽的竞争 就可能发生。web 服务器可能会填满路由器的发送队列,当 web 服务器发送数据
的速率大于路由器上数据的输出速率时,路由器就会开始丢包(它的缓冲区满了)。 这个时候,桌面电脑(拥有一个交互用户)就会面临丢包及高延时的风险。注意, 高延迟有时候会让用户抓狂!通过划分两个内部队列给这两种不同类型的应用使 用,这两种应用就可以较好的分享网络资源。 流量控制是一个工具集,它能够让用户通过它在网络设备上应用不同的队列和排 队机制。虽然利用这些工具来重新划分数据流和报文的功能很强大,并且可以进 行复杂的应用,但最好有足够多的带宽。 术语服务质量(QoS)通常是流量控制的同义词。 2.2. 为什么要应用流量控制? 分组交换网络和电路交换网络的一个重要不同之处是:分组交换网络是无状态的, 而电路交换网络(比如电话网)必须保持其状态。分组交换网络和 IP 网络一样 被设计成无状态的,实际上,无状态是 IP 的一个根本优势。 无状态的缺陷是不能对不同类型数据流进行区分。但通过流量控制,管理员就能 够基于报文的属性对其进行排队和区别。它甚至能够被用于模拟电路交换网络, 将无状态网络模拟成有状态网络。 有很多实际的理由去考虑使用流量控制,并且流量控制也有很多有意义的应用场 景。下面是一些利用流量控制可以解决或改善的问题的例子 下面的列表不是流量控制可以解决的问题的完整列表,此处仅仅介绍了一些能通 过流量控制来解决的几类问题 常用的流量控制解决方案  通过 TBF 和带子分类的 HTB 将带宽限制在一个数值之下  通过 HTB 分类(HTB class)和分类(classifying)并配合 filter,来限制 指定用户、服务或客户端的带宽。  通过提升 ACK 报文的优先级,以及使用 wondershaper 来最大化非对称线 路上的 TCP 吞吐量。  通过带子分类的 HTB 和分类(classifying)为某个应用或用户保留带宽。  通过 HTB 分类(HTB class)中的(优先级)PRIO 机制来提高延时敏感型应用 的性能。  通过 HTB 的租借机制来管理多余的带宽。  通过 HTB 的租借机制来实现所有带宽的公平分配。  通过监管器(policer)加上带丢弃动作的过滤器(filter)来使某种类型 的流量被丢弃。 请记住,很多时候,最好去购买更大的带宽,流量控制并不能解决所有的问题。
2.3. 优点 当正确的使用流量控制时,就能提高网络资源的利用率,并能减少潜在的竞争。 正确使用后,网络就会符合流量控制的目标,比如能给大流量的下载分配一个合 适的带宽然后使高优先级的交互报文也能进行正常的传送,低优先级的数据(比 如邮件)也能正常的传输而不明显的影响其它数据传送。 广义上来说,如果流量控制能符合已和用户约定好的策略,那么用户就能最大限 度的使用网络资源。 2.4. 缺点 复杂性是流量控制的主要缺点。而流量控制工具降低了学习流量控制及其机制的 难度,虽然有一些方式来熟悉这些流量控制工具,但是从流量控制中找出不正确 的配置也是一个挑战 恰当的使用流量控制可以使网络资源更加公平的被分配,但流量控制很容易被使 用不当,如果使用不当就会导致对网络资源的分配更不公,对网络资源的竞争会 更大。 为了维护流量控制结构,需要路由器上有足够的计算资源。幸运的是,它只会消 耗较小的计算资源,不过当流量控制规则变得庞大且复杂时它所消耗的资源就不 容忽视。 对于个人用户来说,流量控制几乎没什么成本。但对于公司来说,应用流量控制 所带来的费用可能会比购买更多的带宽还多,因为培训一个精通流量控制的人员 会比购买更多的带宽花费多。 尽管分组交换网上的流量控制是一种很宽泛的概念,但你可以认为流量控制提供 了一种将电路交换网的有状态属性应用到分组交换网的方式。 2.5. 队列 队列是流量控制的基础,而且是调度的实现思想。一个队列中包含有限个对象, 这些对象将在队列中等待被处理。在网络中,这些对象就是数据包,这些数据包 在队列中等待被硬件传输。在最简单的模式中,数据包按照先进先出的原则进行 传输,这种队列在计算机网络(或更广泛的计算机科学)中被称为 FIFO。 当没有和其它机制配合使用时,队列并不能提供流量控制功能。实际上,队列只 有两种操作:将对象加入到队列中,即入队,将对象从队列中移除,即出队。
当和其他组件配合时队列就会具有复杂的功能,比如在多队列中对报文进行延迟, 对报文进行重新排队,丢弃报文,对报文进行分级。队列中也可以包含子队列, 以便使用更为复杂的调度方式。 对于高层应用来说,报文就是入队然后发送,对于报文是以何种顺序、何种方式 被发送的,高层应用并不关心。因此,对于高层应用来说,流量控制表现出来的 就是一个单一队列。只有对应用流量控制的那一层来说,流量控制结构才是可见 的。 2.6. 数据流 一条数据流就是两台主机之间的连接或会话。两台主机之间的任何数据交互报文 可以被认为一条数据流。在 TCP 中,源 IP 加源端口和目的 IP 加端口的连接就决 定了一条数据流,UDP 也类似。 流量管理机制常常会将流量划分为不同类的数据流,这些流可以被聚合起来然后 作为一条聚合流被传输(DiffServ,差分服务)。不同的流量控制机制能基于不 同的流将带宽进行均等的划分。 如果想对带宽进行均分,然后分配给对带宽有竞争关系的数据流,那么对数据流 进行处理就很重要。特别是有些应用会产生大量的数据流,这时的流量管理就更 为重要。 2.7. 令牌桶 整流的两个关键要素就是令牌桶。 为了控制出队的速率,一种方式就是直接统计队列中出队的报文或字节数,但是 为了保证精确性就需要复杂的计算。在流量控制中广泛应用的另一种方式就是令 牌桶,令牌桶以一定的速率产生令牌,报文或字节出队时从令牌桶中取令牌,只 有取到令牌后才能出队。 我们可以打一个比方,一群人正排队等待乘坐游乐场的游览车。让我们想象现在 有一条固定的道路,游览车以固定的速度抵达,每个人都必须等待游览车到达后 才能乘坐。游览车和游客就可以类比为令牌和报文,这种机制就是速率限制或流 量整形,在一个固定的时间段内只有一部分人能乘坐游览车。 继续上面的比方,设想有大量的游览车正停在车站等待游客乘坐,但现在没有一 个游客。如果现在有一大群游客同时过来了,那么他们都可以马上乘上游览车。 在这里,我们就可以将车站类比为桶,一个桶中包含一定数量的令牌,桶中的令 牌可以一次性被使用完而不管数据包到达的时间。
分享到:
收藏