Qos/DSCP

TC

在Linux Kernel中完成Traffic Control功能主要包含以下几个组成部分:

Qdiscs (queuing disciplines): 排队规则, 该object决定进入该队列的数据包的流量控制。队列分为:不可分类队列 和 可分类队列。

Classes (within a queuing discipline): 分类器,对设备的流量控制的进行分类,设置不同种类的流量控制策略。Class必须属于可分类队列, 不同的Class下可以挂载其它队列,或作为终结点,什么都不做。

Filters: 过滤器,对网络上的数据包,根据需求的不同对不同的数据包设置不同的流量控制策略。

以下是几个图简单介绍的TC是如何工作的:

如下图:设备eth1上有一个QdiscHTB, 其总流量为128KB/s, 即Class1 (1:1); Class1 的流量分为三类:Class2: 60KB/s, Class3: 40KB/s, Class4: 28KB/s. 后期可以使用Filter将不同的数据分类到不同的class.

以下对这3个Objects进行介绍:

Qdiscs

Classless Qdiscs

[p|b]fifo

非常简单的队列,先进先出。P(packet), b(byte) 区分这个队列的是以packet或byte为单位。

pfifo_fast

这个是设备默认的Qdisc。Pfifo_fast中划分三个band, 即band0,band1, band2。我们可以将其想象成三个通道,每个通道都采取FIFO的策略,同时这三个队列有优先级的差别,即band0中的数据传完后才传输band1中数据,band1中的数据传完后才传输band2中数据。

内核遵照数据包的TOS标记,把带有“最小延迟”标记的包放进0频道。

red

随机早期检测队列。在达到限制的流量后,以随机的方式丢弃一些数据包。通常应用在骨干网上。

sfq

随机公平队列。该队列并不对流量进行限制。将队列分为多个通道,将对外发送数据的会话以随机的方式安排在不同的通道中,每个通道都会有固定的数据发送时间,由此达到公平的目的。SFQ之所以被称为“随机”,是因为它并不是真的为每一个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。

tbf

Please ‘man tbf’for detail.

令牌桶过滤器:只允许以不超过事先设定的速率到来的数据包通过, 但可能允许短暂突发流量朝过设定值。

TBF的实现在于一个缓冲器(桶),不断地被一些叫做“令牌”的虚拟数据以特定速率填充着(tokenrate)。桶最重要的参数就是它的大小,也就是它能够存储令牌的数量。

每个到来的令牌从数据队列中收集一个数据包,然后从桶中被删除。这个算法关联到两个流上——令牌流和数据流,于是我们得到3种情景:

数据流以等于令牌流的速率到达TBF。这种情况下,每个到来的数据包都能对应一个令牌,然后无延迟地通过队列。

数据流以小于令牌流的速度到达TBF。通过队列的数据包只消耗了一部分令牌,剩下的令牌会在桶里积累下来,直到桶被装满。剩下的令牌可以在需要以高于令牌流速率发送数据流的时候消耗掉,这种情况下会发生突发传输。

数据流以大于令牌流的速率到达TBF。这意味着桶里的令牌很快就会被耗尽。导致TBF中断一段时间,称为“越限”。如果数据包持续到来,将发生丢包。

最后一种情景非常重要,因为它可以用来对数据通过过滤器的速率进行整形。

令牌的积累可以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致传输延迟直至丢包。

Classful Qdiscs

PRIO

PRIO队列规定并不进行整形,它仅仅根据你配置的过滤器把流量进一步细分。你可以认为PRIO队列规定是pfifo_fast的一种衍生物,区别在每个频道都是一个单独的类,而非简单的FIFO。

当数据包进入PRIO队列规定后,将根据你给定的过滤器设置选择一个类。缺省情况下有三个类,这些类仅包含纯FIFO队列规定而没有更多的内部结构。你可以把它们替换成你需要的任何队列规定。

每当有一个数据包需要出队时,首先处理:1类。只有当标号更小的类中没有需要处理的包时,才会标号大的类。

HTB

http://linux-ip.net/articles/Traffic-Control-tcng-HTB-HOWTO.html

http://wiki.mikrotik.com/wiki/Manual:HTB

http://lartc.org/howto/lartc.qdisc.classful.html#AEN1071

http://liuleijsjx.iteye.com/blog/402152

http://luxik.cdi.cz/~devik/qos/htb/

HTB  是 HierarchyToken Bucket的简写,它实现了一个丰富的连接共享类别结构,使用HTB可以很容易的保证每个类的带宽,同时也允许特定类可以突破上限,占用其他类等宽等。HTB通过TFB实现带宽限制,也可以为类划分优先级。

1.      Link sharing 链路共享。HTB 可以保障提供给每个类带宽的数量是它所需求的最小需求或者等于分配给它的数量。当一个类需要的带宽少于分配的带宽时,剩余的带宽被分配给其他需要服务的类。

2.       Sharing hierarchy 共享层次。带宽共享是有层次的,不会越层共享。

3.       Rate ceiling 速率限度。参数ceil指定了一个类可以用的最大带宽,用来限制类可以借用多少带宽。缺省的ceil是和速率一样。

4.       Burst 突发。

5.       Priorizingbandwidth share 带宽分配优先。带宽分配的优先级包括两个方面,首先它影响到子类剩余带宽的分配,另一个方面的问题,包的延时。

