首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 高级流控-3

Linux 高级流控-3

四 . Linux 流量控制 --- 实例解析 以下实例由实际工作环境要求编写而得:
1. PRIO 分类优先算法 ( 从左至右优先发包 )网卡工作示例图:清单 7. PRIO 分类优先算法示例 ( 从左至右优先发包 )
1
2
3
4
5
6
7
8
9
10
11
12
#tc ad add dev eth0 root handle 1: prio hands 3 priomap 1---1 16 个 1(tos 比特 ) 表示所有数据包
   注 : 此命令自动在 1: 下创建三子类 1:1 1:2 1:3 此例中只用到 1:1
#tc qd add dev eth0 parent 1:1 handle 11:sfq
#tc qdisc add dev eth0 parent 1:1 handle 12: tbf rate 20kbit
buffer 1600 limit 3000
#tc qd add dev eth0 parent 1:1 handle 13:sfq
#tc filter add dev eth0 parent 1:1 prio 1003 protocol ip
     u32 match ip src 192.168.1.0/24 flowid 1:13
#tc filter add dev eth0 parent 1:1 prio 1001 protocol ip
      u32 match ip src 10.0.0.0/8 flowid 1:12
#tc filter add dev eth0 parent 1:1 protocol ip prio 1001
  u32 match ip tos 0x10 0xff flowid 1:11  交互和最小延迟的数据流




2. HTB 分层令牌桶网卡工作示例图:清单 8. HTB 分层令牌桶示例
1
2
3
4
5
6
7
8
9
10
11
#tc qd del dev eth1 root
#tc qdisc add dev eth1 root handle 1: htb default 12
#tc class add dev eth1 parent 1: classid 1:1 htb rate 2Mbit burst 1500000 在 1: 下定义子类 1:1
#tc class add dev eth1 parent 1:1 classid 1:11 htb rate 512kbit burst 150000 ceil 1Mbit
#tc qd add dev eth1 parent 1:11 handle 111: sfq
#tc class add dev eth1 parent 1:1 classid 1:12 htb rate 1Mbit burst 150000 ceil 1Mbit
#tc qd add dev eth1 parent 1:12 handle 122: sfq 注 : 亦可不在 1:12 class 下定义 122: qd
#tc class add dev eth1 parent 1:1 classid 1:13 htb rate 2Mbit burst 150000 ceil 2Mbit
#tc qd add dev eth1 parent 1:13 handle 133: sfq
#tc filter add dev eth1 parent 1: prio 10001 protocol ip
     u32 match ip src 192.168.1.0/24 flowid 1:12  其它二类亦如此 ..




3. ADSL 上网流量限控脚本 ADSL 带宽是下行 3200Kbit, 上行只有 320Kbit
网卡工作示例图:清单 9. 上网流量限控脚本示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
tc qdisc add dev eth0 root handle 1: htb default 24
tc class add dev eth0 parent 1: classid 1:1 htb rate 300kbit ceil 300kbit prio 0
tc class add dev eth0 parent 1: classid 1:2 htb rate 150kbit prio 3
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 300kbit ceil 300kbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 150kbit ceil 250kbit prio 2  
tc class add dev eth0 parent 1:2 classid 1:21 htb rate 100kbit ceil 150kbit prio 4
tc class add dev eth0 parent 1:2 classid 1:22 htb rate 30kbit ceil 140kbit prio 5
tc class add dev eth0 parent 1:2 classid 1:23 htb rate 15kbit ceil 130kbit prio 6
tc class add dev eth0 parent 1:2 classid 1:24 htb rate 5kbit ceil 50kbit prio 7
tc qdisc add dev eth0 parent 1:11 handle 111: sfq perturb 5
tc qdisc add dev eth0 parent 1:12 handle 112: sfq perturb 5
tc qdisc add dev eth0 parent 1:21 handle 121: sfq perturb 10
tc qdisc add dev eth0 parent 1:22 handle 122: sfq perturb 10
tc qdisc add dev eth0 parent 1:23 handle 133: sfq perturb 10
tc qdisc add dev eth0 parent 1:24 handle 124: sfq perturb 10
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21
tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22
tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23
tc filter add dev eth0 parent 1:0 protocol ip prio 6 handle 6 fw classid 1:24




