brctl addbr br0
brctl addif br0 eth1
ifconfig br0 192.168.119.7
ifconfig eth0 10.10.106.230
echo 1 > /proc/sys/net/ipv4/ip_forward 
在实际的项目中,由于需要控制下载和上传的带宽,为特定的用户提供可靠的带宽保证。
上传时使用的是WAN口即用来连接外网的,在我们的设备上面有wifi和LAN接口,分别提供内部的俩种上网方式。
因此在设备上面创建虚拟设备br0,

brctl addbr br0
brctl addif br0 eth1
brctl addif br0 ath0
ifconfig br0 192.168.119.7
ifconfig eth0 10.10.106.230
echo 1 > /proc/sys/net/ipv4/ip_forward

br0上面设置如下命令:
tc qdisc del dev br0 root
tc qdisc add dev br0 root handle 302:0 htb default 43
tc class add dev br0 parent 302:0 classid 302:1 htb rate 4096Kbit ceil 4096Kbit
tc class add dev br0 parent 302:1 classid 302:42 htb rate 512Kbit ceil 4096Kbit prio 0
tc filter add dev br0 parent 302:0 prio 42 u32 match u32 0xaabb 0x0000ffff at -16 match u32 0xccdd0106 0xffffffff at -12 flowid 302:42
tc qdisc add dev br0 parent 302:42 handle 42: sfq perturb 10
tc class add dev br0 parent 302:1 classid 302:43 htb rate 512Kbit ceil 4096Kbit prio 100
tc qdisc add dev br0 parent 302:43 handle 43: sfq perturb 10

eth0上面设置如下命令:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 301:0 htb default 42
tc class add dev eth0 parent 301:0 classid 301:1 htb rate 512Kbit ceil 512Kbit
tc class  add dev eth0 parent 301:1 classid 301:9 htb rate 100Kbit ceil 512Kbit prio 0
tc filter add dev eth0 parent 301:0 protocol ip prio 3 u32 match ip src 192.168.119.6 flowid 301:9
tc qdisc  add dev eth0 parent 301:9 handle 9: sfq perturb 1
tc class add dev eth0 parent 301:1 classid 301:42 htb rate 100Kbit ceil 512Kbit prio 4
tc qdisc add dev eth0 parent 301:42 handle 42: sfq perturb 10
tc -s class show dev eth0

查看设置相关的命令如下:
tc -s class show dev eth0
tc qdisc ls dev eth0
tc class ls dev eth0
tc -s -d filter show dev eth0
#简单显示指定设备的队列状况 
tc qdisc ls dev eth0

#详细显示指定设备的队列状况 
tc –s qdisc ls dev eth0

#简单显示指定设备的分类状况 
tc class ls dev eth0

#详细显示指定设备的分类状况 
tc –s class ls dev eth0

#显示过滤器的状况 
tc –s filter ls dev eth0 
tc -s -d filter show dev eth0

使用TC命令流量控制的时候,创建的qdisc,class,filter的基本顺序如下:
其基本使用步骤为:  
1) 针对网络物理设备(如以太网卡eth0)绑定一个CBQ队列 
2) 在该队列上建立分类 
3) 为每一分类建立一个基于路由的过滤器 
4) 最后与过滤器相配合,建立特定的路由表

#将一个cbq队列绑定到网络物理设备eth0上,其编号为1:0;网络物理设备eth0的实际带宽为10Mbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。 
/sbin/tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64

#创建根分类1:1;分配带宽为10Mbit,优先级别为1。该队列的最大可用带宽为10Mbit,实际分配的带宽为10Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为1Mbit。 
/sbin/tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit maxburst 20 allot 1514 prio 1 avpkt 1000 cell 8 weight 1Mbit

#创建分类1:2,其父分类为1:1,分配带宽为64Kbit,优先级别为8。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。 
/sbin/tc class add dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 100Kbit bounded

#创建分类1:3,其父分类为1:1,分配带宽为64Kbit,优先级别为9。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为9,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。 
/sbin/tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 9 avpkt 1000 cell 8 weight 100Kbit bounded