6.       Understandingstatistics 查看统计。TC工具允许你对LINUX队列规定进行统计。

CBQ

Filters

http://www.study-area.org/tips/adv-route/Adv-Routing-HOWTO-11.html

U32 filter

对数据包进行匹配,对不同的数据包进行分类选择。

Fw filter

"fw"分类器要依靠防洪墙把需要引导的封包标示起来。所以,我们必须先设定好防火墙,为他们打上标识。

Reference:

1.      http://blog.csdn.net/wuruixn/article/details/8210760

2.      http://www.cnblogs.com/fsw-blog/p/4788036.html

3.      http://professor.blog.51cto.com/996189/1569481/

4.      http://www.360doc.com/content/12/0731/14/1073512_227467421.shtml

5.      http://blog.chinaunix.net/uid-25266990-id-3839886.html

6.      http://blog.csdn.net/zgangz/article/details/42737871

7.      http://blog.sina.com.cn/s/blog_6a1837e90100v9ye.html

8.

Traffic Control相关推荐

  1. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)的实现原理

    目录 文章目录 目录 基本概念 QoS.Bandwidth 和 Traffic Control 队列 FIFO 队列 pfifo_fast 队列 SFQ 队列 令牌桶队列 数据流(Data Flow) ...

  2. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)

    目录 文章目录 目录 tc CLI - Linux 流量控制工具 TC 的基本原理 TC 的组件 Qdisc 无类别队列规定(Classless Qdiscs) 分类队列规定(Classful Qdi ...

  3. Linux TC(Traffic Control)框架原理解析

    近日的工作多多少少和Linux的流控有点关系.自打几年前知道有TC这么一个玩意儿而且多多少少理解了它的原理之后,我就没有再动过它,由于我不喜欢TC命令行,实在是太繁琐了.iptables命令行也比較繁 ...

  4. traffic control 之 egress 队列

    egress队列主要作用于报文出方向,分为两类:无类队列和分类队列.下面分析下源码. 无类别队列 image.png 添加下面这条qdisc时,kernel端代码流程 tc qdisc add dev ...

  5. 【网络】inux流量控制器TC(Traffic Control)

    目录 实施 实施步骤概览 实施步骤 原理 经验之谈: 实施 原文:https://blog.csdn.net/tycoon1988/article/details/40832325 实施步骤概览 在L ...

  6. 【测试】linux tc命令|Linux模拟网络延迟、丢包等|traffic control(流量控制)

    目录 一.工具介绍 1.netem 2.tc 二.命令使用说明 1.模拟延迟传输 2.模拟网络丢包: 3.模拟包重复: 4.模拟数据包损坏: 5.模拟数据包乱序: 6.删除模拟配置: 更多高级用法 一 ...

  7. 利用traffic control模拟网络延迟和丢包

    1. 模拟延迟和丢包语句介绍 # 设置延迟语句: 从 eno1.enp7s0f0 网口出去的包将延迟20ms tc qdisc add dev eno1 root netem delay 20ms t ...

  8. Linux下QoS模块之tc(traffic control)操作简介/CBQ

    Linux从kernel 2.1.105开始支持QOS,不过,需要重新编译内核.运行 'make config'时将 EXPERIMENTAL_OPTIONS 设置成 'y',并且将 Class Ba ...

  9. Linux流量控制指南 (Traffic control HOWTO)

    流量控制指南 版本 1.0.2 Martin A. Brown 原文地址:http://www.tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/ 翻译 ...

最新文章

  1. OverflowError: cannot fit ‘int‘ into an index-sized integer
  2. iOS 隐藏下级页面的tabbar的统一处理
  3. machine learning (5)---learning rate
  4. 逾期后,如何修复个人征信?
  5. mysql表连接_mysql表连接
  6. 12 [虚拟化] 进程抽象;fork,execve,exit
  7. Python字符串isdigit()
  8. Spring学习(五):动态代理的两种实现方式(全网最容易懂)
  9. 基于html的火柴人羽毛球网页游戏设计
  10. 魔力岛服务器稳定吗,魔力岛《飘渺仙剑》寻找GM你愉我乐线上活动
  11. java汉字转拼音或效验汉字是否存在(过滤)
  12. java 中的连接超时_【java中处理http连接超时的方法】
  13. android 一个比较好的CoolRefreshView 上啦下拉刷新
  14. 7,词根 - 倒、流
  15. 20145324 《信息安全系统设计基础》第七周学习总结
  16. 云计算实训室课程体系设计
  17. 【mysql】 mysql备份还原时发生异常:导入mysql文件提示“ASCII '\0' appeared in the statement”
  18. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱
  19. 程序员每天到底有多累?
  20. GitHub对您的软件事业产生的影响

热门文章

  1. 基于bibtex的文献管理(详细)
  2. GB28181国标2016版本协议文档(报送稿)解读(一)
  3. Win7 IE11、Flash插件、.NET Framework组件 安装教程
  4. [第五章] 深入理解计算机系统第三版 家庭作业参考答案
  5. 360RePlugin 常见问题
  6. 磁盘阵列RAID技术超详细解读
  7. 新版2022高仿QQ,利用Java swing1:1模仿qq编写的聊天程序
  8. 一套.Net Core学校管理系统源码
  9. c++第二次作业-定期存款利息计算器
  10. JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)