tc(traffic server)的一点个人理解

tc (traffic control)是linux下的流控工具,功能很强,但是文档不好理解

参考:

https://segmentfault.com/a/1190000000666869

http://www.cnblogs.com/endsock/archive/2011/12/09/2281519.html

简单地说tc对出口的包根据一定规则分类,然后利用排序规则进行排序(进来的包没办法控制,所以结合iptables的时候规则一般是-d dst)

tc:

qdisc(queueing discipline)排队规则

无类:p|bfifo(基于包|字节先进先出排序)、red、sfq、tbf等

有类:CBQ、htb等

class:类,类组成树,每个类可以有自己的排队规则

filter:过滤器,用来分辨该传递给哪个类

原理什么的参考上面两个链接和它们的附属链接的内容,下面讲讲实际操作:

tc qdisc del dev eth0 root//清空原有的规则,具体可以利用tc qdisc list查看

tc qdisc add dev eth0 root handle 1: htb default 7//定义根队列规则,并指定一个handle句柄1:htb表示排队规则,default表示如果包没有明确指定属于哪个类,就默认分配给子类7

tc class  add dev eth0 parent 1: classid 1:1 htb rate 10Mbps ceil 10Mbps//创建一个主干类,parent 1:就是刚才的handle 1: 也可以写成1:0,它与1:是等价的 classid格式第一个是父类的id,第二个就是子类自己的id ,子类还可以有自己的子类,比如子类1:2想要创建自己的子类那么它可以使用tc class  add dev eth0 parent 1:1 classid 1:23 htb rate 10Mbps ceil 10Mbps, parent 1:1表明它是1:1的子类,classid中的1表示它属于我们上面创建的root handle 1: ,23是它自身的类别标识符。  rate表示保证带宽,所谓的保证带宽意思是低于设定值的带宽不予外借。  ceil表示真实带宽,意为最多能使用这么多带宽。

tc class add dev eth0 parent 1:1 classid 1:5 htb rate 512kbps ceil 512kbps prio 0//添加叶子类,prio表示优先级,数字越小优先级越高所有叶分类的全部子类优先级低于主干类,以防止重要数据堵塞,主要还是避免逻辑混乱

tc class add dev eth0 parent 1:1 classid 1:7 htb rate 2Mbps ceil 2Mbps prio 0

tc qdisc add dev eth0 parent 1:5 handle 15 sfq perturb 10//设置子类的排队规则,1:5就是子类的classid, handle跟主干类handle一样开辟一段空间给排队规则用,sfq是stochastic fairness queueing的简写,意为随机公平队列算法,它会按照会话为流量进行排序,然后循环发送每个会话的数据包,perturb 10 表示多少秒后重新配置一次散列算法,这是因为sfq并不是真正意义上的随机公平算法,所以必须经常改变算法来保证公平性

tc qdisc add dev eth0 parent 1:7 handle 17 sfq perturb 10

tc filter add dev eth0 parent 1: protocol  ip prio 8 handle 10 fw classid 1:5//设置过滤器,对应之前的父类和子类,protocol ip 表示根据ip进行分类,fw是firewall的简写表示ip是从firewall那边来的,也有u32 match ip等写法,具体看文档。这条命令的大意是:从防火墙匹配到的某些ip归属到1:5这个类。 tc控制流量走向大概是这样(我个人的理解,不权威):数据包先经过filter过滤,过滤需要临时空间,handle大概就是指定一片临时空间并生成一个唯一标识号的意思,这段空间处理带有这个标识的数据,然后filter处理过滤这段空间的数据后交给子类排队规则,排序也需要空间,所以也有自己的handle,然后各个子类在汇集交给主干类排序,主干类最后再交给网卡发送。

tc filter add dev eth0 parent 1: protocol  ip prio 9 handle 11 fw classid 1:7

iptables  -t  mangle -A POSTROUTING -d 192.168.2.106  -j MARK --set-mark 10//tc和iptables的结合是根据mangle表的mark标志来的,mark标识为filter的handle,表示数据交给这个fliter处理

iptables  -t  mangle -A POSTROUTING -m set --match-set  passip dst -j MARK --set-mark 10//这个是ipset+tc+iptables,ipset是iptables里面很有用的一个模块,能大大提高效率,ipset必须事先建立才能用。命令:ipset create passip hash:net maxelem 10000

时间: 2024-08-05 12:56:51

tc(traffic server)的一点个人理解的相关文章

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

