如下图测试拓扑,将两个FTP客户端的总下载流量控制在10Mbps,并且,当同时下载时,将50.2的带宽控制在8Mbps,50.3的带宽控制在2Mbps。带宽空闲时,允许借用。

     192.168.50.2|------------||            | |   FTP-1    |------||            |      |        |------------|        |------------||------------|      |    eth0|            |eth1    |            ||--------|   Qdisc    |--------| FTP-Server ||------------|      |        |            |        |            ||            |      |        |------------|        |------------||   FTP-2    |------||            ||------------|    192.168.50.3

如下TC配置命令,r2q的值按照MTU=1500,rate=2M计算而来(即quantum=rate/r2q),其中quantum的值不小于MTU。使用filter显式指定192.168.50.2对应的class为1:10。对于FTP客户端192.168.50.3,其对应到默认的class(default 20)。

tc qdisc add dev eth0 root handle 1: htb default 20 r2q 1330tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 8mbps ceil 10mbps burst 15k
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 2mbps ceil 10mbps burst 15ktc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.50.2 flowid 1:10

查询配置如下,可见速率rate转换成了按照比特位表示的值,quantum的值等于rate/r2q,对于2M速率,quantum等于1503,大于MTU值:

/ # tc -d qdisc ls dev eth0
qdisc htb 1: root refcnt 9 r2q 1330 default 20 direct_packets_stat 0 ver 3.17 direct_qlen 1000
/ #
/ # tc -d class ls dev eth0
class htb 1:10 parent 1:1 prio 0 quantum 6015 rate 64Mbit ceil 80Mbit linklayer ethernet burst 15Kb/1 mpu 0b cburst 1600b/1 mpu 0b level 0
class htb 1:1 root rate 80Mbit ceil 80Mbit linklayer ethernet burst 15Kb/1 mpu 0b cburst 1600b/1 mpu 0b level 7
class htb 1:20 parent 1:1 prio 0 quantum 1503 rate 16Mbit ceil 80Mbit linklayer ethernet burst 15Kb/1 mpu 0b cburst 1600b/1 mpu 0b level 0
/ #
/ #
/ # tc -d filter ls dev eth0
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 match c0a83202/ffffffff at 16
/ #

关于quantum的值,内核代码如下。对于最底层的class(level等于0),quantum的值需要大于等于1000,小于等于200000。

