tc使用的例子

无分类qdisc使用例子

需求针对eth1网卡出口带宽限制为100Mbit

这个就可以用无分类qdisc来做

tc–s qdisc ls dev eth1

tc qdisc add dev eth1 root tbf  rate200kbit latency 50ms burst 1540

带宽限制为200kbit,延迟为50ms,缓冲区为1540个字节

多用于很简单的规则限制

主要说一下有分类的qidsc例子

一.假如我想针本机eth1出口流量,对目标ip为10.1.1.1做流量的限制

1.tc–s qdisc ls dev eth1

2.tcqdisc del dev eth1 root

3.tcqdisc add dev eth1 root handle 1: htb

4.tcclass add dev eth1 parent 1:0 classid 1:1 htb rate 1000Mbit ceil 1000Mbit

5.tcclass add dev eth1 parent 1:1 classid 1:10 htb rate 500Mbit ceil 5Mbit

5.tcfilter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 10.1.1.1/32  flowid 1:10

说到ceil,就要说到令牌的概念了,tc里面个人理解令牌就是如果定义的带宽不够用了,比如上面的规则,如果到达目标ip为10.1.1.1的本机eth1出口流量已经超过500Mbit,因为是htb规则它会去向父类为1:1去借带宽,这个借的带宽就叫做令牌,ceil是限制如果超过带宽限制,只允许向父类去借5Mbit的带宽

测试

在10.1.1.1上面执行

Iperf–s

在本机执行

Iperf–c 10.1.1.1结果

[  3] local 10.13.144.228 port 22988 connectedwith 10.13.144.229 port 5001

[ ID]Interval       Transfer     Bandwidth

[  3] 0.0-10.3 sec  6.65 MBytes  5.40 Mbits/sec

最大带宽为5Mbit

二.比如说我想针对本机的80端口和22端口进行出口流量限制,其中80端口限制为500Mbit,22端口限制为400Mbit

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0
tc filter add deveth1 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:2
tc filter add deveth1 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:3
iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK--set-mark 5
iptables -A OUTPUT-t mangle -p tcp --sport 22 -j MARK --set-mark 6

这上面涉及到了标记的概念,tc可以喝ipatbles和cgroup联合使用

也就是说iptables给由本机产生的端口80和22打了个标记分别为5和6

在tc的filter中应用到iptables的标记数,这就是iptables+tc的联合使用

三.比如说我想针对本机的多个进程对出口流量进行限制

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0

tc filter add dev eth1 parent 1:0 prio 1 protocol ip handle1:2 cgroup

从上面我们可以看到filter里面调用class的时候写的是handle,而不是之前的flowid,在filter里,有几种分为u32,和iptables合用的规则,和cgroup合用的规则,这3种的语法是不一样的,如果用cgroup标签,把handle改成flowid就会报错

mount -t cgroup net_cls -o net_cls /cgroup/net_cls/

vim  /cgroup/net_cls/tasks,把进程号加到这个文件里

四.如果要限制那条具体的命令

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0

tc filter add dev eth1 parent 1:0 prio 1 protocol ip handle1:2 cgroup

mount -t cgroup net_cls -o net_cls /cgroup/net_cls/

cgexec -gnet_cls:group 命令

时间: 2024-08-11 07:41:39

tc使用的例子的相关文章

Linux 上的TC 流量控制几个例子

不少中小企业服务器接入带宽往往只有10Mbps 通常服务器也运行了其它服务,比如DNS服务,当网站访问量较大并且有多人同时下载时,带宽很容易耗尽,导致服务器延迟增加或丢包.如何对80端口进行速度限制,而保障其它服务能正常运行? 你可以使用tc 命令,对服务器上指定的端口和服务器进行调整限制. 令牌桶 (TB) 令牌桶是一个常见的算法,用于控制进入到网络的数据量,允许将发送数据突发.它是用于网络流量控制或速率限制.随着令牌桶中,您可以定义一个接口上允许的最大速率在给定时间的交通.         

iproute2和tc的一些用法

#Linux advanced router ip link show #显示链路 ip addr show #显示地址(或ifconfig) ip route show #显示路由(route -n) ip neigh show #显示arp表(ping 192.168.95.50,如果主机在同一局域网内,直接加到arp表) ip neigh delete 192.168.95.50 dev eth0 #删除arp条目,条目仍然存在状态为stale,下次通信需要确认 ip rule show

linux下TC+HTB流量控制

C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是"控发"不控收 linux下有两块网卡,一个eth1是外网,另一块eth0是内网.在eth0上做HTB.(注 意:filter划分标志位可用u32打标功能或iptables的set-mark功能,如果用iptables来打标记的话,下行速LV在eth0处 控制,但打标应在进入eth0之前进行,所以,"-i et

【转】java格式化输出 printf 例子

[转]java格式化输出 printf 例子 转自http://www.cnblogs.com/TankMa/archive/2011/08/20/2146913.html#undefined import java.util.Date; /** * 使用printf输出 */ /**关键技术点 * 使用java.io.PrintStream的printf方法实现C风格的输出 * printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象 */ public clas

Linux流量控制TC中的HTB队列创建与过滤

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有Linux流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的.然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾, 比如,远程登录的交互数据流应该比数据下载有更高的优先级. 针对不同的数据流采取不同的策略,这种可能性是存在的.并且,随着研究的发展和深入, 人们已经提出了各种不同的管理模式.IETF已经发布了几个标准, 如综合服务(Integrated Services

完成这个例子,说出java中针对异常的处理机制。

有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常.在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息.完成这个例子,请说出java中针对异常的处理机制. [java] view plaincopy package com.itheima; import java.io.IOException; /** *第6题:有一个类为ClassA,有一个类为ClassB,

数据包的分类和调度-Linux TC的另一种解释

如果从分层递归的角度理解Linux的TC框架,很容易将队列分为有类队列和无类队列,这个角度上看,有类队列和无类队列的地位是平等的.但实际上,它们 之间是有层次关系的.之所以将其分为有类队列和无类队列,完全是实现意义上的,你可以看到,Linux对于TC框架的实现非常紧凑,正是基于这种递归的 "排队规则,类别,过滤器"三元组来进行的.但是抛开实现,我们需要用一种更加合理的方式来彻底理解数据包调度. 1.数据包调度 数 据包调度是一个层次,隔离了网卡驱动的收发模块和协议栈.也就是说,数据包从

linux tc流量控制 学习

楼主最近学习了一下tc,感觉真的不好理解,一下是个人的理解,有不正确的地方请高手指点 在介绍tc的逻辑前,我要强调tc的逻辑流程图,你要把它想象成树形结构 何为树形结构,章节下面我会具体说明 顶层qdisc分为两种类型: 无分类qdisc和有分类qdisc 什么叫做无分类qdisc:没有class,在qdisc上做限制 什么叫做有分类qdisc:qdisc---class---filter 结构 一.qdisc又有2种算法的分类 其中针对带宽的算法,分为3种 1.CBQ:(1)限制带宽    

Linux TC(Traffic Control)简介

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的.然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾,比如,远程登录的交互数据流应该比数据下载有更高的优先级. 针对不同的数据流采取不同的策略,这种可能性是存在的.并且,随着研究的发展和深入,人们已经提出了各种不同的管理模式.IETF已经发布了几个标准,如综合服务(Integrated Services).区分服务