服务质量:在带宽一定的情况下,提供更好的服务质量
多端口使用宽带,在各种服务抢带宽的时候
以太网模型是慢启动模式
延时ssh
吞吐web
先入先出
快速通道和慢速通道

++++++++++++++QOS服务质量++++++++++++
[root@localhost ~]# tc qdisc ls
[root@localhost ~]# tc qdisc ls dev eth0
qdisc pfifo_fast 0: bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
默认情况下,网卡的队列规则为pfifo_fast。不分类,尽可能快的先入先出

队列规则分为两种:
  无类队列规则
    pfifo/bfifo
    pfifo_fast
    red骨干网路由器上用,随机早期预测
    sfq 完全公平队列
    tbf 令牌桶过滤 --- 流量整形(限速)
添加删除队列规则
]# tc qdisc add dev eth0 root pfifo
]# tc qdisc del dev eth0 root

什么叫做队列
默认1个情况下,默认网卡的队列规则为pfifo_fast。不分类,尽可能快的先进先出

tc qdisc ls 查看队列规则设置流量控制
tc class 创建
tc filter 过滤
:     
 数据包优先级问题 ---通过队列来实现
• 只有一个网卡,我们要设置一个队列规则
• 一般情况下,应用程序产生数据包,网卡
  处理数据包,原则是先到先发(FIFO),
  队列。
• 而有些数据包需要先发出----再开一个队
  列,让队列与队列的优先级不一样。

==================
什么叫做队列规则:
• 队列规定:
  管理设备输入(ingress)或输出(egress)的一个算法。
• 无类的队列规定:
  一个内部不包含可配置子类的队列规定。
• 分类的队列规定 :
  一个分类的队列规定内可一包含更多的类。其中每个类又
  进一步地包含一个队列规定,这个队列规定可以是分类
  的,也可以是无类的。根据这个定义,严格地说pfifo_fast
  算是分类的,因为它实际上包含3个频道(实际上可以认为
  是子类)。然而从用户的角度来看它是无类的,因为其内
  部的子类无法用tc 工具进行配置。
网卡发 出对
无类:没有类别
有类:分类传输
先分类 后设规则
网卡收 入队

无类队列规则有
不分类
• man tc

CLASSESS QDISCS
[p|b]fifo 以包个数或字节为单位,有一个limit参数,用来设置队列的长度,纯先进先出
pfifo_fast 基于包的先入先出
red 骨干网路由器上用,随机早期预测 思科路由用的比较多
sfq  随机公平队列 公平发送
tbf  令牌桶过滤器 限速用,不管优先级,流量整形 rat 2mbit  burst(前几兆不受限)limit (队列长度)

查看队列规则
man tc 100M/s/8
]# tc qdisc ls
qdisc pfifo_fast 0: dev eth0 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
添加新的队列规则
[root@localhost pub]# tc qdisc add dev eth0 root pfifo
[root@localhost pub]# tc qdisc ls
qdisc pfifo 8001: dev eth0 limit 1000p
删除队列规则(还原为pfifo_fast队列规则)
[root@localhost pub]# tc qdisc del dev eth0 root (根节点)
[root@localhost pub]# tc qdisc ls
qdisc pfifo_fast 0: dev eth0 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
TBF

TBF的实现在于一个缓冲器(桶),不断地被一些叫做“令牌”的虚拟数据以特定
  速率填充着。 (token rate)。桶最重要的参数就是它的大小,也就是它能够存
  储令牌的数量(TBF模拟了一个桶,桶中装有令牌,令牌将从数据队列中收
  集数据包,然后从桶中删除)。

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

– 数据流以等于令牌流的速率到达TBF。这种情况下,每个到来的数据包都能对应一
     个令牌,然后无延迟地通过队列。
       – 数据流以小于令牌流的速度到达TBF。通过队列的数据包只消耗了一部分令牌,剩
     下的令牌会在桶里积累下来,直到桶被装满。剩下的令牌可以在需要以高于令牌
     流速率发送数据流的时候消耗掉,这种情况下会发生突发传输。
       – 数据流以大于令牌流的速率到达TBF。这意味着桶里的令牌很快就会被耗尽。导致
     TBF中断一段时间,称为“越限”。如果数据包持续到来,将发生丢包。最后一种情
     景非常重要,因为它可以用来对数据通过过滤器的速率进行整形。令牌的积累可
     以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致
     传输延迟直至丢包。 实际的实现是针对数据的字节数进行的,而不是针对数据包

