1. Linux 流量控制介绍Linux 提供了一系列可用于修改和调整网络数据包的工具。Linux 社区对修改数据包、应用防火墙策略(如 netfilter或更古老的 ipchains)以及在 Linux 上运行着的各种各样的网络服务已经非常熟悉。然而,Linux 社区内部却很少有人知道 Linux 的流量控制子系统已经非常成熟,并且有着强大的功能。在 Linux 社区外,Linux 流量控制的功能更是鲜有人知。本指南将会介绍 流量控制的思想、 方法以及 Linux 流量控制的组件。同时会提供一些一般性的指导。 . 这份指南是笔者根据 LARTC HOWTO、对各种软件项目的研究,以及在 LARTC mailing list 上的一些重要主题整理而成的。对于急于实施 Linux 流量控制的人,建议直接阅读 Tra cffi Control using tcng and HTB HOWTO 何 LARTC HOWTO这两份资料。2. Linux 流量控制思想简介本节将会简要介绍 Linux 流量控制并说明为什么要实施流量控制,同时指出实施流量控制的一些优点 和缺点,最后再介绍 Linux 流量控制思想中的关键要素。2.1. 什么是流量控制流量控制就是在路由器上通过一系列队列,对数据包进行排序以控制它们的发送顺序,并通过一系列策略控制收到的和发送的数据包是否应该被丢弃,同时还要对数据包的发送速率进行控制。在大部分情况下,流量控制只有一个队列,接收收到的数据包(译者注:这里的接收到的数据包指的是由本机应用程序产生的数据包,而不是指从网络上接收到的数据包),把它们放入队列,并以网络硬件所能支持的最大速度发送出去。这种类型的队列叫做 FIFO。 注意:Linux 默认的排队规则是 pfifo_fast,这是一种比 FIFO 稍微复杂一点的排队规则。不同的应用有不同类型的队列。队列就是一种用于组织未能立即开始的任务或数据流的方法。网络链路通常要求数据包以一定的顺序发送,因此我们需要在本机网络出口上使用队列来管理数据包。如果一台桌面电脑和一台流量较大的网站服务器共用一条网络链路,那就有可能发生带宽争夺。由于网站服务器的上行流量很大,超过了链路速度,从而路由器上的队列被来自网站服务器的数据包挤满。路由上的队列被挤满后,路由器就会开始丢包,这会导致桌面电脑的丢包率上升,数据延时增大。过大的延时会让桌面用户抓狂的。如果我们把这条链路分成两部分,分别给桌面电脑和网站服务器使用,就能较好地分配带宽资源,让两者都能比较正常地工作。在 Linux 下,用户可以通过一系列工具在...