Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1326134
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-08-05 00:39:48

前言:
文章内容比较多,也相对比较复杂些,看的过程中希望用脑袋认真把每一个过程记在脑袋瓜上,这样可以加深对这章的了解,我本人也是反复看了多次 才有所收益。
进入正题:
队列规则 (qdisc):公平进出。
例子:好比在一条高速公路上,遵守进出的原则。
队列规则是用来管制网络流量的规则,若没有设置,是fifo 先进先出,既无管理制度
QOS队列规则有两中:如下
CBQ (Class Based Queueing) 的设定比较复杂,但可设定的东西较多,弹性较大
HTB (Hierarchy Token Bucket) 是 CBQ 的改良版 ,设定较精简,效能也比 CBQ 来的好
类别:(CLASS):
把不同的应用看成一个类别,比如玩游戏,下载,看电影。这属于不同的类别,根据情况将这些类型设定不同的优先权利
过滤器:
检查封包该属于哪个类别,并给予归类的东西,称作过滤器。
Linux QoS 过滤器有两种:u32,fw
u32: 设定比较复杂,需懂封包结构,才有办法设定
fw:fw 是靠 iptables 给封包贴标签,设定比较简单
此篇教学,以 fw 为主。
---------------------------------稍微看下----------------------------
iptables 指令:
Linux 负责防火墙功能的,是一个叫 NetFilter 的模块,而 iptables 就是用来设定 NetFilter 模块的指令。

tc 指令:
Linux 负责QoS (频宽管制) 功能的,是一个叫 Traffic Control 的模块,而 tc 就是用来设定 Traffic Control 模块的指令。

shell script:
俗称脚本文件(剧本),Linux 操作系统会依照里面的内容,逐行执行程序
类似 windows 下的 .bat 自动批次文件,但 shell script 功能比较强
-------------------------------the end------------------------------
进入TC规则:
例子假设 :对外网卡:eth1
对内网卡:eth0
内部网络有三台计算机给他们设置不同频宽,以保证顺畅。
其中设定一个default 它不属于这三台机器,是以在某中特殊情况下加电脑。一般默认给他加上去,
HTB 队列规则用的是 KByte/s (本例子中下载256KB 上传64KB)
[保证频宽]是指在任何情况下别的[类别]都无法夺取此频宽。
频宽的设置:
剩余频宽 (可借用的频宽量) = 总频宽 - 保证频宽总和

最大下载 = 保证下载 + 下载剩余频宽
最大上传 = 保证上传 + 上传剩余频宽
[最大频宽]指的是无论如何,该「类别」能使用的频宽不会超过这个数字
优先劝pfifo 数字越小权利越大,反之则小。
Linux QoS 有三要素:队列规则、类别、过滤器 分下载和上传
上传是在外部网卡,下载是在内部网卡
--------------------------------TC指令-----------------------------
tc 指令 ( /etc/rc.d/rc.local )

CODE:

#!/bin/sh
#
# Coyote local command init script

# 清除 eth1 所有队列规则
tc qdisc del dev eth1 root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev eth1 root handle 10: htb default 70

# 定义第一层的 10:1 类别 (总频宽)
tc class add dev eth1 parent 10: classid 10:1 htb rate 64kbps ceil 64kbps

# 定义第二层叶类别
# rate 保证频宽,ceil 最大频宽,prio 优先权
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 2kbps ceil 4kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 4kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 32kbps ceil 40kbps prio 3


tc class add dev eth1 parent 10:1 classid 10:40 htb rate 8kbps ceil 16kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:50 htb rate 4kbps ceil 12kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:60 htb rate 4kbps ceil 12kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:70 htb rate 4kbps ceil 12kbps prio 1


# 定义各叶类别的队列规则
# parent 类别编号,handle 叶类别队列规则编号
# 由于采用 fw 过滤器,所以此处使用 pfifo 的队列规则即可
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
tc qdisc add dev eth1 parent 10:40 handle 104: pfifo
tc qdisc add dev eth1 parent 10:50 handle 105: pfifo
tc qdisc add dev eth1 parent 10:60 handle 106: pfifo
tc qdisc add dev eth1 parent 10:70 handle 107: pfifo

# 设定过滤器
# 指定贴有 10 标签 (handle) 的封包,归类到 10:10 类别,以此类推
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 70 fw classid 10:70



# QoS eth0 下载方面
#

# 清除 eth0所有队列规则
tc qdisc del dev eth0 root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号
tc qdisc add dev eth0 root handle 10: htb default 70

# 定义第一层的 10:1 类别 (总频宽)
tc class add dev eth0 parent 10: classid 10:1 htb rate 256kbps ceil 256kbps

# 定义第二层叶类别
# rate 保证频宽,ceil 最大频宽,prio 优先权
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 2kbps ceil 32kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 2kbps ceil 32kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 32kbps ceil 212kbps prio 3

tc class add dev eth0 parent 10:1 classid 10:40 htb rate 16kbps ceil 196kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:50 htb rate 8kbps ceil 188kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:60 htb rate 8kbps ceil 188kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:70 htb rate 8kbps ceil 188kbps prio 1

# 定义各叶类别的队列规则
# parent 类别编号,handle 叶类别队列规则编号
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
tc qdisc add dev eth0 parent 10:40 handle 104: pfifo
tc qdisc add dev eth0 parent 10:50 handle 105: pfifo
tc qdisc add dev eth0 parent 10:60 handle 106: pfifo
tc qdisc add dev eth0 parent 10:70 handle 107: pfifo

# 设定过滤器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 70 fw classid 10:70
需注意(rate 后面的数字:保证频宽,ceil 后面的数字:最大频宽,单位只有:KByte/s ,不过上面要写 kbps,因为这是 HTB 的规定语法)

---------------------------iptables指令 ---------------------------

CODE:

# uploads
# 设定上传方面,先利用 iptables 给封包贴标签,再交由 fw 过滤器进行过滤

iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto dns -j mark --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto smtp -j mark --set-mark 20
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto http -j mark --set-mark 30

iptables -t mangle -A PREROUTING -s 192.168.1.1 -j mark --set-mark 40
iptables -t mangle -A PREROUTING -s 192.168.1.2 -j mark --set-mark 50
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j mark --set-mark 60

# downloads
# 下载方面

iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto dns -j mark --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto smtp -j mark --set-mark 20
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto http -j mark --set-mark 30

iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j mark --set-mark 40
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j mark --set-mark 50
iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j mark --set-mark 60
阅读(560) | 评论(0) | 转发(0) |
0

上一篇:IP数据报格式详解

下一篇:vi 替换命令

给主人留下些什么吧!~~