#在分类底下,创建队列,使用sfq随即公平队列 
/sbin/tc qdisc add dev eth0 parent 1:2 sfq quantum 1514b perturb 15 
/sbin/tc qdisc add dev eth0 parent 1:3 sfq quantum 1514b perturb 15 
#限制各ip地址的下载带宽,使用u32过滤器,对目的地址进行分类,对应已经创建的队列 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.116 flowid 1:2 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.66 flowid 
*******************************类似的TC命令如下*********************************************
ebtables -t broute -D BROUTING -i eth0 -j mark --mark-set 301 --mark-target CONTINUE
ebtables -t broute -D BROUTING -i eth0 -s aa:bb:cc:dd:01:06 -j mark --mark-set 991 --mark-target CONTINUE
ebtables -t broute -F
ebtables -t broute -A BROUTING -i eth0 -j mark --mark-set 301 --mark-target CONTINUE
ebtables -t broute -A BROUTING -i eth0 -s aa:bb:cc:dd:01:06 -j mark --mark-set 991 --mark-target CONTINUE
上面是通过ebtables对特定的数据包mark上标签。
tc qdisc del dev br0 root
tc qdisc add dev br0 root handle 302:0 htb default 43
tc class add dev br0 parent 302:0 classid 302:1 htb rate 4096Kbit ceil 4096Kbit
tc class add dev br0 parent 302:1 classid 302:42 htb rate 2048Kbit ceil 4096Kbit prio 0
tc filter add dev br0 parent 302:0 prio 42 u32 match u32 0xaabb 0x0000ffff at -16 match u32 0xccdd0106 0xffffffff at -12 flowid 302:42
tc qdisc add dev br0 parent 302:42 handle 42: sfq perturb 10
tc class add dev br0 parent 302:1 classid 302:43 htb rate 2048Kbit ceil 4096Kbit prio 100
tc qdisc add dev br0 parent 302:43 handle 43: sfq perturb 10
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 301:0 htb default 42
tc class add dev eth0 parent 301:0 classid 301:1 htb rate 512Kbit ceil 512Kbi

tc class add dev eth0 parent 301:1 classid 301:9 htb rate 100Kbit ceil 400Kbit prio 0
tc filter add dev eth0 parent 301:1 prio 9 handle 991 fw flowid 301:9
tc qdisc add dev eth0 parent 301:9 handle 9: sfq perturb 10

tc class add dev eth0 parent 301:1 classid 301:42 htb rate 200Kbit ceil 512Kbit prio 0
tc qdisc add dev eth0 parent 301:42 handle 42: sfq perturb 10
----------------------------------------------------------------------------
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 301:0 htb default 42
tc class add dev eth1 parent 301:0  classid 301:1 htb rate 8Mbit ceil 8Mbit 
tc class  add dev eth1 parent 301:1 classid 301:43 htb rate 3Mbit ceil 8Mbit prio 0 burst 30k
tc class  add dev eth1 parent 301:1 classid 301:9  htb rate 4Mbit ceil 8Mbit prio 4 burst 30k
tc filter add dev eth1 parent 301:0 protocol ip prio 3 u32 match ip dst 192.168.119.111 flowid 301:9
tc filter add dev eth1 parent 301:0 protocol ip prio 3 u32 match ip dst 192.168.119.12 flowid 301:43

tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 301:0 htb default 42
tc class add dev eth0 parent 301:0  classid 301:1 htb rate 8Mbit ceil 8Mbit 
tc class  add dev eth0 parent 301:1 classid 301:43 htb rate 3Mbit ceil 8Mbit prio 0 burst 30k
tc class  add dev eth0 parent 301:1 classid 301:9  htb rate 4Mbit ceil 8Mbit prio 4 burst 30k
tc filter add dev eth0 parent 301:0 protocol ip prio 3 u32 match ip src 192.168.119.111 flowid 301:9
tc filter a
################################类似的TC命令如下############################################

#set the env vlaue
DOWNLINK_Mbit=4
let DOWNLINK=$DOWNLINK_Mbit*1024  
UPLINK=512

#UP MIN
UP_WCDMA_MIN=160
UP_WLAN_MIN=20
UP_LAN_MIN=20

#DOWN MIN
DOWN_WCDMA_MIN=350
DOWN_WLAN_MIN=100
DOWN_LAN_MIN=200

#UP MAX
UP_WCDMA_MAX=$UPLINK
UP_WLAN_MAX=$UPLINK
UP_LAN_MAX=$UPLINK

