Linux流量控制(TC)之表面

1.1 流量控制是什么

​ 流量控制是路由器上报文的接收和发送机制及排队系统的统称。这包括在一个输入接口上决定以何种速率接收何种报文,在一个输出接口上以何种速率、何种顺序输出何种报文。

​ 传统的流量控制涉及到整流(sharping),调度(scheduling), 分类(classifying),监管(policing),dropping(丢弃), 标记(marking)等工作。

整流。整流器通过延迟数据包来使流量保持在一定速率。整流就是让包在输出队列上被发送之前进行延时,然后一定的速率发送,使网络流量保持在一定的速率之下,这是大部分用户进行流量控制的目的。

调度。调度就是对队列中的输入输出报文进行排列。最常的调度方法就是FIFO(先进先出),更广泛的来说,在输出队列上的任何流量控制都可以被称作调度,因为报文被排列以被输出。

分类。分类就是将流量进行划分以便区别处理,例如拆分后放到不同的输出队列中。在报文的接收、路由、发送过程中,网络设备可以用多种方式来分类报文。分类包括对报文进行标记,标记可以在边际网络中由一个单一的控制单元来完成,也可以在每一跳中都进行标记。

监管。监管作为流量控制的一部分,就是用于限制流量。监管常用于网络边际设备,使某个节点不能使用多于分配给它的带宽。监管器以特定的速率接收数据包,当流量超过这一速率时就对接收的数据包执行相应的动作。最严格的动作就是丢弃数据包,尽管该数据包可以被重新分类。

丢弃。丢弃就是通过某种机制来选择哪个数据包被丢掉。如RED。

标记。标记流量控制在数据包中插入了DSCP部分,在一个可管理网络中,其可被其它路由器利用和识别(通常用于DiffServ,差分服务)。

1.2 为什么需要流量控制

​ 分组交换网络和电路交换网络的一个重要不同之处是:分组交换网络是无状态的,而电路交换网络(比如电话网)必须保持其状态。分组交换网络和IP网络一样被设计成无状态的,实际上,无状态是IP的一个根本优势。

​ 无状态的缺陷是不能对不同类型数据流进行区分。但通过流量控制,管理员就能够基于报文的属性对其进行排队和区别。它甚至能够被用于模拟电路交换网络,将无状态网络模拟成有状态网络。

​ 有很多实际的理由去考虑使用流量控制,并且流量控制也有很多有意义的应用场景。下面是一些利用流量控制可以解决或改善的问题的例子,下面的列表不是流量控制可以解决的问题的完整列表,此处仅仅介绍了一些能通过流量控制来解决的几类问题

常用的流量控制解决方案

通过TBF和带子分类的HTB将带宽限制在一个数值之下

通过HTB分类(HTB class)和分类(classifying)并配合filter,来限制指定用户、服务或客户端的带宽。

通过提升ACK报文的优先级,以及使用wondershaper来最大化非对称线路上的TCP吞吐量。

通过带子分类的HTB和分类(classifying)为某个应用或用户保留带宽。

通过HTB分类(HTB class)中的(优先级)PRIO机制来提高延时敏感型应用的性能。

通过HTB的租借机制来管理多余的带宽。

通过HTB的租借机制来实现所有带宽的公平分配。

通过监管器(policer)加上带丢弃动作的过滤器(filter)来使某种类型的流量被丢弃。

1.3 如何进行流量控制 1.3.1 流量控制一般组成

一个流量控制系统,根据需要实现的功能,大致包含一下几个组件:

调度器

分类器(可选)

监管器

过滤器

其中,分类器不是必须的,如一些无类流量控制系统。下表是Linux中的对应实现的组件概念。

traditional elementLinux component
  The offers shaping capabilities.  
  A is a scheduler. Schedulers can be simple such as the FIFO or complex, containing classes and other qdiscs, such as HTB.  
  The object performs the classification through the agency of a object. Strictly speaking, Linux classifiers cannot exist outside of a filter.  
  A exists in the Linux traffic control implementation only as part of a .  
  To traffic requires a with a which uses "drop" as an action.  
  The dsmark is used for marking.  
1.3.2 Linux TC

Linux TC包含了强大的流控各方面的功能。在使用之前,先简单了解一下其中的逻辑。

Linux TC流量控制的相关名词解释:

Queueing Discipline (qdisc)

An algorithm that manages the queue of a device, either incoming (ingress) or outgoing (egress).

root qdisc

The root qdisc is the qdisc attached to the device.

Classless qdisc

A qdisc with no configurable internal subdivisions.

Classful qdisc

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11708.html