近日的工作多多少少和Linux的流控有点关系,自打几年前知道有TC这么一个玩意儿并且多多少少理解了它的原理之后,我就没有再动过它,因为我不喜欢TC命令行,实在是太繁琐了,iptables命令行也比较繁琐,但是比TC命令行直观,而TC命令行则太过于技术化.也许是我对TC框架没有对Netfilter框架理解深刻吧,也许是的.iptables/Netfilter对应的就是tc/TC.       Linux内核内置了一个Traffic Control框架,可以实现流量限速,流量整形,策略应用(丢弃,N

traffic server文件目录

功能: Trafficserver的主要功能是缓存,当然你也可以用它来做纯粹的反向代理(像通常用nginx那样).通常切入一个庞大的系统的最好方式是看如何使用,使用traffic server的主要入口有两个:配置文件和插件.所有使用者都需要配置文件,高级使用者则需要插件. traffic支持大规模的集群处理,不同于nginx的单点(需要ospf均衡链路来做冗余),所有的配置文件可以做到改动一个通知全部.程序根据功能划分为不同的几个子程序,有服务运行时使用的程序,也有管理使用的.详细见下文. [

SQL Server执行计划的理解

原文:SQL Server执行计划的理解 要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. 名词解析: 扫描:逐行遍历数据. 先建立一张表,并给大家看看大概是什么样子的. CREATE TABLE Person( Id int IDENTITY(1,1) NOT NULL, Name nvarchar(50) NULL, Age int NULL

AngularJS』一点小小的理解

『AngularJS』一点小小的理解 AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与开发框架不断的提出与发展,而就目前来说,除了游戏.IM(类似QQ).Office这类软件之外,新出的软件应用开始出现两个方向,一个是以Web为主的Web APP,一个是以移动端为主的移动APP.且,现有也有一种声音认为Web APP早晚会取代移动端原生APP,从而一统计算机软件的应用方式.暂且不论这种说

Apache Traffic Server 5.3.1发布

本文来源于我在InfoQ中文站翻译的文章,原文地址是:www.infoq.com/cn/news/2015/07/traffic-server-5.3.1-release 近日,Apache软件基金会发布了Traffic Server 5.3.1版,该版本主要修复了之前版本的一些Bug,同时兼容于所有的5.x版本. Apache Traffic Server是个快速.可伸缩.可扩展.兼容于HTTP/1.1的缓存代理服务器.Traffic Server之前是个商业产品,由Yahoo捐献给Apach

安装ATS(apache traffic server)正向代理

一 traffic server简介 Traffic Server是一种高性能Web代理缓存,可通过在网络边缘缓存频繁访问的信息来提高网络效率和性能.这使内容在物理上更接近最终用户,同时实现更快的交付和更少的带宽使用.Traffic Server旨在通过最大化现有和可用带宽来改善企业,Internet服务提供商(ISP),骨干提供商和大型Intranet的内容交付. 实现功能 作为Web代理缓存 作为Web代理缓存,Traffic Server会在这些请求前往目标Web服务器(源服务器)时接收用

Layui的一点小理解(上)

首先声明这是个人的一点理解,如有不对之处请指正,以下的例子有在官网上看到的,有的是自己写的.还是老规矩最后会附上官网的,如有不明白之处,请查看文档或留言. 既然说Layui,当然要简单的介绍以下什么是layui啊!下面是官方的解释: Layui 是一款采用自身模块规范编写的国产前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到API的每一处细节都经过精心雕琢,非常适合界面的快速开发.layui还很年轻

nodejs 从helloworld到高质量的后台服务server的一点思考

---恢复内容开始--- 新公司用的nodejs作为app和网站的后台服务server,所以最近对nodejs一直在学习,加上之前简单的学习了一点,看了两天后台接口源码,所以就直接上手干活了,下面是我和写后台接口的哥哥的一段对话: 后台:过两天的后台管理你写的话,用express写还是不用? 我  :看了两天后台源码,我觉得用express更省力一些,因为要牵涉到一些界面操作,用express创建项目应用模板和其他一些工具更方便,但是从工作分配上来说的话,用自己写的server代码结构更清晰,前

Java学习:动态代理的一点小理解

手动实现 之前的一篇讲IoC的博文提到了代理模式,事实上代理模式就是AOP实现的重要基石.但是上面的代码有一个显而易见的缺陷,也就是之前讲解反射内容时提到的:不具备动态性. 上面代码中的Server就像是反射理解博文中提到的工厂订单管理员一样,每增加一样菜系,就需要相应更新手上的菜单.类比反射特性,我们完全可以做到让服务员不需要手上拿着菜单来为顾客服务: // 服务员实现类 public class ServerImpl implements Server { // 采用组合的方式引入noodl