使用 linux 下的 TC 流量控制测试

转载 2017年01月03日 18:05:23

需要对网关做流量控制,针对IP和网段做控制,也有结合iptables实现方式,可能也有针对内外网的服务器,规则明白了,都很容易。
可以查看这篇参考文章http://www.zhirs.com/tc-for-use-under-linux-server-traffic-control.html,讲的很详细,下面是我改写的shell脚本,非iptables方式:


  1. #!/bin/bash
  2. # Set the following values to somewhat less than your actual download
  3. and uplink speed. In kilobits. Also set the device that is to be shaped.
  4. #INGOING traffic (gateway)
  5. IN=eth0
  6. #what ip do you want to limit
  7. INET="192.168.138."
  8. IPS="100"
  9. IPE="254"
  10. #Total DOWNLINK
  11. DOWN="100mbit"
  12. #ensure rate speed of DOWNLINK
  13. DOWNLOADrate="100kbit"
  14. #Allow max rate speed of DOWNLINK
  15. DOWNLOADceil="250kbit"
  16. start(){
  17.     #clean eth1 eth0 existing down- and uplink qdiscs, hide errors
  18.     /sbin/tc qdisc del dev $IN root 2>/dev/null
  19.     # install root htb of downlink and uplink
  20.     # main class
  21.     /sbin/tc qdisc add dev $IN root handle 1: htb
  22.     /sbin/tc class add dev $IN parent 1: classid 1:1 htb rate $DOWN ceil $DOWN
  23.     #simgle ip limit
  24.     /sbin/tc class add dev $IN parent 1:1 classid 1:2 htb rate $DOWNLOADrate ceil $DOWNLOADrate
  25.     /sbin/tc qdisc add dev $IN parent 1:2 sfq perturb 2
  26.     /sbin/tc filter add dev $IN protocol ip parent 1: prio 49 u32 match ip dst 192.168.138.10 flowid 1:2
  27.     /sbin/tc filter add dev $IN protocol ip parent 1: prio 49 u32 match ip dst 192.168.2.0/32 flowid 1:2
  28.     #net1 limit
  29.     for (( i=$IPS; i<=$IPE; i=i+))
  30.     do 
  31.         #####Control DOWNLINK
  32.         /sbin/tc class add dev $IN parent 1:1 classid 1:1$i htb rate $DOWNLOADrate ceil $DOWNLOADceil
  33.         /sbin/tc qdisc add dev $IN parent 1:1$i sfq perturb 1$i
  34.         /sbin/tc filter add dev $IN protocol ip parent 1: prio 50 u32 match ip dst $INET$i flowid 1:1$i
  35.     done
  36.     #net2 limit
  37.     #for (( i=$IPS; i<=$IPE; i=i+))
  38.     #do
  39.     # #####Control DOWNLINK
  40.     # /sbin/tc class add dev $IN parent 1:1 classid 1:2$i htb rate $DOWNLOADrate ceil $DOWNLOADceil
  41.     # /sbin/tc qdisc add dev $IN parent 1:2$i sfq perturb 2$i
  42.     # /sbin/tc filter add dev $IN protocol ip parent 1: prio 50 u32 match ip dst $INET$i flowid 1:2$i
  43.     #done
  44.     #Other traffic
  45.     /sbin/tc filter add dev $IN protocol ip parent 1: prio 2 u32 match ip dst 0.0.0.0/32 flowid 1:1
  46. }
  47. stop(){
  48.     echo -"(Delete all qdisc......)"
  49.     (/sbin/tc qdisc del dev $IN root 2>/dev/null && echo "ok.Delete sucessfully!") || echo "error."
  50. }
  51. #show status
  52. status() {
  53.     echo "1.show qdisc $IN:----------------------------------------------"
  54.     /sbin/tc -s qdisc show dev $IN
  55.     echo "2.show class $IN:----------------------------------------------"
  56.     N1=`/sbin/tc class show dev $IN | wc -l`
  57.     if [ $N1 == 0 ];then
  58.         echo "NULL, OFF Limiting "
  59.     else
  60.         /sbin/tc -class show dev $IN
  61.         echo "It work"
  62.     fi
  63. }
  64. #show help
  65. usage() {
  66.     echo "(usage): `basename $0` [start | stop | restart | status ]"
  67.     echo "help:"
  68.     echo "start -- TC Flow Control start"
  69.     echo "stop -- TC Flow Control stop"
  70.     echo "restart -- TC Flow Control restart"
  71.     echo "status -- TC Show all TC Qdisc and class"
  72. }
  73. case "$1" in
  74.     start)
  75.         ( start && echo "Flow Control! TC started!" ) || echo "error."
  76.         exit 0
  77.         ;;

  78.     stop)
  79.         ( stop && echo "Flow Control TC stopped!" ) || echo "error."
  80.         exit 0
  81.         ;;
  82.     restart)
  83.         stop
  84.         start
  85.         echo "Flow Control restart"
  86.         ;;
  87.     status)
  88.         status
  89.         ;;

  90.     *) usage
  91.         exit 1
  92.         ;;
  93. esac

测试:
开启流量控制TC:

  1. ./tc_last.sh start