#DOWN MAX
DOWN_WCDMA_MAX=$DOWNLINK
DOWN_WLAN_MAX=$DOWNLINK
DOWN_LAN_MAX=$DOWNLINK

#priority
PRIO_WCDMA=1
PRIO_WLAN=2
PRIO_LAN=2
                                      
#uplink interface #PPP0
DEV_UP=eth0

#download interface
DEV_DOWN=eth1

#mpc8313 $DEV_UP IP:
IP0=192.168.1.1
#PHONE IP
IP_WCDMA=192.168.1.2
#WLAN IP
IP_WLAN=192.168.1.3
#LAN IP
IP_LAN=192.168.1.4

#clean existing down and up qdisc

echo "cleaning the old qdisc rule ......."
iptables -t mangle -F
tc qdisc del dev $DEV_UP root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_DOWN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_DOWN ingress 2> /dev/null > /dev/null
echo "start setting the Qos......."

#setting the uplink
tc qdisc add dev $DEV_UP root handle 1:0 htb default 30 r2q 20
tc class add dev $DEV_UP parent 1:0 classid 1:1 htb rate ${UPLINK}Kbit 
tc class add dev $DEV_UP parent 1:1 classid 1:10 htb rate ${UP_WCDMA_MIN}Kbit ceil ${UP_WCDMA_MAX}Kbit prio $PRIO_WCDMA burst 15k quantum 20000
tc class add dev $DEV_UP parent 1:1 classid 1:20 htb rate ${UP_WLAN_MIN}Kbit ceil ${UP_WLAN_MAX}Kbit prio $PRIO_WLAN  burst 15k quantum 20000
tc class add dev $DEV_UP parent 1:1 classid 1:30 htb rate ${UP_LAN_MIN}Kbit ceil ${UP_LAN_MAX}Kbit prio $PRIO_LAN  burst 15k quantum 20000

tc qdisc add dev $DEV_UP parent 1:10 handle 10: sfq perturb 5
tc qdisc add dev $DEV_UP parent 1:20 handle 20: sfq perturb 5
tc qdisc add dev $DEV_UP parent 1:30 handle 30: sfq perturb 5

#set the uplink route filter 
iptables -t mangle -A POSTROUTING -o $DEV_UP -s  $IP_WCDMA -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -o $DEV_UP -s  $IP_WLAN -j MARK --set-mark 2
iptables -t mangle -A POSTROUTING -o $DEV_UP -s  $IP_LAN -j MARK --set-mark 3
tc filter add dev $DEV_UP  parent 1:0 protocol ip prio 10 handle 1 fw classid 1:10
tc filter add dev $DEV_UP  parent 1:0 protocol ip prio 10 handle 2 fw classid 1:20
tc filter add dev $DEV_UP  parent 1:0 protocol ip prio 10 handle 3 fw classid 1:30

#set the downlink
tc qdisc add dev $DEV_DOWN root handle 2: htb default 30
tc class add dev $DEV_DOWN parent 2: classid 2:1 htb rate ${DOWNLINK}Kbit  
tc class add dev $DEV_DOWN parent 2:1 classid 2:10 htb rate ${DOWN_WCDMA_MIN}Kbit ceil ${DOWN_WCDMA_MAX}Kbit prio $PRIO_WCDMA  burst 30k
tc class add dev $DEV_DOWN parent 2:1 classid 2:20 htb rate  ${DOWN_WLAN_MIN}Kbit ceil ${DOWN_WLAN_MAX}Kbit prio $PRIO_WLAN   quantum 20000 burst 30k
tc class add dev $DEV_DOWN parent 2:1 classid 2:30 htb rate  ${DOWN_LAN_MIN}Kbit ceil ${DOWN_LAN_MAX}Kbit prio $PRIO_LAN  quantum 20000 burst 30k
tc qdisc add dev $DEV_DOWN parent 2:10 handle 10: sfq perturb 5
tc qdisc add dev $DEV_DOWN parent 2:20 handle 20: sfq perturb 5
tc qdisc add dev $DEV_DOWN parent 2:30 handle 30: sfq perturb 5

#set the downlink route filter

tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_WCDMA flowid 2:10
tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_WLAN flowid 2:20
tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_LAN flowid 2:30

sleep 1s
echo "Finish!The QOS has started!"