+++++++++
wget http://192.168.0.253/file

给网卡添加出队队列规则TBF,限制速度为2mbit
]# tc qdisc ls
qdisc pfifo_fast 0: dev eth0 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
]# tc qdisc add dev eth0 root(根节点) tbf help
Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]
               [ peakrate KBPS ] [ latency TIME ]
]# tc qdisc ls dev eth0
qdisc tbf 8003: rate 2000Kbit burst 10Kb lat 41.0ms

添加无类队列规则TBF,实现限速目的
]# tc qdisc add dev eth0 root tbf help
]# tc qdisc add dev eth0 root tbf rate 2mbit burst 10k limit 20k

]# tc qdisc add dev eth0 root tbf limit 100k (队列上限大小)burst(不限制) 20k(前20K不限制) rate 2mbit

+++++++
TBF提供了一些可调控的参数。
limit
    limit 确定最多有多少数据(字节数)在队列中等待可用令牌。队列长度,即
    队列可以缓存的字节数。
burst
    桶的大小,以字节计。这个参数指定了最多可以有多少个令牌能够即刻被使
    用,也就是爆发流量大小。通常,管理的带宽越大,需要的缓冲器就越大。
    在 Intel 体系上,10兆bit/s的速率需要至少10k字节的缓冲区才能达到期望的
    速率。 如果你的缓冲区太小,就会导致到达的令牌没有地方放(桶满了),
    这会导致潜在的丢包。
rate
    设置速率限制,单位每秒mbit,kbit等。参见上面的limits,如果桶里存在令牌
    而且允许没有令牌,相当于不限制速率(缺省情况)。If the bucket contains
    tokens and is allowed to empty, by default it does so at infinite speed.

++++++++

SFQ

CLASSLESS QDISCS---sfq
  SFQ(Stochastic Fairness Queueing,随机公平队列)是公平队列算法家族中
  的一个简单实现。它的精确性不如其它的方法,但是它在实现高度公平的同
  时,需要的计算量却很少。

SFQ 的关键词是“会话”(或称作“流”) ,主要针对一个 TCP 会话或者 UDP流。

•流量被分成相当多数量的 FIFO队列中,每个队列对应一个会话。数据按照简
  单轮转的方式发送, 每个会话都按顺序得到发送机会。
  SFQ将TCP和UDP流量平均的分配至多个FIFO队列中,每个队列对应一个或
  多个会话,然后按照轮询的方法依次从每个FIFO队列中取数据发送。保证数
  据发送的公平性。这种方式非常公平,保证了每一个会话都不会没其它会话
  所淹没。
•SFQ之所以被称为“随机”,是因为它并不是真的为每一个会话创建一个队
  列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。因
  为使用了散列,所以可能多个会话分配在同一个队列里,从而需要共享发包
  的机会,也就是共享带宽。为了不让这种效应太明显,SFQ会频繁地改变散
  列算法,以便把这种效应控制在几秒钟之内。
•有很重要的一点需要声明:只有当你的出口网卡确实已经挤满了的时候,
  SFQ才会起作用!否则在你的Linux机器中根本就不会有队列,SFQ也就不会
  起作用。稍后我们会描述如何把 SFQ 与其它的队列规定结合在一起,以保证
  两种情况下都比较好的结果。
 
 CLASSLESS QDISCS---sfq
• sfq 随机公平队列
按照会话(每个tcp连接或者udp流)为流量
  进行排序,然后循环发送每个会话的数据
  包。
在限好速的情况下,同一个端口的应用,使
  用随机公平队列。

有类队列规则

分类
man tc
CLASSFUL QDISCS
CBQ 时间限速,软件时钟不精确,硬件实现
HTB 分层令牌桶,可以满足CBQ的功能,功能更强大,很重要
PRIO 另一种意义的pfifo_fast 基于优先级的有类队列规则

22 最小延时
80最大吞吐
25一般服务

PRIO
tc-prio 1只负责分类2.默认按照tos值将包分为3类3.可以自定义分类 不用tos值分类 只能分3类,要分超过3类时要用TBF
 TELNET                   1000           (minimize delay)
  FTP
  Control                   1000           (minimize delay)
  Data                       0100           (maximize throughput)

TFTP                     1000           (minimize delay)

