linux的htb队列,Linux流量控制中的HTB队列创建与过滤(2)
三、创建HTB队列
有关队列的TC命令的一般形式为:
#tc qdisc [add|change|replace|link] dev DEV [parent qdisk-id|
root][handle qdisc-id] qdisc[qdisc specific parameters]
首先,需要为网卡eth0配置一个HTB队列,使用下列命令:
#tc qdisc add dev eth0 root handle 1:htb default 11
这里,命令中的"add 表示要添加,"dev eth0 表示要操作的网卡为eth0。"root 表示为网卡eth0添加的是一个根队列。"handle 1: 表示队列的句柄为1:。"htb 表示要添加的队列为HTB队列。命令最后的"default 11 是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11。
四、为根队列创建相应的类别
有关类别的TC 命令的一般形式为:
#tc class [add|change|replace] dev DEV parent qdisc-id
[classid class-id] qdisc [qdisc specific parameters]
可以利用下面这三个命令为根队列1创建三个类别,分别是1:1 1、1:12和1:13,它们分别占用40、40和20mb[t的带宽。
#tc class add dev eth0 parent 1: classid 1:1 htb rate 40mbit ceil 40mbit
#tc class add dev eth0 parent 1: classid 1:12 htb rate 40mbit ceil 40mbit
#tc class add dev eth0 parent 1: cllassid 1:13 htb rate 20mbit ceil 20mbit
命令中,"parent 1:"表示类别的父亲为根队列1:。"classid1:11"表示创建一个标识为1:11的类别,"rate 40mbit"表示系统
将为该类别确保带宽40mbit,"ceil 40mbit",表示该类别的最高可占用带宽为40mbit。
五、为各个类别设置过滤器
有关过滤器的TC 命令的一般形式为:
#tc filter [add|change|replace] dev DEV [parent qdisc-id
|root] protocol protocol prio priority filtertype [filtertype
specific parameters] flowid flow-id
由于需要将WWW、E-mail、Telnet三种流量分配到三个类别,即上述1:11、1:12和1:13,因此,需要创建三个过滤器,如下面的三个命令:
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:11
#tc filter add dev eth0 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:12
#tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:13
这里,"protocol ip"表示该过滤器应该检查报文分组的协议字段。"pr[o 1" 表示它们对报文处理的优先级是相同的,对于不同优先级的过滤器, 系统将按照从小到大的优先级。
顺序来执行过滤器, 对于相同的优先级,系统将按照命令的先后顺序执行。这几个过滤器还用到了u32选择器(命令中u32后面的部分)来匹配不同的数据流。以第一个命令为例,判断的是dport字段,如果该字段与Oxffff进行与操作的结果是8O,则"flowid 1:11" 表示将把该数据流分配给类别1:1 1。更加详细的有关TC的用法可以参考TC 的手册页。
六、复杂的实例
在上面的例子中, 三种数据流(www、Email、Telnet)之间是互相排斥的。当某个数据流的流量没有达到配额时,其剩余的带宽并不能被其他两个数据流所借用。在这里将涉及如何使不同的数据流可以共享一定的带宽。
首先需要用到HTB的一个特性, 即对于一个类别中的所有子类别,它们将共享该父类别所拥有的带宽,同时,又可以使得各个子类别申请的各自带宽得到保证。这也就是说,当某个数据流的实际使用带宽没有达到其配额时, 其剩余的带宽可以借给其他的数据流。而在借出的过程中,如果本数据流的数据量增大,则借出的带宽部分将收回, 以保证本数据流的带宽配额。
下面考虑这样的需求, 同样是三个数据流WWW、E-mail和Telnet, 其中的Telnet独立分配20Mbit/s的带宽。另一方面,VWVW 和SMTP各自分配40Mbit/s。同时,它们又是共享的关系, 即它们可以互相借用带宽。如图3所示。
图三
需要的TC命令如下:
#tc qdisc add dev eth0 root handle 1: htb default 21
#tc class add dev eth0 partent 1: classid 1:1 htb rate
20mbit ceil 20mbit
#tc class add dev eth0 parent 1: classid 1:2 htb rate
80mbit ceil 80mbit
#tc class add dev eth0 parent 1: classid 1:21 htb rate
40mbit ceil 20mbit
#tc class add dev eth0 parent 1:2 classid 1:22 htb rate
40mbit ceil 80mbit
#tc filter add dev eth0 protocol parent 10 prio 1 u32
match ip dport 80 0xffff flowid 1:21
#tc filter add dev eth0 protocol parent 1:0 prio 1 u32
match ip dport 25 0xffff flowid 1:22
#tc filter add dev eth0 protocol parent 1:0 prio 1 u32
match ip dport 23 0xffff flowid 1:1
这里为根队列1创建两个根类别,即1:1和1:2,其中1:1对应Telnet数据流,1:2对应80Mbit的数据流。然后,在1:2中,创建两个子类别1:21和1:22,分别对应WWW和E-mail数据流。由于类别1:21和1:22是类别1:2的子类别,因此他们可以共享分配的80Mbit带宽。同时,又确保当需要时,自己的带宽至少有40Mbit。
从这个例子可以看出,利用HTB中类别和子类别的包含关系,可以构建更加复杂的多层次类别树,从而实现的更加灵活的带宽共享和独占模式,达到企业级的带宽管理目的。
【编辑推荐】
【责任编辑:张浩 TEL:(010)68476606】
linux的htb队列,Linux流量控制中的HTB队列创建与过滤(2)相关推荐
- 操作系统中的多级队列调度
多级队列调度 (Multilevel queue scheduling) Every algorithm supports a different class of process but in a ...
- 考研复习之数据结构(六)栈和队列(下)(包含队列的相关内容、栈和队列的对比以及总结)
目录 一.队列的定义 1.1 相关概念和特点 (1)基本概念 (2)队列特点 (3)案例引入 2.1 队列分类 二.队列的表示和实现 2.1 顺序队列的表示和实现 (1)结构体定义 (2)初始化操作 ...
- linux进程运行队列,Linux进程调度中队列的使用
Linux内核中大量使用了队列,这里仅列举它在进程调度中的几处应用.Linux内核中的队列是以双链表的形式连接起来的,include/linux/list.h中定义了队列并提供了一些接口,详细的介绍可 ...
- 分清概念十分重要之--Linux中的各种队列
先列个框架,后续丰富完善. 提这个问题,是因为在Linux内核学习中,遇到过一个让人啼笑皆非的问题.这个问题是啥呢?提个引子,在实际生活中,可能每个人都有过这样的经历,就是总是将某两个明明完全不同的概 ...
- Linux中的消息队列、共享内存,你确定都掌握了吗?
消息队列(message queue) 消息队列是消息的链表,存放在内存中,由内核维护 消息队列的特点 1.消息队列中的消息是有类型的. 2.消息队列中的消息是有格式的. 3.消息队列可以实现消息的随 ...
- linux流控系统,Linux流量控制(TC)之表面
1.1 流量控制是什么 流量控制是路由器上报文的接收和发送机制及排队系统的统称.这包括在一个输入接口上决定以何种速率接收何种报文,在一个输出接口上以何种速率.何种顺序输出何种报文. 传统的流量 ...
- Linux 操作系统原理 — Traffic Control 流量控制与 IP QoS 技术解析
目录 文章目录 目录 Traffic Control Traffic Control 的基本实现原理 流量处理的三个层面 流量处理的实现模型 流量队列的常见类型 FIFO 队列 PFIFO_FAST ...
- linux查看全连接队列大小,[TimLinux] TCP全连接队列满
0. TCP三次握手 syns queue: 半连接队列 accept queue: 全连接队列 控制参数存放在文件:/proc/sys/net/ipv4/tcp_abort_on_overflow中 ...
- linux htb 源代码,LINUX TC:HTB相关源码
LINUX TC:HTB相关源码 收藏 HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种.它的配置比CBQ要简单.同时实 ...
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...
最新文章
- SVM使用高斯核函数(RBF)时的超参数C和gamma如何选择
- 在Eclipse中制作SSH配置文件提示插件
- python3 使用psutil 查看内存占用
- eclipse使用tomcat进行部署时编译代码不一致的处理
- 简述一下你对mysql事物的理解_面试题:说说你对数据库事务的理解
- linux之查看文件大小和磁盘大小总结
- scala怎么做幂运算_Scala幂(幂)函数示例
- linux用户组chownd,Linux系统centos6下用户与用户组权限命令用法 chmod与chown
- 从单纯聊天到在线生活
- OpenShift 4 之Istio-Tutorial (11) 控制Egress访问
- spring-cloud Sleuth
- 高性能中级维修电工及技能培训考核实训装置
- android xml 设置半透明
- 谷歌,Google,Chrome,检查工具栏常用功能介绍
- 赠书!Python 安全攻防,终于来了!
- 蓝凌OA自定义公式样例库
- 玩转oj之1003题(地球人口承载力估计)
- 【ES8系列】String 补白、格式化
- Android 8.0 开机动画,RK3326 android10.0(Q) 开机logo+开关机动画替换
- 微信小程序精品demo:面包旅行:界面设计,文本展示,
热门文章
- AAAI2021 | 在手机上实现19FPS实时的YOLObile目标检测,准确率超高
- win7不显示语言栏
- 多商户商城系统功能拆解14讲-平台端会员等级
- background复合属性顺序_background(css复合写法)
- 初中教师资格证科学计算机面试,2019上半年教师资格证面试真题:初中信息技术...
- mysql中chr_ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)
- PS 制作 图片放大镜效果 和 鼠标点击效果
- 系统设计题面试八股文背诵版
- 四级词汇——不择手段记单词new
- 车辆ECU需要更新软件