static int htb_change_class(struct Qdisc *sch, u32 classid,u32 parentid, struct nlattr **tca,unsigned long *arg, struct netlink_ext_ack *extack)
{/* it used to be a nasty bug here, we have to check that node* is really leaf before changing cl->leaf !*/if (!cl->level) {u64 quantum = cl->rate.rate_bytes_ps;do_div(quantum, q->rate2quantum);cl->quantum = min_t(u64, quantum, INT_MAX);if (!hopt->quantum && cl->quantum < 1000) {warn = -1;cl->quantum = 1000;}if (!hopt->quantum && cl->quantum > 200000) {warn = 1;cl->quantum = 200000;}if (hopt->quantum)cl->quantum = hopt->quantum;if ((cl->prio = hopt->prio) >= TC_HTB_NUMPRIO)cl->prio = TC_HTB_NUMPRIO - 1;}if (warn)pr_warn("HTB: quantum of class %X is %s. Consider r2q change.\n",cl->common.classid, (warn == -1 ? "small" : "big"));

测试完成,删除以上的带宽配置:

tc qdisc del dev eth0 root

内核版本 5.10

TC流量控制HTB示例相关推荐

  1. Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例)

    1. 背景 Linux 操作系统中的流量控制器 TC (Traffic Control) 用于Linux内核的流量控制,它规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控 ...

  2. linux下tc、htb、iptables基础知识及openwrt 下qos使用介绍

    htb基础知识:Linux Htb队列规定指南中文版:http://wenku.baidu.com/view/64da046825c52cc58bd6beac.html TC基础知识: Linux 的 ...

  3. Linux TC流量控制HOWTO中文版

    <本文摘自Linux的高级路由和流量控制HOWTO中文版 第9章节>网人郭工进行再次编译: 利用队列,我们可以控制数据发送的方式.记住我们只能对发送数据进行控制(或称为整形). 其实,我们 ...

  4. 使用TC的htb队列控制网络流量

    起因,放在公司内的部分服务器对外提供服务,而且是很重要的服务,但由于公司员工上网也要占据很大的流量,往往导致服务器抢不到带宽,严重影响服务器的对外服务,于是考虑限制公司员工上网的带宽,确保服务器对外提 ...

  5. 简单tc流量控制使用

    2019独角兽企业重金招聘Python工程师标准>>> 显示规则 /sbin/tc -s qdisc show 删除根规则 /sbin/tc qdisc del dev eth0 r ...

  6. linux tc流量控制(一):classless qdisc

    什么是tc tc全称为traffic control,是iproute2包中控制内核中流量的工具.在内核的网络协议栈中,专门有这样一个处理网络流量的地方(在XDP之后,netfilter之前),tc就 ...

  7. linux下TC+HTB流量控制

    C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是"控发"不控 ...

  8. linux流控系统,Linux流量控制(TC)之表面

    1.1 流量控制是什么 ​ 流量控制是路由器上报文的接收和发送机制及排队系统的统称.这包括在一个输入接口上决定以何种速率接收何种报文,在一个输出接口上以何种速率.何种顺序输出何种报文. ​ 传统的流量 ...

  9. Mininet 上启用 DCTCP 和 ECN 进行拥塞控制、使用 HTB 和 RED 队列进行流量控制

    关于 TC 流量控制工具详解可看这篇博客 开启 DCTCP,使用 ECN 进行拥塞控制,需要主机和交换机的配合. 主机要开启 ECN 功能,能处理 ECN 信号:交换机要能在拥塞队列过长时进行 ECN ...

  10. 利用TC进行流量控制

    服务器: eth0 绑定了外部地址 eth0:192.168.1.223 eth1 绑定了内部地址 eth1: 192.168.2.1 现在要实现的功能就是: 整个出口限制在512kbit(上传流量) ...

最新文章

  1. CSS中绝对定位依据谁进行定位?
  2. ASP 三十二条精华代码
  3. 2.函数(代码的整洁之道)
  4. [刷题记录] luogu网络流24题 及 网络流心得体会 及 经典模型不定期更新
  5. 985高校校长:未来5年教职工要压缩千人,淘汰20-30%
  6. SQL NOTE--VIEW
  7. 有需要【JavaScript权威指南第七版、JavaScript高级程序设计第四版】的可以私信我哈
  8. 基于安卓的宠物店预约商城APP源码
  9. VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除
  10. python实现ip地址查询
  11. 快递柜智能柜C语言程序,家用智能快递柜的设计与实现(含电路图)
  12. 18种最实用的网站推广方法大全
  13. python必考题_干货|Python经典面试考题(下)
  14. 〖Python〗-- 面向对象编程、继承、组合、接口和抽象类
  15. 元件之AT24CXX
  16. 解决数据库高并发的常见方案
  17. android ViewPager轮播制作成品——轮播制作(六)
  18. 【SIMULINK】simulink实现信号矩阵整合、求逆、转置、分解、向量矩阵相乘(非matlab)
  19. PHP Composers 手动配置第三方扩展
  20. xlsx.js 实现前端 table 数据导出并下载为 excel

热门文章

  1. 叶片静频测量方法理论基础(自振法上)
  2. excel柱状图自定x轴y轴_《excel柱状图自定x轴y轴》 如何更改EXCEL 图表中X轴的名称...
  3. Pycharm Traceback (most recent call last):
  4. 卡麦基梅隆大学计算机排名,卡内基梅隆大学,美国国内排名第25位
  5. 使用 {}.format 对字符串进行格式(一)
  6. WINDOWS 7、windows server 2008、VISTA激活排斥
  7. 排序系列(代码c++版)
  8. 天工杂志天工杂志社天工编辑部2022年第25期目录
  9. (待填坑)【数据结构】笛卡尔树
  10. Matlab中的plotyy用法总结