1:11 最高优先级的数据包通道优先通过 , 主要为一些 ACK SYN 确认包 .. 必要时全部占用 .. 全速
1:12 是很重要的数据道 , 给多点 , 最少给一半 , 但需要时可以再多一点 .
rate 规划 1:2 = 1:21 + 1:22 + 1:23 + 1:24 一般总数在 50%-80% 左右
1:21 http,pop 最常用 , 人数较多 , 易导致堵塞 , 不能给得太多 , 但不益太少 .
1:22 smtp 通道 , 优先低于 1:21 以防发大的附件大量占用带宽
1:23 ftp-data 数据通道可能大量上传文件 ,rate 不能给得太多 ,ceil 设置大些 ( 其它通道剩余带宽应用 )
1:24 无所谓通道 , 就是一般不是平时工作上需要的通道了 , 给小点 , 防止这些人在妨碍有正常工作需要的人
其次的工作即在 iptables 端对相应数据包打上标记 ...
4. Linux+NAT+TC 脚本是 Linux NAT 网关实例 , 根据此脚本思路 , 可进一步细致的进行针对于数据包的限制 ..
清单 10. Linux Nat 网关实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT
  --to-source 124.42.97.36
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT
--to-source 124.42.97.36
iptables -I PREROUTING -t mangle -p tcp -s 192.168.0.0/24 -j MARK
  --set-mark 1
iptables -I PREROUTING -t mangle -p tcp -s 192.168.1.0/24 -j MARK
--set-mark 2
   注 : 可分数据包类型标记
tc qdisc del dev eth0 root
   # 加一个根队列 , 速率用网卡的速率 10Mbit,也可用上传的速率
tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000
   # 加一个根类
tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit
                  rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst
                  8 avpkt 1000 bounded
   # 加一个子类用于内网 1 速率限制为 300Kbit
tc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbit
                  rate 300Kbit allot 1513 weight 30Kbit prio 5 maxburst
                  8 avpkt 1000 bounded
   # 加一个子类用于内网 2 速率限制为 320Kbit
tc class add dev eth0 parent 100:1 classid 100:3 cbq bandwidth 10Mbit
                  rate 320Kbit allot 1513 weight 32Kbit prio 6 maxburst
                  8 avpkt 1000 bounded
   # 设置队列规则
tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth0 parent 100:3 sfq quantum 1514b perturb 15
   # 将队列和 fw 过滤器映射起来 其中 hand 1 的 1 是开始用 iptables 做的标记 hand 2 的 2 也是开始用
iptables 做的标记
tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle
1 fw classid 100:2
tc filter add dev eth0 parent 100:0 protocol ip prio 2 handle
2 fw classid 100:3
流量监测相关命令 :
    tc -s qdisc/class ls dev eth0
    tc -s qdisc/class ls dev eth1




5. Linux 网关 / 服务器限速 ---HTB清单 11. Linux 网关 / 服务器 HTB 限速
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  #!/bin/sh
  PWD=/home/huaying/net
  TC=/sbin/tc
  $TC class ls dev eth0
  $TC qdisc del dev eth0 root
  $TC qdisc add dev eth0 root handle 1: htb r2q 1
  U32="$TC filter add dev eth0 parent 1: protocol ip prio 16 u32"
  while read line
  do
   ip=`echo $line | awk '{print $1}'`
   limit=`echo $line | awk '{print $2}'`
   $TC class add dev eth0 parent 1: classid 1ip htb rate
   "$limit"kbit burst 1k
   $U32  match ip dst 192.168.1.$ip/32 flowid 1ip
  done < $PWD/ip_limit
    注 :ip_limit 分行记录 , 第一列为 ip, 第二列为限制的带宽 , 二列以 tables 分开 ..   
服务器限速
  #!/bin/sh
  /sbin/tc qdisc del dev eth0 root
  /sbin/tc qdisc add dev eth0 root handle 1:0 htb r2q 1
  /sbin/tc class add dev eth0 parent 1:0 classid 1:1 htb rate
  75mbit burst 10k
  /sbin/tc filter add dev eth0 parent 1: protocol ip prio 16
   u32  match ip dst 0.0.0.0/0 flowid 1:1
  /sbin/tc class ls dev eth0
    最大限制服务器 eth0 流量在 75Mbit/s

返回列表