有限制的IP:192.168.138.131

  1. # ifconfig eth0
  2. eth0 Link encap:Ethernet HWaddr 00:0C:29:DA:56:1C 
  3.           inet addr:192.168.138.131 Bcast:192.168.138.255 Mask:255.255.255.0
  4.           UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5.           RX packets:1811422 errors:0 dropped:0 overruns:0 frame:0
  6.           TX packets:1083449 errors:0 dropped:0 overruns:0 carrier:0
  7.           collisions:0 txqueuelen:1000 
  8.           RX bytes:943250761 (899.5 MiB) TX bytes:87045802 (83.0 MiB)

  9. # wget http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
  10. --2013-08-08 17:44:01-- http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
  11. Resolving ftp13.enet.com.cn... 122.224.6.16
  12. Connecting to ftp13.enet.com.cn|122.224.6.16|:88... connected.
  13. HTTP request sent, awaiting response... 200 OK
  14. Length: 180175741 (172M) [application/octet-stream]
  15. Saving to: `uvs9_trial_e_rtm.rar.17

无限制IP:192.168.138.99


  1. # ifconfig eth0
  2. eth0 Link encap:Ethernet HWaddr 00:0C:29:88:EC:85 
  3.           inet addr:192.168.138.99 Bcast:192.168.138.255 Mask:255.255.255.0
  4.           UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5.           RX packets:88578 errors:0 dropped:0 overruns:0 frame:0
  6.           TX packets:43771 errors:0 dropped:0 overruns:0 carrier:0
  7.           collisions:0 txqueuelen:1000 
  8.           RX bytes:19401052 (18.5 MiB) TX bytes:6876868 (6.5 MiB)

  9. # wget http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
  10. --2013-07-16 22:57:10-- http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
  11. Resolving ftp13.enet.com.cn... 122.224.6.16
  12. Connecting to ftp13.enet.com.cn|122.224.6.16|:88... connected.
  13. HTTP request sent, awaiting response... 200 OK
  14. Length: 180175741 (172M) [application/octet-stream]
  15. Saving to: `uvs9_trial_e_rtm.rar.2

效果还是很显著的,就是和设置的流量范围有偏差,有待继续研究!


TC(Linux下流量控制工具)详细说明及应用

TC的安装 TC是Linux自带的模块,一般情况下不需要另行安装,可以用 man tc 查看tc 相关命令细节,tc 要求内核 2.4.18 以上 ##注意:64位机器上,先执行下面命令 ...
  • u011641885
  • u011641885
  • 2015年05月11日 09:09
  • 4031

linux下使用 TC 对服务器进行流量控制

原文地址:http://blog.chinaunix.net/uid-25885064-id-3353088.html tc 介绍       在linux中,tc 有二种控制方法...
  • zahuopuboss
  • zahuopuboss
  • 2014年02月28日 13:58
  • 1037

流量控制工具TC详细说明

原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式, 从而实现对流量...
  • wuzhimang
  • wuzhimang
  • 2017年01月17日 10:49
  • 1119

Linux流量控制工具TC

tc是用来提供流量控制的强大工具,自己在进行DDoS攻击模拟、网络负载测试中一直使用!本文是简单的使用介绍, 流量控制工具TC详细说明有详细的介绍 概要 简介 netem是linux内核版本提供的一...
  • wuzhimang
  • wuzhimang
  • 2017年01月17日 10:47
  • 768

使用 linux 下的 TC 流量控制测试

需要对网关做流量控制,针对IP和网段做控制,也有结合iptables实现方式,可能也有针对内外网的服务器,规则明白了,都很容易。 可以查看这篇参考文章http://www.zhirs.com/tc-...
  • kalman2008
  • kalman2008
  • 2014年04月25日 20:22
  • 668

tc - 输入方向的流量控制

tc - 输入方向的流量控制
  • ztguang
  • ztguang
  • 2017年07月12日 16:54
  • 399

Linux tc 流量控制概念与术语(一)-DiffServ

inux tc 命令行中包含许多概念和术语,在这里作整理与解释。 tc主要使用的是DiffServ服务。所以先要理解QoS中的DiffServ。 DiffServ 相关概念与术语 (引自 6)...
  • eydwyz
  • eydwyz
  • 2016年11月26日 16:20
  • 230

linux tc实现ip流量限制

tc是个配置Linux内核流量控制的工具 名字 tc - 显示/维护流量控制配置 摘要 tc qdisc [ add | change | replace | link ] dev ...
  • wind0513
  • wind0513
  • 2010年03月02日 15:32
  • 5093

qos实现之tc流量控制

TC介绍 在 linux 中,TC 有二种控制方法 CBQ 和 HTB.HTB 是设计用来替换 CBQ 的。它是一个层次式的过滤框架. TC包括三个基本的构成块: 队列规定 q...
  • chengtong222
  • chengtong222
  • 2017年03月20日 12:57
  • 658

CentOS-TC(流量控制)-单IP上传(下载)限制

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ready.blog.51cto.com/507803/965408 初次接...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年01月22日 10:34
  • 2491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 linux 下的 TC 流量控制测试
举报原因:
原因补充:

(最多只允许输入30个字)