先说说常用的分类和标记,首先需要说下:
cos tos dscp的概念及区别:
1、COS是在第二层ISL或802.1Q数据帧中的ISL或802。1Q的报头中的3位用于COS,即优先标识。3bit,0–7个级别。
802.1Q:
2、TOS是在第三层IP数据包中的8位TOS数据位,以来标识优先级。这8位中前3位表示优先级,后4位表示服务类型(分别为:最小延迟、最大吞吐量、最高可靠性、最小费用。只能其中一位为1,即生效。如果全为0就表示一般服务)。最后一位一般不用,置0
3、DSCP也是三层IP中的8位TOS字段表示优先级。不同的是用了前6位表示优先级,可设0–63,共64个等级。(把前6位中的前3位设为优先级,后3位设为0,就可以实现DSCP和TOS互相映射兼容)。 最后两位为早期拥塞通知。
因为COS二层标记中也是3位用于优先级,所以也可以把COS和TOS和DSCP中的优先级映射
DSCP数位域标识出数据包所属的特定交付分类,具体实现方法是企业为分类制定明确的交付目标。路由器和其它设备可以通过数据包队列(本质上就是缓冲区)和相应算法,传递数据包,实现交付目标。一些推荐标准涉及到DSCP数位域的值(如RFC2474中列举的),它们围绕加速转发(进一步描述可参见RFC3246)和确保转发(RFC2597)定义了一些期望行为:加速转发让交付过程低丢包、低延时和抖动最小;确保转发则保证无损交付。
RFC推荐使用DSCP值46来标记加速转发分类(6位DSCP的二进制值为101110),它适用于诸如VoIP或IP会议的实时交互多媒体流;为确保转发流量分配了包含12个标记值的集合,来保证不同等级的交付。
这里cos和dscp是修改了数据报文的内容,可以在网络其他设备来调度,还有本地主机的工具可以打一些标记,tc的u32模块,iptables的MARK,以及iproute2的工具.
这些工具并不修改报文,而是提供本地内核调度用.
QOS要保证服务,就要设计流量控制我们先了解几个概念:
流量控制中的概念
1. 整形
整形就是流量控制,把数据包的发送速率控制在一个固定的水平以下。由于整形通过延迟数据包的发送来控制数据包发送速率,故整形机制是非工作保存的。“非工作保存”可以理解为:系统必须进行一些操作来延迟数据包的发送。
反过来说,一种非工作保存的队列是可以进行流量整形的,而工作保存的队列(参考 PRIO)不能进行流量整形,因为工作保存队列无法延迟发送数据包。
2. 调度
一个调度器会对将要发送的数据包顺序进行排列或重排。
3分类
分类器能把不同类型的网络流量划分到不同的队列中去。
4.策略
决策器能计算并限制某个特定队列的流量
5. 丢弃
丢弃一个数据包,一个数据流或一个分类下的数据包,都可以叫做丢弃。
6. 标记
标记是一种对数据包进行一些修改的操作
注意
这里说的标记不是fwmark。iptables,$ipt-mark;,ipchains以及–mark都只修改数据包的元数据,而不修改数据包本身。
流量控制中的标记操作会给数据包加上一个DSCP,接下来在由一个管理员控制的一个网络下的其他路由器上将会使用这个标记。
QoS的关键指标主要包括:可用性、吞吐量、时延、时延变化(包括抖动和漂移)和丢失
在linux中是通过Tc命令来实现的(外加内核的支持). 我们看到网上大部分说的队列规则、分类、分类器什么的都是说的TC的机制,而tc只是实现qos的方式之一.
在网络通信设备中不同的厂商对qos有各自的实现和配置. 基于QOS的特性,便产生了tc.
我们先看一个图:
关于tc的设计:
递归控制 所谓的递归控制就是分层次地控制,而对于每个层次,控制方式都是一致的
Qdisc –class –filter 的树型组织模式.
qdisc 队列规则(queueing discipline):
用来实现控制网络的收发速度.通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 tcp)的前提下来平滑网络流量.需要注意的是,linux 对接收队列的控制不够好,所以我们一般只用发送队列,即”控发不控收”.它封装了其他两个主要 tc 组件(类和分类器).内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc 队列规则把数据包加入队列.然后,内核会尽可能多地从 qdisc里面取出数据包,把它们交给网络适配器驱动模块.
最简单的 QDisc 是 pfifo 它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列.不过,它会保存网络接口一时无法处理的数据包.常有的队列规则包括 FIFO 先进先出,RED 随机早期探测,SFQ 随机公平队列和令牌桶 Token Bucket,类基队列 CBQ,CBQ 是一种超级队列,即它能够包含其它队列,甚至其它 CBQ
Class 类
class 用来表示控制策略.很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了.
Filter 规则
filter 用来将用户划入到具体的控制策略中
目前,tc可以使用的过滤器有:fwmark分类器,u32 分类器,基于路由的分类器和 RSVP 分类器(分别用于IPV6、IPV4)等;其中,fwmark 分类器允许我们使用 Linux netfilter 代码选择流量,而 u32 分类器允许我们选择基于 ANY 头的流量 .需要注意的是,filter (过滤器)是在QDisc 内部,它们不能作为主体
关于tc的具体应用,我们以后分析.这里仅仅以理论作为引导让我们了解什么是QOS.