SMTP
 Command phase    1000           (minimize delay)
 DATA phase          0100           (maximize throughput)

Domain Name Service
                      UDP Query        1000           (minimize delay)
                      TCP Query        0000
                      Zone Transfer    0100           (maximize throughput)

NNTP                     0001           (minimize monetary cost)

ICMP

fw 防火墙标记
使用FW匹配器来定义过滤器
1、定义队列规则为PRIO并且默认不管哪种TOS值的包都走频道2
]# tc qd del dev eth0 root
]# tc qd add dev eth0 root handle 1:0 prio help
Usage: ... prio bands NUMBER priomap P1 P2...
]# tc qd add dev eth0 root handle 1:0 prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2、定义过滤器
定义22端口的包走频道0。
80端口走频道1。
其它包不定义,按上面的配置默认走频道2。

]# iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 2222
]# iptables -t mangle -A OUTPUT -p tcp --sport 80 -j MARK --set-mark 8080

]# tc filter add dev eth0 parent 1:0 protocol ip handle 2222 fw flowid 1:1
添加过滤器:tc filter add dev eth0
以根节点为父添加:parent 1:0
指定协议为ip:protocol ip
按照上面的iptables标记来匹配数据包:handle 2222 fw
匹配的数据包,将走编号为1:1那个分类:flowid 1:1

]# tc filter add dev eth0 parent 1:0 protocol ip  handle 8080 fw  flowid 1:2

3、配置好不同频道 的分类的数据包速率限制
]# tc qd add dev eth0 parent 1:1 handle 10:0 tbf rate 2mbit burst 10k limit 10k
]# tc qd add dev eth0 parent 1:2 handle 20:0 tbf rate 4mbit burst 20k limit 20k
]# tc qd add dev eth0 parent 1:3 handle 30:0 tbf rate 8mbit burst 20k limit 30k

limit
    limit 确定最多有多少数据(字节数)在队列中等待可用令牌。队列长度,即
    队列可以缓存的字节数。

burst
    桶的大小,以字节计。这个参数指定了最多可以有多少个令牌能够即刻被使
    用,也就是爆发流量大小。通常,管理的带宽越大,需要的缓冲器就越大。
    在 Intel 体系上,10兆bit/s的速率需要至少10k字节的缓冲区才能达到期望的
    速率。 如果你的缓冲区太小,就会导致到达的令牌没有地方放(桶满了),
    这会导致潜在的丢包。

rate
    设置速率限制,单位每秒mbit,kbit等。参见上面的limits,如果桶里存在令牌
    而且允许没有令牌,相当于不限制速率(缺省情况)。If the bucket contains
    tokens and is allowed to empty, by default it does so at infinite speed.

HTB 分层令牌桶

特点: 1.可分更多类,但是需要手动添加分类 tc class add
          2. 可实现借用带宽
         3.不需要再加tbf限速,本身可以限速(流量整形)tc qd
    
而Prio:
    只能分3类,3类默认已有,不需要手动添加,更简单
    需要另外结合TBF限速

[ 1:0 ]            root定义队列规则为HTB
                          |                              tc qdisc add xxxxx
                          [1:1   ]                 定义class,一个大的分类,设定总上限
                         |                   tc  calss add xxxxxxxxxxx
             --------------             定义4个class,直接实现流量整形(不用在结合TBF)
         |       |    |       |          tc  calss add xxxxxxxxxxx     
      1:2       1:3    1:4    1:5           定义过滤器,指定什么样的匹配包该走哪个
      22       80     25      other                  tc filter add
  100kbit  8mkib 1mkib  2mkib

使用U32匹配
1、添加队列规则
]# tc qd add dev eth0 root handle 1:0 htb default 5(分类的次编号)//默认没有过滤器的时候走1:5
2、添加一个大的类,类编号通过classid 1:1 来进行指定
]# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 12mbit burst 30k //大类的限速12m
3、添加四个子类,类编号分别指定
]# tc class add dev eth0 parent 1:1 classid 1:2 htb rate 100kbit burst 20k
]# tc class add dev eth0 parent 1:1 classid 1:3 htb rate 8mbit burst 20k
]# tc class add dev eth0 parent 1:1 classid 1:4 htb rate 1mbit burst 20k
]# tc class add dev eth0 parent 1:1 classid 1:5 htb rate 2mbit burst 20k
4、添加过滤器
]# tc filter add dev eth0 parent 1:0 protocol ip prio 1000(优先级)  u32 match ip sport 22 0xffff(端口源码) flowid 1:2
]# tc filter add dev eth0 parent 1:0 protocol ip prio 2000  u32 match ip sport 80 0xffff flowid 1:3
]# tc filter add dev eth0 parent 1:0 protocol ip prio 3000  u32 match ip sport 110 0xffff flowid 1:4

