QoS服务质量

一、网络QOS
网络服务控制
流量大小控制,包优先级

队列的规则影响包的优先级,因为网卡只有一个,数据包必须是排队。
fifo:按照包的先后顺序,现来先走。
人为改变包的优先级,队列之间有有优先级,不是插队,而是另外开一个对列。每个包有不同的队列。先发高优先级的包,然后发中优先级的包,最后发低优先级包。网卡是满负荷工作的

[root@stu86 lianxi]# tc qd 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
qdisc pfifo_fast 0: dev vmnet1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vmnet8 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1


[root@stu86 lianxi]# tc qd ls dev eth0                                        #只看eth0网卡的队列
qdisc pfifo_fast 0: bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
[root@stu86 lianxi]#
pfifo:以包优先级的队列,
bands 3 priomap:3个队列映射
0 1  2:012说明是包,总共16个数字

0000   0------->1
0001   1------->2
0010   2------->2
0100   4------->1
1000   8------->0


[root@stu86 lianxi]# man tc-prio  有待研究

              TOS     Bits  Means                    Linux Priority    Band
              ------------------------------------------------------------
              0x0     0     Normal Service            0 Best Effort     1               #一般服务 ,最好的
              0x2     1     Minimize Monetary Cost  1 Filler              2
              0x4     2     Maximize Reliability      0 Best Effort     1
              0x6     3     mmc+mr                    0 Best Effort     1
              0x8     4     Maximize Throughput      2 Bulk              2
              0xa     5     mmc+mt                    2 Bulk             2
              0xc     6     mr+mt                     2 Bulk             2
              0xe     7     mmc+mr+mt                 2 Bulk             2
              0x10    8     Minimize Delay            6 Interactive     0
              0x12    9     mmc+md                    6 Interactive     0
              0x14    10    mr+md                    6 Interactive     0
              0x16    11    mmc+mr+md               6 Interactive     0
              0x18    12    mt+md                     4 Int. Bulk        1
              0x1a    13    mmc+mt+md               4 Int. Bulk        1
              0x1c    14    mr+mt+md                 4 Int. Bulk        1
              0x1e    15    mmc+mr+mt+md        4 Int. Bulk        1

[root@stu86 lianxi]# tc qd add dev eth0 root pfifo                          #给网卡添加队列规则名
[root@stu86 lianxi]# tc qd ls dev eth0                                      #查看规则
qdisc pfifo 8001: limit 1000p

[root@stu86 lianxi]# tc qd del dev eth0 root                                #改成默认规则。必须先删除后添加规则。
[root@stu86 lianxi]# tc qd 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

 

二、man tc

sfq    Stochastic Fairness Queueing reorders queued traffic so each ’session’ gets to            #随即公平队列
              send a packet in turn.

tbf    The Token Bucket Filter is suited for slowing traffic down to a precisely con-            #令牌桶过滤器,限速的话就可以用这个。
              figured rate. Scales well to large bandwidths.
限速例子:
[root@stu86 ~]# tc qd add dev eth0 root tbf rate 10mbit limit 20k burst 20k
rate:永远写的是比特。这个三个参数必加
limit:队列长度控制,全是字节
burst:爆发流量,也是字节数。如果调大这个参数,首先下载很大,然后平滑到rate速率


对80限速的情况,然后给大家一个公平队列。我们的目的
[root@stu86 ~]# tc qd del dev eth0 root                        #删除,也可以是初始化值
[root@stu86 ~]# tc qd add dev eth0 root sfq                    #添加随即公平队列
[root@stu86 ~]# tc qd ls dev eth0
qdisc sfq 8003: limit 128p quantum 1514b


CLASSFUL QDISCS
       The classful qdiscs are:

       CBQ    Class Based Queueing implements a rich linksharing hierarchy of  classes.   It         #其他的系统好,和HTB功能一样的
              contains  shaping  elements  as  well as prioritizing capabilities. Shaping is
              performed using link idle time calculations based on average packet  size  and
              underlying  link bandwidth. The latter may be ill-defined for some interfaces.

       HTB    The Hierarchy Token Bucket implements a rich linksharing hierarchy of  classes         #liunx这个效果好。功能是一样的和cbq
              with  an emphasis on conforming to existing practices. HTB facilitates guaran-
              teeing bandwidth to classes, while also allowing specification of upper limits
              to  inter-class  sharing.  It  contains shaping elements, based on TBF and can
              prioritize classes.

