一、实验拓扑与实验现象

实验拓扑如图所示,在①号机上发送数据,③号机上接受数据,同时在④号机的eth1与eth2网口限制速率为115200kbps,命令如下

tc qdisc add dev eth1 root tbf rate 115200bps buffer  limit
tc qdisc add dev eth2 root tbf rate 115200bps buffer limit

图1 实验拓扑

然后在④号机上使用ifstat查看网口状态,得到结果如下:

我们可以看到eth1的入口速率为144KB/s左右,而eth2的出口速率为112KB/s左右,那么还有32KB/s的速率哪里去了呢?

二、令牌桶在端口限速的原理

首先让我们了解下令牌桶限速的原理,如限速原理图如下(此图引自博文:令牌桶算法的应用 )

图2 使用令牌桶做端口限速的原理图

  图2展示是了linux系统中宽带管理的实现,需由端口发送的报文通过分类器分类以后,进入队列,这个队列的大小由上面tc tbf命令中的limit设定,若令牌桶中有这个报文大小的令牌,则将此报文发送出去,否则在缓存队列中等待,等待有足够多的令牌后在发送,若在这个过程中缓存队列溢出,则将导致部分报文被丢弃,这里值得注意的是发送报文是以包为单位发送的,但是令牌桶的实现是以字节为单位,而不是针对包进行的。

  每个到来的令牌从数据队列中收集一个数据包,然后从桶中被删除。这个算法关联到两个流上——令牌流和数据流,于是我们得到3种情景:

  1、数据流以等于令牌流的速率到达TBF。这种情况下,每个到来的数据包都能无延迟地通过队列。

  2、 数据流以小于令牌流的速度到达TBF。通过队列的数据包只消耗了一部分令牌,剩下的令牌会在桶里积累下来,直到桶被装满。剩下的    令牌可以在需要以高于令牌流速率发送数据流的时候消耗掉,这种情况下会发生突发传输。
  3、数据流以大于令牌流的速率到达TBF。这意味着桶里的令牌很快就会被耗尽。导致TBF中断一段时间,称为“越限”。如果数据包持续到    来,将发生丢包。

  

  最后一种情景非常重要,因为它可以用来对数据通过过滤器的速率进行整形。
  可见,令牌的积累可以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致传输延迟直至丢包。

博客迁到个人博客网站:http://btdog.com.cn/index.php/home/article/detail/id/3.html

tc令牌桶限速心得的更多相关文章

  1. CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看这里!—-揭秘令牌桶

    概述 春暖花开的时候,大家都开着汽车外出旅游欣赏美丽的风景,却被堵在高速公路上,你是否为此感到痛苦?但如果有一种机制可以评估高速公路上的车流量.控制车流情况,确保进入高速公路的汽车都能在路上安全畅行, ...

  2. 令牌桶在数据通信QoS流量监管中的应用

    令牌桶(Tocken Bucket,以下简称TB)在流量监管(以下简称CAR)功能中完成对流量进行限速的作用.流量监管主要是应用与网络边缘,从而保证核心设备的正常数据处理. 在流量监管的处理过程中,首 ...

  3. QoS令牌桶工作原理

    QoS的一个重要作用就是对port流量进行监管,也就是限制port流量.但QoS是怎样做到这点的呢?那就是QoS的令牌桶机制了.以下是在笔者刚刚出版的<Cisco/H3C交换机高级配置与管理技术 ...

  4. 15行python代码,帮你理解令牌桶算法

    本文转载自: http://www.tuicool.com/articles/aEBNRnU   在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法 ...

  5. CIR,CBS,EBS,PIR,PBS 名词解释 令牌桶应用

    为了达到上述目的,我们需要对进入网络的流量进行监督,实现CAR(Committed Access Rate). CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞. CIR( ...

  6. flask结合令牌桶算法实现上传和下载速度限制

    限流.限速: 1.针对flask的单个路由进行限流,主要场景是上传文件和下载文件的场景 2.针对整个应用进行限流,方法:利用nginx网关做限流 本文针对第一中情况,利用令牌桶算法实现: 这个方法:h ...

  7. 二.Go微服务--令牌桶

    1. 令牌桶 1.1 原理 我们以 r/s 的速度向桶内放置令牌,桶的容量为 b , 如果桶满了令牌将会丢弃 当请求到达时,我们向桶内获取令牌,如果令牌足够,我们就通过转发请求 如果桶内的令牌数量不够 ...

  8. 三.Go微服务--令牌桶实现原理

    1. 前言 在上一篇文章 Go微服务: 令牌桶 当中简单的介绍了令牌桶实现的原理,然后利用 /x/time/rate 这个库 10 行代码写了一个基于 ip 的 gin 限流中间件,那这个功能是怎么实 ...

  9. 基于令牌桶算法实现的SpringBoot分布式无锁限流插件

    本文档不会是最新的,最新的请看Github! 1.简介 基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot.SpringCloud应用,支持接口限流.方法限流.系统限 ...

随机推荐

  1. 3Sum Smaller 解答

    Question Given an array of n integers nums and a target, find the number of index triplets i, j, k w ...

  2. Hdu4742-Pinball Game 3D(cdq分治+树状数组)

    Problem Description RD is a smart boy and excel in pinball game. However, playing common 2D pinball ...

  3. 重载operator new实现检测内存泄漏是否可行

    行与不行,就凭我这水平,说出来未免显示太过自大.不还,我还想根据自己的代码来讨论这个问题. 重载operator new来检测内存只的办法,那就是在new的时候记录指针地址及文件名.行号,在delet ...

  4. PC--CSS优化

    优化你的CSS 所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误: 1.不要在ID选择器前使用标签名一般写法:DIV#divB ...

  5. [Cycle.js] From toy DOM Driver to real DOM Driver

    This lessons shows how we are able to easily swap our toy DOM Driver with the actual Cycle.js DOM Dr ...

  6. Boost线程库学习笔记

    一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...

  7. 前端编辑神器Brackets

    介绍 Brackets 是Adobe发布的一款免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境.使用Node.js构建!官网:http://brackets.i ...

  8. EffectiveC#00--选择定义和实现接口,而不是继承

    1.继承就是说它是某物(is a的关系),针对相关类,而接口是说它有某个功能(behaves like.)可以是不相关的 基类是描述对象是什么,接口描述对象有某种行为. 2.不能在接口里提供任何成员的 ...

  9. sql service重置自动增长字段数字的方法

    1.--SQL表重置自增长字段(不删除表的数据) DBCC CHECKIDENT('表名', RESEED, 起始数) 2.--删除表数据的同时,重置自动增长字段 truncate table 表名

  10. ASP.NET开发学习视频教程大全(共800集)

    ASP.NET是微软.NET平台的支柱之一,被广泛应用在WEB等互联网开发领域,因此它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上.这里整理了最全的ASP.NET开发学习视频 ...