-------------------------
使用iptables匹配包打标记,通过fw匹配方式
1、添加队列规则
]# tc qd del dev eth0 root
]# tc qd add dev eth0 root handle 1:0 htb default 5
2、添加一个大的类,类编号通过classid 1:1 来进行指定
]# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 10mbit burst 50k
3、添加四个子类,类编号分别指定
]# tc cl add dev eth0 parent 1:1 classid 1:2 htb rate 100kbit burst 20k ceil 10mbit
]# tc cl add dev eth0 parent 1:1 classid 1:3  htb rate 4mbit burst 20k ceil 10mbit
]# tc cl add dev eth0 parent 1:1 classid 1:4  htb rate 3mbit burst 20k ceil 10mbit
]# tc cl add dev eth0 parent 1:1 classid 1:5  htb rate 2500kbit burst 20k ceil 10mbit (借用 总上限)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               )
4、添加过滤器
]# iptables -t mangle -A  OUTPUT -p  tcp --sport 22 -j MARK --set-mark 2222
]# iptables -t mangle -A  OUTPUT -p  tcp --sport 80 -j MARK --set-mark 8000
]# iptables -t mangle -A  OUTPUT -p  tcp --sport 110 -j MARK --set-mark 1100

]# tc filter add dev eth0 parent 1:0 protocol ip prio 1000  handle 2222 fw flowid 1:2
]# tc filter add dev eth0 parent 1:0 protocol ip prio 2000 handle 8000 fw  flowid 1:3
]# tc filter add dev eth0 parent 1:0 protocol ip prio 3000 handle 1100 fw  flowid 1:4

-------------------------
使用iptables匹配包打标记,通过fw匹配方式
并且htb+sfq

1、添加队列规则
[root@localhost /]# tc qd del dev eth0 root
[root@localhost /]# tc qd add dev eth0 root handle 1:0 htb default 5
2、添加一个大的类,类编号通过classid 1:1 来进行指定
[root@localhost /]# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 10mbit burst 50k
3、添加四个子类,类编号分别指定
[root@localhost /]# tc cl add dev eth0 parent 1:1 classid 1:2 htb rate 100kbit burst 20k ceil 10mbit
[root@localhost /]# tc cl add dev eth0 parent 1:1 classid 1:3  htb rate 4mbit burst 20k ceil 10mbit
[root@localhost /]# tc cl add dev eth0 parent 1:1 classid 1:4  htb rate 3mbit burst 20k ceil 10mbit
[root@localhost /]# tc cl add dev eth0 parent 1:1 classid 1:5  htb rate 2500kbit burst 20k ceil 10mbit
4、添加过滤器
[root@localhost /]# iptables -t mangle -A POSTROUTING -p  tcp --sport 22 -j MARK --set-mark 2222
[root@localhost /]# iptables -t mangle -A POSTROUTING -p  tcp --sport 80 -j MARK --set-mark 8000
[root@localhost /]# iptables -t mangle -A POSTROUTING -p  tcp --sport 110 -j MARK --set-mark 1100
定义优先级
[root@localhost /]# tc filter add dev eth0 parent 1:0 protocol ip prio 1000  handle 2222 fw flowid 1:2
[root@localhost /]# tc filter add dev eth0 parent 1:0 protocol ip prio 2000 handle 8000 fw  flowid 1:3
[root@localhost /]# tc filter add dev eth0 parent 1:0 protocol ip prio 3000 handle 1100 fw  flowid 1:4
5、再结合sfq(随机公平队列)基本tcp连接来分平发送数据包。
[root@localhost /]# tc qd add dev eth0 parent 1:2 handle 20:0  sfq
[root@localhost /]# tc qd add dev eth0 parent 1:3 handle 30:0  sfq
[root@localhost /]# tc qd add dev eth0 parent 1:4 handle 40:0  sfq
[root@localhost /]# tc qd add dev eth0 parent 1:5 handle 50:0  sfq
分3类
tos值过滤
使用U32/FW大标记自定义要过滤定义哪个class
prio结合TBF限速