实验一、
这是带分类的规则,可以用class查看,root是根的规则,然后下面可以分叉,分叉的东西叫类,为了好分别我们给他们编号。这里的编号为8004:0。分类是解决优先级规则问题。
1)[root@stu86 ~]# tc qd del dev eth0 root
[root@stu86 ~]# tc qd add dev eth0 root prio
[root@stu86 ~]# tc qd ls dev eth0
qdisc prio 8004: bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

带分类的规则
2)[root@stu86 ~]# tc class ls dev eth0
class prio 8004:1 parent 8004:                #编号为8004:可以在类下作QD,如果是tbs就可以限速了,如果选择的sfq那么就随即公平
class prio 8004:2 parent 8004:
class prio 8004:3 parent 8004:
3)[root@stu86 ~]# tc qd add dev eth0 parent 8004:1 tbf rate 20kbit limit 20k burst 20k
[root@stu86 ~]# tc qd add dev eth0 parent 8004:2 tbf rate 20kbit limit 20k burst 20k
[root@stu86 ~]# tc qd add dev eth0 parent 8004:3 tbf rate 20kbit limit 20k burst 20k


实验二、
人为指定编号:
handle参数人为指定
[root@stu86 ~]# tc qd del dev eth0 root                                    #首先清空qos队列,或者是还原到默认指
[root@stu86 ~]# tc qd 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       #已经默认为0
[root@stu86 ~]# tc qd add dev eth0 root handle 1: prio                    #使用handle参数指定root根的prio为1
[root@stu86 ~]# tc qd ls dev eth0                                           #再次查看eth0的映射已经变成了1:
qdisc prio 1: bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1.
[root@stu86 ~]# tc class ls dev eth0                                       #查看eth0的类,自动分为1:1、1:2、1:3个类了
class prio 1:1 parent 1:
class prio 1:2 parent 1:
class prio 1:3 parent 1:

[root@stu86 ~]# tc qd add dev eth0 parent 1:1 handle 10: tbf rate 20kbit burst 20k limit 20k #对1类为速率为20k,爆发值为20k,长度20k
[root@stu86 ~]# tc qd add dev eth0 parent 1:2 handle 20: tbf rate 20kbit burst 20k limit 20k #对2类为速率为20k,爆发值为20k,长度20k
[root@stu86 ~]# tc qd add dev eth0 parent 1:3 handle 30: tbf rate 20kbit burst 20k limit 20k #对3类为速率为20k,爆发值为20k,长度20k
[root@stu86 ~]# tc qd ls dev eth0                                                            #总体配置结构查看,10、20、30个
qdisc prio 1: bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc tbf 10: parent 1:1 rate 20000bit burst 20Kb lat 1us
qdisc tbf 20: parent 1:2 rate 20000bit burst 20Kb lat 1us
qdisc tbf 30: parent 1:3 rate 20000bit burst 20Kb lat 1us


回顾:
公网路由器都是先到先发,只对本地起作用。
qos:
1)分级
2)限速,实际是整形
[root@stu86 ~]# tc qd 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
qdisc pfifo_fast 0: dev vmnet1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vmnet8 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

                                                                  |
                                                                  |
                                         -----------------
                                        |                                                   |
                                         -----------------
                                               |

实验三、
1把所有的规则放在对列3中,从0、1、2开始中。都放在2中,那么就是队列三中
[root@stu86 ~]# tc qd add dev eth0 root handle 1: prio help
Usage: ... prio bands NUMBER priomap P1 P2...                  0 1 2 3 4 5 6 7 8 9 101112131415
[root@stu86 ~]# tc qd add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  #人为的导入第三个队列中,指定包的队列流向
[root@stu86 ~]# tc class ls dev eth0
class prio 1:1 parent 1:
class prio 1:2 parent 1:
class prio 1:3 parent 1:
2。加队列规则
[root@stu86 ~]# tc qd add dev eth0 parent 1:1 handle 10:0 tbf rate 20kbit limit 20k burst 20k
[root@stu86 ~]# tc qd add dev eth0 parent 1:2 handle 20:0 tbf rate 8mbit limit 20k burst 20k
[root@stu86 ~]# tc qd add dev eth0 parent 1:3 handle 30:0 tbf rate 2mbit limit 20k burst 20k
[root@stu86 ~]#
3。指定过滤器:描写什么样的包放在那个类下,应该在root下添加
prio数字越小,优先级越高
u32:检测包的内容,过滤器。
0xffff:端口掩码
flowid:指定送到那个类里
parent 1:0:加到root上
[root@stu86 ~]# tc filter add dev eth0 protocol ip prio 1000 parent 1:0 u32 match ip sport 22 0xffff flowid 1:1  #默认22的走1队列
[root@stu86 ~]# tc filter add dev eth0 protocol ip prio 1100 parent 1:0 u32 match ip sport 80 0xffff flowid 1:2  #默认80的走2队列
其他的默认在队列3中

 