linux TC命令使用总结相关推荐

  1. linux tc命令进行网络限速、丢包、延迟设置(简单使用)

    linux自带tc命令 版本不是很低的linux系统都自带tc 如果你的系统不带这个命令,建议使用类似括号中的命令进行安装 (yum -y install iproute) TC 中使用下列的缩写表示 ...

  2. 【测试】linux tc命令|Linux模拟网络延迟、丢包等|traffic control(流量控制)

    目录 一.工具介绍 1.netem 2.tc 二.命令使用说明 1.模拟延迟传输 2.模拟网络丢包: 3.模拟包重复: 4.模拟数据包损坏: 5.模拟数据包乱序: 6.删除模拟配置: 更多高级用法 一 ...

  3. Linux 下 TC 命令原理及详解<一>

    文章目录 1 前言 2 相关概念 3 使用TC 4 创建HTB队列 5 为根队列创建相应的类别 6 为各个类别设置过滤器 7 复杂的实例 Linux 下 TC 命令原理及详解<一> Lin ...

  4. Linux 下 TC 命令原理及详解

    众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的.然而多年的实践表明,这种原则并不是最 ...

  5. tc命令——Linux基于IP进行流量限速

    主要参考(所有权利归原文作者所有): *http://www.cnblogs.com/endsock/archive/2011/12/09/2281519.html *http://blog.163. ...

  6. linux系统下通过tc命令实现对端口的限速,实用脚本

    使用方法,创建.sh脚本文件,将以下内容复制到脚本文件中保存退出即可. #!/bin/sh#通过tc命令实现对端口的限速#获取网卡名称 function ips(){local nics=$(rout ...

  7. linux tc打造ip流量限制

    tc是个配置Linux内核流量控制的工具 名字 tc - 显示/维护流量控制配置 摘要 tc qdisc dev DEV qdisc tc class dev DEV parent qdisc-id ...

  8. Linux TC(Traffic Control)框架原理解析

    近日的工作多多少少和Linux的流控有点关系.自打几年前知道有TC这么一个玩意儿而且多多少少理解了它的原理之后,我就没有再动过它,由于我不喜欢TC命令行,实在是太繁琐了.iptables命令行也比較繁 ...

  9. linux htb 源代码,LINUX TC:HTB相关源码

    LINUX TC:HTB相关源码 收藏 HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种.它的配置比CBQ要简单.同时实 ...

最新文章

  1. 外界对程序员的误解究竟有多深?
  2. 普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点...
  3. oracle, to_char(), to_number, ORA_01722
  4. C# winform打印总结 z
  5. 装完B就跑,这几个Linux指令真的Diǎo
  6. 百度更新算法之后我想说
  7. java类似sizeof_如何用Java编写类似C的Sizeof函数
  8. java安全权限_java.security.SecurityPermission
  9. SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...
  10. JOptionPane弹框常用实例
  11. 入门机器学习(六)--课后作业解析-logistics回归(python实现)
  12. 萌新的Python练习实例100例(七)将一个列表的数据复制到另一个列表中
  13. 正态分布、指数分布的特征函数及期望与方差 - 随机过程
  14. mysql数据库连接池锁_数据库连接池deadlock
  15. 计算机开机发出长滴,在电脑开机时滴的一声,怎么去掉
  16. 【电子水尺】高精度测量、免布线、远程传输数据
  17. android 远程调试工具,【教程】搭配Android studio,如何实现app远程真机debug...
  18. 计算机专业基础综合哪个最难,10个考研最难的专业!你的专业排第几?
  19. 详解Axes()中的markersize
  20. 深度|从一个故事说起,谈谈企业应用架构的演变史

热门文章

  1. 纯前端实现—网页钟表设计
  2. spring boot rest例子
  3. DBG、DMB、DSB 和 ISB
  4. 搜索引擎Bing必应高级搜索语法
  5. 国家数据字典mysql_数据字典 · MySQL DBA · 看云
  6. 国庆拥堵现象说明了什么?
  7. RocketMQ延迟消息的代码实战及原理分析
  8. css 变量_如何将CSS变量用于动画
  9. 外网访问群晖NAS VMM搭建Openwrt的admin界面
  10. 【七】【vlc-android】vlc的decoder控制层传输数据与ffmpeg音频解码模块decoder层进行解码的数据交互流程源码分析