转载于:https://www.cnblogs.com/centos-python/articles/8525033.html

Linux高级路由-QOS相关推荐

  1. Linux高级路由---策略路由/捆绑/网桥

    Linux高级路由---策略路由/捆绑/网桥 1.策略路由     基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小.应用或IP源地址来选择转 ...

  2. 《Linux 高级路由与流量控制手册(2012)》第九章

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 译者序 本文内容来自 Linux Advanced Routing & Traffic Control HOWT ...

  3. linux禁止系统ip源路由功能,linux 高级路由 ip rule

    linux 高级路由即基于策略的路由比传统路由在功能上更强大,使用也更灵活,它不仅能够根据目的地址来转发路径而且也能够根据报文大小.应用或ip源地址来选择路由转发路径从而让系统管理员能轻松做到: 1. ...

  4. linux ip rule table,Linux 高级路由 ip rule / ip rout

    路由策略数据库的规则用于控制选择路由的算法. Internet上采用的路由算法一般是基于数据包目的地址的.理论上,也可以由TOS域决定,不过这没有实际应用.要了解经典路由算法的详细情况请参考RFC-1 ...

  5. linux高级路由与流量控制,linux高级路由与流量控制

    zjiel 于 2011-02-11 22:36:25发表: thx a lot. wuzhg 于 2011-01-16 01:50:34发表: 感谢楼主共享资料!!! pallana 于 2011- ...

  6. iproute2;高级路由;ip_route,ip_rule;

    http://linux.cn/article-4326-1.html iproute2 对决 net-tools 如今很多系统管理员依然通过组合使用诸如ifconfig.route.arp和nets ...

  7. 16、基于状态的iptable+高级路由(重点)

    --   基于状态的iptables   如果按照tcp/ip来划分连接状态,有12种之多 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及INVALID   这两个 ...

  8. iproute2和流量控制(ip和tc工具)---iproute2/ip/tc/qdisc实现Linux下的QoS控制

    本文目录 1.网络配置: "ip"工具 2.流量控制工具Traffic Control: tc工具 2.1.流量整形:Queuing Packets(也称做traffic shap ...

  9. 开启Linux系统路由转发功能 实现多网段电脑共享上网

    开启Linux系统路由转发功能 实现多网段电脑共享上网 作者:佚名 字体:[增加 减小] 来源:互联网 时间:07-13 13:03:29 我要评论 目前,Linux的主要应用在服务器领域,但是它的许 ...

最新文章

  1. iOS 11开发教程(一)
  2. DL之DNN优化技术:GD、SGD、Momentum、NAG、Ada系列、RMSProp各种代码实现之详细攻略
  3. B+树(加强版多路平衡查找树)
  4. react设置static defaultProps报错问题解决
  5. 格式化字符串漏洞利用 四、利用的变体
  6. VUE实现Tab切换
  7. 强制性国家标准 对胎压监测传感器提出更高要求
  8. c/c++ 时间函数总结 linux
  9. MFC窗口最小化到托盘
  10. java集成常用数组操作的类(比之前的集成度高点)
  11. 云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务...
  12. 计算机二级学科代码,二级学科分和代码表.doc
  13. 执行安装操作的时候,出现丢失MSVCR120.dll的解决方法
  14. 联盛德W801系列9-wifi和4G模块(air724ug)并存使用MQTT总结
  15. 雨落江满泛涟漪 尘拂心海滤情音 相思入云寄清风
  16. cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks
  17. 全球与中国压电比例阀市场深度研究分析报告
  18. 如何理解奇偶校验只能发现数据代码中奇数位出错的情况
  19. Ceph使用---块设备、RGW、CephFS初步使用
  20. 关于导数非常的好文章

热门文章

  1. 百度音乐接口-——可以根据这做一个在线音乐播放器哦
  2. VC2010 无法启动程序 系统找不到指定文件
  3. “老鲜肉”陈坤参加了“汇新杯”新兴科技+互联网创新大赛!
  4. 项目中,你们如何进行需求评审?
  5. H264/AVC SEI和VUI
  6. 关于PostgreSQL failed to load SQLModule安装失败的解决办法
  7. 北京Uber优步司机奖励政策(12月31日)
  8. ngui 教程一 转载自:雨松MOMO程序研究院
  9. eclipse护眼豆沙绿
  10. xmr monero miner