[root@stu86 ~]# tc qd ls dev eth0                                           #查看
qdisc prio 1: bands 3 priomap  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
qdisc tbf 10: parent 1:1 rate 20000bit burst 20Kb lat 1us
qdisc tbf 20: parent 1:2 rate 8000Kbit burst 20Kb lat 0us
qdisc tbf 30: parent 1:3 rate 2000Kbit burst 20Kb lat 0us

[root@stu86 ~]# tc class ls dev eth0                                        #查看类
class prio 1:1 parent 1: leaf 10:
class prio 1:2 parent 1: leaf 20:
class prio 1:3 parent 1: leaf 30:
class tbf 10:1 parent 10:
class tbf 20:1 parent 20:
class tbf 30:1 parent 30:

[root@stu86 ~]# tc fi ls dev eth0                                         #查看规则
filter parent 1: protocol ip pref 1000 u32
filter parent 1: protocol ip pref 1000 u32 fh 800: ht divisor 1           #过滤器编号800
filter parent 1: protocol ip pref 1000 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1
  match 00160000/ffff0000 at 20
filter parent 1: protocol ip pref 1100 u32
filter parent 1: protocol ip pref 1100 u32 fh 801: ht divisor 1
filter parent 1: protocol ip pref 1100 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:2
  match 00500000/ffff0000 at 20


实验四、在根的类上,再次添加prio作一个子根,然后往下扩展,实验接着三做的
[root@stu86 ~]# tc qd del dev eth0 parent 1:2 handle 20:0 tbf            #删除2的子类
[root@stu86 ~]# tc qd add dev eth0 parent 1:2 handle 20:0 prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 #在子类上添加一个prio,再次扩展
[root@stu86 ~]# tc cl ls dev eth0 parent 20:0
class prio 20:1 parent 20:
class prio 20:2 parent 20:
class prio 20:3 parent 20:
[root@stu86 ~]# tc qd add dev eth0 parent 20:1 handle 210: tbf limit 20k burst 20k rate 512kbit
[root@stu86 ~]# tc qd add dev eth0 parent 20:2 handle 220: tbf limit 20k burst 20k rate 1mbit
[root@stu86 ~]# tc qd add dev eth0 parent 20:3 handle 230: tbf limit 20k burst 20k rate 6500kbit
[root@stu86 ~]# tc fi add dev eth0 parent 20:0 protocol ip prio 2000 u32 match ip dst 192.168.0.2 flowid 20:1
[root@stu86 ~]# tc fi add dev eth0 parent 20:0 protocol ip prio 2000 u32 match ip dst 192.168.0.1 flowid 20:2


 HTB规则 分层令牌桶
条件
人为分类,而不是默认的3类
必须


实验五
[root@stu86 ~]# tc qd del dev eth0 root                                 #删除以前的配置
[root@stu86 ~]# tc qd add dev eth0 root handle 1:0 htb default 30       #必须首先设置默认规则的包
[root@stu86 ~]# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 10mbit burst 20k #总限速为10m,用classid
包的走向
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:10 htb rate 20kbit burst 10k prio 1000    
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit burst 10k prio 1100
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit burst 10k prio 1200
[root@stu86 ~]# tc qd add dev eth0 parent 1:10 handle 10:0 sfq                        #随机公平队列
[root@stu86 ~]# tc qd add dev eth0 parent 1:20 handle 20:0 sfq
[root@stu86 ~]# tc qd add dev eth0 parent 1:30 handle 30:0 sfq
过滤器,加在root上
[root@stu86 ~]# tc fi add dev eth0 parent 1:0 protocol ip prio 1000 u32 match ip sport 22 0xffff flowid 1:10
[root@stu86 ~]# tc fi add dev eth0 parent 1:0 protocol ip prio 1100 u32 match ip sport 80 0xffff flowid 1:20


