linux TC命令使用总结
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命令使用总结相关推荐
- linux tc命令进行网络限速、丢包、延迟设置(简单使用)
linux自带tc命令 版本不是很低的linux系统都自带tc 如果你的系统不带这个命令,建议使用类似括号中的命令进行安装 (yum -y install iproute) TC 中使用下列的缩写表示 ...
- 【测试】linux tc命令|Linux模拟网络延迟、丢包等|traffic control(流量控制)
目录 一.工具介绍 1.netem 2.tc 二.命令使用说明 1.模拟延迟传输 2.模拟网络丢包: 3.模拟包重复: 4.模拟数据包损坏: 5.模拟数据包乱序: 6.删除模拟配置: 更多高级用法 一 ...
- Linux 下 TC 命令原理及详解<一>
文章目录 1 前言 2 相关概念 3 使用TC 4 创建HTB队列 5 为根队列创建相应的类别 6 为各个类别设置过滤器 7 复杂的实例 Linux 下 TC 命令原理及详解<一> Lin ...
- Linux 下 TC 命令原理及详解
众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的.然而多年的实践表明,这种原则并不是最 ...
- tc命令——Linux基于IP进行流量限速
主要参考(所有权利归原文作者所有): *http://www.cnblogs.com/endsock/archive/2011/12/09/2281519.html *http://blog.163. ...
- linux系统下通过tc命令实现对端口的限速,实用脚本
使用方法,创建.sh脚本文件,将以下内容复制到脚本文件中保存退出即可. #!/bin/sh#通过tc命令实现对端口的限速#获取网卡名称 function ips(){local nics=$(rout ...
- linux tc打造ip流量限制
tc是个配置Linux内核流量控制的工具 名字 tc - 显示/维护流量控制配置 摘要 tc qdisc dev DEV qdisc tc class dev DEV parent qdisc-id ...
- Linux TC(Traffic Control)框架原理解析
近日的工作多多少少和Linux的流控有点关系.自打几年前知道有TC这么一个玩意儿而且多多少少理解了它的原理之后,我就没有再动过它,由于我不喜欢TC命令行,实在是太繁琐了.iptables命令行也比較繁 ...
- linux htb 源代码,LINUX TC:HTB相关源码
LINUX TC:HTB相关源码 收藏 HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种.它的配置比CBQ要简单.同时实 ...
最新文章
- 外界对程序员的误解究竟有多深?
- 普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点...
- oracle, to_char(), to_number, ORA_01722
- C# winform打印总结 z
- 装完B就跑,这几个Linux指令真的Diǎo
- 百度更新算法之后我想说
- java类似sizeof_如何用Java编写类似C的Sizeof函数
- java安全权限_java.security.SecurityPermission
- SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...
- JOptionPane弹框常用实例
- 入门机器学习(六)--课后作业解析-logistics回归(python实现)
- 萌新的Python练习实例100例(七)将一个列表的数据复制到另一个列表中
- 正态分布、指数分布的特征函数及期望与方差 - 随机过程
- mysql数据库连接池锁_数据库连接池deadlock
- 计算机开机发出长滴,在电脑开机时滴的一声,怎么去掉
- 【电子水尺】高精度测量、免布线、远程传输数据
- android 远程调试工具,【教程】搭配Android studio,如何实现app远程真机debug...
- 计算机专业基础综合哪个最难,10个考研最难的专业!你的专业排第几?
- 详解Axes()中的markersize
- 深度|从一个故事说起,谈谈企业应用架构的演变史