对每个人限速脚本
#!/bin/bash

tc qd del dev eth0 root &> /dev/null

if ! tc qd add dev eth0 root handle 1:0 htb default 1300
then
        echo " tc qd add dev eth0 root handle 1:0 htb default 1300"
        exit 1
fi

if ! tc cl add dev eth0 parent 1:0 classid 1:1 htb rate 30mbit burst 4m
then
        echo "tc cl add dev eth0 parent 1:0 classid 1:1 htb rate 30mbit burst 4m"
        exit 1
fi

if ! tc cl add dev eth0 parent 1:1 classid 1:1300 htb rate 20kbit burst 20k
then
        echo "tc cl add dev eth0 parent 1:1 classid 1:1300 htb rate 20kbit burst 20k"
        exit 1
fi

if ! tc qd add dev eth0 parent 1:1300 handle 1300:0 sfq
then
        echo "tc qd add dev eth0 parent 1:1300 handle 1300:0 sfq"
        exit 1
fi

for ip in `nmap -sP 192.168.0.0/24 -n|awk '$1 ~ /^Host/{print $2}'`
do
        tmp=1${ip##*.}
        if ! tc cl add dev eth0 parent 1:1 classid 1:$tmp htb rate 1mbit burst 512k
        then
                echo "tc cl add dev eth0 parent 1:1 classid 1:$tmp htb rate 1mbit burst 512k"
                exit 1
        fi
        if ! tc qd add dev eth0 parent 1:$tmp handle $tmp:0 sfq
then
                echo "tc qd add dev eth0 parent 1:$tmp handle $tmp:0 sfq"
                exit 1
        fi

        if ! tc fi add dev eth0 parent 1:0 protocol ip prio 1000 u32 match ip dst $ip flowid 1:$tmp
        then
                echo "tc fi add dev eth0 parent 1:0 protocol ip prio 1000 u32 match ip dst $ip flowid 1:$tmp"
                exit 1
        fi
done

exit 0
                                                                                      50,1         底端


实验六、
防火墙和tc标记连用,主要是和HTB连用,利用防火墙打标记

[root@stu86 ~]# tc qd del dev eth0 root
[root@stu86 ~]# tc qd add dev eth0 root handle 1:0 htb default 30                                #定义根为默认为30这
[root@stu86 ~]# tc cl add dev eth0 parent 1:0 classid 1:1 htb rate 10mbit burst 512k             #10m总限速,峰值为最高超过512k
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:10 htb rate 20kbit burst 10k             #1:10就20kb
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit burst 10k ceil 10mbit  #80端口的为8M,空闲时最大为10mceil 10mbit
[root@stu86 ~]# tc cl add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit burst 100k ceil 10mbit #ceil 10mbit空闲时最大为10m
[root@stu86 ~]# tc qd add dev eth0 parent 1:10 handle 10: sfq                                    #公平随机队列,sfq
[root@stu86 ~]# tc qd add dev eth0 parent 1:20 handle 20: sfq
[root@stu86 ~]# tc qd add dev eth0 parent 1:30 handle 30: sfq

防火墙
[root@stu86 ULA]# iptables -t mangle -A POSTROUTING -m tos --tos 16 -j MARK --set-mark 1            #最小延时16标记为1
[root@stu86 ULA]# tc  fi add dev eth0 parent 1:0 prio 1 protocol ip handle 1 fw flowid 1:10         #所有1标记1的走1:10这个子类
[root@stu86 ULA]# iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j MARK --set-mark 2          #tcp80的标记为2
[root@stu86 ULA]# tc  fi add dev eth0 parent 1:0 prio 1 protocol ip handle 2 fw flowid 1:20         #所有标记为2的走1:20这个子类

 

高级路由:
[root@stu86 lianxi]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.179.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.122.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0


[root@stu86 lianxi]# route add default dev eth0 gw 192.168.0.254    #添加默认路由规则

多线接入,互备问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值