精华内容
下载资源
问答
  • 流量策略及令牌桶的工作原理,缓解DOS攻击的方法很多,比如说用ACL,URPF等技术都可以实现,但本专题仅专注于用traffic-police(流量策略)技术实现。
  • QoS令牌桶工作原理

    2015-03-19 19:55:00
    QoS一个重要作用就是对port流量进行监管,也就是限制port流量。但QoS是怎样做到这点呢?那就是QoS的令牌桶机制了。以下是在笔者刚刚出版...http://book.360buy.com/10959197.html6.3.3 QoS令牌桶工作原理 ...

            QoS的一个重要作用就是对port流量进行监管,也就是限制port流量。但QoS是怎样做到这点的呢?那就是QoS的令牌桶机制了。以下是在笔者刚刚出版的Cisco/H3C交换机高级配置与管理技术手冊》一书中,经过笔者充分理解后的全面诠释,大家看一下能否够理解。http://book.360buy.com/10959197.html

      6.3.3 QoS令牌桶工作原理

            QoS中的流量监管(Traffic Policing)就是对流量进行控制,通过监督进入网络port的流量速率,对超出部分的流量进行“惩处”(这个惩处能够是丢弃、也但是延迟发送),使进入port的流量被限制在一个合理的范围之内。比如能够限制HTTP报文不能占用超过50%的网络带宽,否则QoS流量监管功能能够选择丢弃报文,或又一次配置报文的优先级。

           QoS流量监管功能是採用令牌桶(Token-Bucket)机制进行的。这里的“令牌桶”是指网络设备的内部存储池,而“令牌”则是指以给定速率填充令牌桶的虚拟信息包。能够这么简单理解,“令牌桶”能够理解为一个水桶,而“令牌”则能够理解为通过一根水管流到水桶中的水。

           交换机在接收每一个帧时都将加入一个令牌到令牌桶中,但这个令牌桶底部有一个孔,不断地按你指定作为平均通信速率(单位为b/s)的速度领出令牌(也就是从桶中删除令牌的意思)。相当于一个水桶的上边连接一根进水的水管,而下边又连接一根连接到用水的地方的出水管。在每次向令牌桶中加入新的令牌包时,交换机都会检查令牌桶中是否有足够容量(也就是在要向桶水加水前,先要检查是桶内否已满了),假设没有足够的空间,包将被标记为不符规定的包,这时在包上将发生指定监管器中规定的行为(丢弃或标记),就相当于假设当前水桶满了,但上边水管的水还是来了,这时要么就是让这些水白白流到桶外,要么把这些水用其他容器先装起来,等水桶中不再满水时再倒进去,供用户使用。整个令牌桶的基本工作原理能够用图6-10来表示。


    图6-10 令牌桶的基本工作作原理

            令牌桶填满的时间长短是由令牌桶深度(也就是容量,单位为bit,相似于水桶的的深度)、令牌漏出速率(相似桶下边接的水管的水速)和超过平均速率的突发通信流(相似于上桶上边水管突发的急速水流)持续的时间三个方面共同决定的。 令牌桶的大小利用突发时长上限乘以点对点传输时的帧数限制得出(也就相似突发水流持续的时间*突发水流的流速)。假设突发时间比較短,令牌桶不会溢出,在通信流上不会发生行为。但是,假设突发时间比較长,而且速率比較高,令牌桶将溢出,这时将对突发过程中的帧採取相应的流监管策略行为(也就是在水桶满水后对溢出的水的处理方法)。

            在令牌桶处理包的行为方面,RFC中定义了两种令牌桶算法——单速率三色标记(single rate threecolor marker,srTCM)算法和双速率三色标记(two rate threecolor marker,trTCM)算法,其评估结果都是为包打上红、黄、绿三色标记(所以称为“三色标记”,有关这些颜色的详细含义将在详细算法中介绍)。QoS会依据包的颜色,设置包的丢弃优先级,当中单速率三色标记比較关心包尺寸的突发,而双速率三色标记则关注速率上的突发,两种算法都可工作于色盲模式和非色盲模式(详细在以下介绍)。以下分别介绍这两种算法原理。

      1. 单速率三色标记算法原理

             这里首先要理解“单速率”是什么意思,那就是算法中的两个令牌桶有同样的承诺信息速率(CIR),也就是具有同样平均訪问速率。这两个令牌桶各自是正常使用的令牌桶(也就是以下将要说到的C桶)和超出令牌桶容量的突发令牌桶(也就是以下将要说到的E桶),能够理解为两个水桶,一个是正常使用的水桶,还有一个是用来当正常使用的水桶满后装多余的水的水桶。以下详细解释单速率三色标记算法原理。

             单速率三色标记(srTCM)算法关注的是数据包的突发尺寸,数据包的色标记评估依据以下3个參数:承诺信息速率(CommittedInformation Rate,CIR)、承诺突发尺寸(Committed BurstSize,CBS)和超额突发尺寸(Excess Burst Size,EBS)。CIR是指向令牌桶中填充令牌的平均速率,即同意的通信流平均速度;CBS是指每次突发所同意的最大的流量尺寸,也相当于同意的最大取令牌的速率,等于桶的容量(最大时就是一个包就能够所有领取桶中的所有令牌)。EBS是指每次突发同意超出CBS的最大流量尺寸。CBS和EBS的单位都是bit(位)。

           单速率三色机制採用双桶结构:C桶和E桶(之所以用这两个字母来表示,为的就是与前面说的CBS和EBS两种速率的头个字母一致,便于描写叙述),且两个令牌桶的CIR一样。C令牌桶中不论什么未用的令牌都被放入E令牌桶中,用做以后暂时超过CIR的突发流量的令牌;另外,当C令牌桶满时,超出的令牌也都会放在E令牌桶中。

          Tc和Te分别表示C令牌桶和E令牌桶中的令牌数,也就是桶中当前的容量(单位也为bit),两桶的总容量分别为CBS和EBS,也就是相应前面介绍的承诺突发尺寸和超额突发尺寸,最初它们都是满的,即Tc和Te初始值各自等于CBS和EBS。正常情况下,不会使用第二个令牌桶(也就是E桶),而是把不论什么CBS(也就是C桶)中未使用的令牌都放入E桶中,仅仅有当C令牌桶满后,后面来的令牌才放到E令牌桶中,为可能出现的突发数据提供信用令牌(也就是经过同意的令牌)。

           在这样的单速率三色标记算法中,两个令牌桶中令牌的加入是依照同样的CIR速率进行的。即每隔1/CIR时间加入一个令牌。加入的顺序是先加入C桶再加入E桶,当两个令牌桶中的令牌都满时,再产生的令牌就会被丢弃。至于在发送数据包时,令牌的使用IEEE又定义了三种颜色(分别为红色、黄色和绿色)以及两种模式:色盲(color-blind)模式和感色(color-aware)模式,默觉得色盲模式。三种颜色的功能与我们日常生活中的交通指示灯中的三种颜色相似,红色表示违规数据,直接丢弃,黄色表示数据包尽管违法,但不直接丢弃,而是延迟发送,绿争为合法数据包,直接发送。

          在色盲(color-blind)模式下是假设包都是没有经过“着色”处理的(不辨别包中原来标记的颜色),是依据包长度来确定包被标记的颜色。现假设到达的包长度为B(单位为bit)。若包长度B小于C桶中的令牌数Tc(也就是C桶中的令牌数足够该包发送所需),则包被标记为绿色,表示包符合要求,包发送后C桶中的令牌数Tc降低B。假设Tc<B<Te(也就是包长度大于C桶中的令牌数,而小于E桶中的令牌数),则标记为黄色,则从E桶中取出所需令牌,E桶中的令牌数Te降低B;若B >Te,标记为红色,表示是违反规则的包,直接丢弃,两令牌桶中的总令牌数都不降低。

          在感色(color-aware)模式下是假设包在此之前已经过“着色”处理(会辨别包中原来标记的颜色),假设包已被标记为绿色,或包长度B<Tc(注意仅仅要满足当中一个条件就可以,下同),则包被标记为绿色,C桶中的令牌数Tc值随之也相应降低B;假设包已被标记为黄色,或Tc<B<Te,则包被标记为黄色,同一时候E桶中的令牌数Te也随之相应降低B;假设包已被标记为红色,或B >Te,则包被标记为红色,Tc和Te都不降低。

       2. 双速率三色算法

           这里同样首先要稿清楚“双速率”是什么意思,它是指该算法中两个令牌桶中的CIR速率不同,存在两个令牌填充速率。

            IETF的双速率三色标记(trTCM)算法主要是依据四种流量參数来评估:CIR、CBS、峰值信息速率(Peak InformationRate,PIR),峰值突发尺寸(Peak Burst Size,PBS)。CIR和CBS參数与单速率三色算法中的含义同样,PIR就是同意的最大突发信息传输速率,当然它的值肯定不会小于CIR的;PBS是同意的最大突发信息尺寸,它的值也不会小于CBS。

            与单速率三色标记算法不同,双速率三色标记算法中的两个令牌桶是C桶和P桶(不是C桶和E桶),但它们的令牌填充速率是不同的,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS(之所以用C桶和P桶表示也是基于方便描写叙述,由于表示不同速率的參数与相应桶的容量參数同样,第一个字母相应为C,或者P)。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值各自等于CBS和PBS。

            双速率三色标记算法关注的是速率的突发,但它不像单速率三色标记算法那样把第一个桶中未使用的令牌放到第二个桶中,而是使用两个独立的令牌桶。第一个令牌桶为PIR,大小为PBS,第二个令牌桶为CIR,大小为CBS。数据的測量是先比較PIR,然后再比較CIR。也就是在双速率三色标记中,首先推断的是数据发送速率是否符合规定的突发要求,而不是正常情况下的色标方法。

            双速率三色标记算法也有色盲模式和感色模式两种。

           在色盲模式下,当包速率大于PIR,此时未超过Tp+Tc部分的包会分别从P桶和C桶中获取令牌,而且从P桶中获取令牌的部分包被标记为黄色,从C桶中获取令牌的部分包被标记为绿色,超过Tp+Tc部分无法得到令牌的包被标记为红色;当包速率小于PIR,而大于CIR时,包能够得到令牌,但超过Tc部分的包将从P桶中获取令牌,此时这部分包都被标记为黄色,而从C桶中获取令牌的包被标记为绿色;当包速率小于CIR时,包所需令牌数不会超过Tc,仅仅需从C桶中获取令牌,包被标记为绿色。

            在感色模式下,假设包已被标记为红色,或者超过Tp+Tc部分无法得到令牌的包,被标记为红色;假设标记为黄色,或者超过Tc但未超过Tp部分包记为黄色;假设包被标记为绿,或者未超过Tc部分包,被标记为绿色。

            【备注】刚刚出版上市的Cisco/H3C交换机高级配置与管理技术手冊》与今年元月份上市的还有一本交换机手冊:Cisco/H3C交换机配置与管理全然手冊》(第二版)在内容上是全然不同,相互弥补,无缝对接的,眼下这两本书均已在当当、卓越和京东网上全面上架,而且火热销售中。


    转载于:https://www.cnblogs.com/gcczhongduan/p/4351435.html

    展开全文
  • 1.理解并学会令牌桶算法的原理; 2.理解令牌桶对流量限制机制和处理方式。 二、实验要求 1.实验背景需求 (1)在实际网络环境中,为了防止网络拥塞,需限制流出网络流量,使流量以比较均匀速度向外发送。 (2)本...

    一、实验目的

    1.理解并学会令牌桶算法的原理;
    2.理解令牌桶对流量限制的机制和处理方式。

    二、实验要求

    1.实验背景需求

    (1)在实际网络环境中,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。
    (2)本项目需要在netmagic的第一阶段工作基础上实现网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)
    (3)本阶段要求速率限制(Rate Limiting)但同时允许突发数据的发送。

    2.实验参数需求

    (1)实现端口级别的流量限制。
    (2)流量限制可以以10的倍数自定,范围在大于110兆到小于300兆之间
    (3)建议大家采用与时间周期同步的125M为限制阈值

    3.测试验收要求

    (1)使用iperf软件做流量测试,测试流量为非饱和状态和饱和状态测试。
    (2)自选软件对系统的网络流量波形进行监视以检查流量限制和整形的效果
    (3)硬件部分观测流量控制过程关键参数的变化

    三、实验指导

    1.流量整形的核心算法

    流量整形的核心算法有以下两种,具体采用的技术为GTS(Generic Traffic Shaping),通用流量整形:
    (1)漏桶算法(Leaky Bucket)
    漏桶算法是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。
    (2)令牌桶算法(Token Bucket)
    有时人们将漏桶算法与令牌桶算法错误地混淆在一起。而实际上,这两种算法具有截然不同的特性并且为截然不同的目的而使用。它们之间最主要的差别在于:漏桶算法能够强行限制数据的传输速率,而令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。

    2.令牌桶算法流程

    (1)假如用户配置的平均发送速率为r,则每隔1/r秒一个令牌被加入到桶中;
    (2)假设桶最多可以存发b个令牌。如果令牌到达时令牌桶已经满了,那么这个令牌会被丢弃;
    (3)当一个n个字节的数据包到达时,就从令牌桶中删除n个令牌,并且数据包被发送到网络;
    (4)如果令牌桶中少于n个令牌,那么不会删除令牌,并且认为这个数据包在流量限制之外;
    (5)算法允许最长b个字节的突发,但从长期运行结果看,数据包的速率被限制成常量r。对于在流量限制外的数据包可以以不同的方式处理:
    ·它们可以被丢弃;
    ·它们可以排放在队列中以便当令牌桶中累积了足够多的令牌时再传输;
    ·它们可以继续发送,但需要做特殊标记,网络过载的时候将这些特殊标记的包丢弃。

    3.令牌桶工作过程

    工作过程包括3个阶段:产生令牌、消耗令牌和判断数据包是否通过。其中涉及到2个参数:令牌产生的速率CIR(Committed Information Rate)/EIR(Excess Information Rate)和令牌桶的大小CBS(Committed Burst Size)/EBS(Excess Burst Size)。
    (1)产生令牌:周期性的以速率CIR/EIR向令牌桶中增加令牌,桶中的令牌不断增多。如果桶中令牌数已到达CBS/EBS,则丢弃多余令牌。
    (2)消耗令牌:输入数据包会消耗桶中的令牌。在网络传输中,数据包的大小通常不一致。大的数据包相较于小的数据包消耗的令牌要多。
    (3)判断是否通过:输入数据包经过令牌桶后的结果包括输出的数据包和丢弃的数据包。当桶中的令牌数量可以满足数据包对令牌的需求,则将数据包输出,否则将其丢弃。

    四、实验环境

    在这里插入图片描述

    1.1台管理节点主机;1台主机A;
    2.2根网线;
    3.NetMagic08开发平台;
    4.软件Quartus 16。
    5.主机及网络详细配置参照附带的实验环境拓扑及软件配置文档。

    五、实验步骤

    1.

    使用Quartus 打开上次实验完成好的in2out3目录下的硬件工程项目,本次实验是建立在2进3出的基础上的
    在这里插入图片描述

    2.

    在工程项目中,打开文件列表对UM.v文件进行编写(用户模块文件)

    3.

    声明定义令牌桶的相关变量参数如下
    在这里插入图片描述

    在UN.v文件中加上这三个变量,这些变量分别代表着:
    token:代表令牌的数量
    count_time: 代表着从头开始走过的时间
    msg:代表着从发送方发送过来的报文的数量(这里的msg单位就默认的是byte,在后面的进行与token加减法的时候涉及到单位统一的问题)

    4.

    令牌桶只需要实现于转发功能部分,编写如下代码:

    always@(posedge clk or negedge reset)
    	if(!reset)
    		begin
    			um2cdp_rule <= 30'b0;
    			um2cdp_rule_wrreq <= 1'b0;
    			input_port_reg <= 4'b0;
    			token <= 32'b0;
    			count_time <= 32'b0;
    			msg <= 32'b0;
    		end
    	else
    		begin	
    			count_time <= count_time + 1;
    			if(count_time >= 5)
    				begin
    					count_time <= 32'b0;
    					if(token <= 25000000)
    						token <= token + 1;
    				end
    			
    			if(cdp2um_data_valid==1'b1)
    				begin
    					msg <= msg + cdp2um_data[135:132];
    				End
    			if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b101))
    				begin
    					input_port_reg <= cdp2um_data[131:128];
    				end
    			else if((cdp2um_data_valid==1'b1)&&(cdp2um_data[138:136]==3'b110)&&(cdp2um_rule_usedw<5'd30))
    				begin
    					if(msg > token)
    						begin
    							um2cdp_rule <= 30'h00000100;
    							um2cdp_rule_wrreq <= 1'b1;
    						end
    					else
    						begin
    							token <= token - msg;
    							if(input_port_reg==4'b0001)
    								begin
    									um2cdp_rule <= 30'h00000004;
    									um2cdp_rule_wrreq <= 1'b1;
    								end
    							else if(input_port_reg==4'b0010)
    								begin
    									um2cdp_rule <= 30'h00000002;
    									um2cdp_rule_wrreq <= 1'b1;
    								end
    							elses
    								um2cdp_rule_wrreq <= 1'b0;
    						end						
    					msg <= 32'b0;
    				end
    			else
    				 um2cdp_rule_wrreq <= 1'b0; 
    		End
    

    首先是在每个时钟周期到来时进行一些操作。
    在这里插入图片描述

    每个时钟周期到来的时候就将count_time进行加一,然后当count_time大于5的时候就将令牌桶加一,然后始终相应的清零。也就是说每五个时钟周期增加一个令牌。而且下面会有一个最大值的控制,当token大于25000000的时候就不会再增加。
    始终晶振是125M的,也就是说吗、每秒会有125M个时钟周期。这样一来的话就会有每秒25M个令牌产生。所以每一秒就会可以允许通过的最大字节数为25Mbytes。
    在这里插入图片描述

    在有消息到来的时候首先要和此时存在的令牌桶进行比较,如果大于此时的令牌的数量就说明这个包太大了会超出我们所限制的最大带宽,所以这个包就需要进行丢弃。如果是小于令牌的数量就说明是不会超过最大的带宽就说明是允许发送,此时就将发送端口指向第三个端口就可以进行发送。

    5.

    点击编译按钮。然后等待二十分钟之后就可以生成相应的sof文件,然后将电脑和实验盒进行正确的连接之后就可以打开programmar 按钮,然后进行下载。
    在这里插入图片描述

    6.

    使用之前的iperf软件进行带宽的测试。
    用iperf –c 169.254.217.227 –p 1234 进行相应端口的测试。
    主机A:169.254.98.2;主机B:169.254.217.227
    主机B输入iperf -s -p 1234
    主机A输入iperf –c 169.254.217.227 –p 1234,观察现象
    在这里插入图片描述

    可以发现除了第一次的带宽会比较大,其余的时间的带宽都会小于之前代码中设置的25MBtyes。说明限制了带宽。

    六、实验思考

    本次实验了解了网络流量整形和速率限制中常用的令牌桶算法,该算法可以控制发送到网络上的数据数目,并允许突发数据的发送,旨在实现网络传输数据过程中防止网络拥塞,限制流出网络的流量使其以比较均匀的速度向外发送的功能。
    本文进行了令牌桶算法的简单实现,能够实现125M下的整数倍的流量控制,但无法进行十分精确的划分,最好是5的整数倍。

    展开全文
  • 本篇重点分析一下令牌桶算法的工作原理,常见的限流算法,还有其他两种: 漏桶算法 滑动窗口算法 二、工作原理 客户端请求的TPS跟令牌生成器的令牌生成频率保持一致。 例如每秒生成10个令牌,令牌桶的最大...

    一、前言

         本篇重点分析一下令牌桶算法的工作原理,常见的限流算法,还有其他两种:

    • 漏桶算法
    • 滑动窗口算法

     

    二、工作原理

    客户端请求的TPS跟令牌生成器的令牌生成频率保持一致。

    例如每秒生成10个令牌,令牌桶的最大容量100个,则这套限流策略,除了可以满足每秒10个TPS的请求,同时还可以满足瞬时高峰流量,瞬时消耗令牌桶中剩余的90个令牌。

     

    展开全文
  • Redis 实现令牌桶 in Java

    千次阅读 2019-06-04 15:03:48
    高并发, 通常考虑使用缓存来解决问题....了解解决问题的方法, 首先需要知道Redis的工作原理和什么是令牌桶算法. Redis: 基于内存或者持久化的日志, key/value结构的数据库. Value支持类型: String...

    高并发, 通常考虑使用缓存来解决问题. 可是缓存也是有极限的, 因此, 即使使用的Redis, 一样会遇到瓶颈和问题.本文就在研究解决问题的一种方法, 基于Java来实现Redis的灵牌桶, 阻塞过多的请求.

    了解解决问题的方法, 首先需要知道Redis的工作原理和什么是令牌桶算法.

    Redis: 基于内存或者持久化的日志, key/value结构的数据库. Value支持类型: String, Hash, List, , sorted sets.支持多种语言, 本文主要以Java为例.

    令牌桶算法: Token Bucket, 随着时间的流逝, 系统会按恒定的1/QPS时间间隔(如果QPS=100,则时间间隔是10ms) 往桶里加入Token(就像有个水龙头在不停的往桶里加水). 如果桶满了, 就停止加水. 每当新的请求来临时, 会各自拿走一个Token, 如果没有Token可以拿了, 就阻塞或者拒绝服务. 如下图:

     

    展开全文
  • 本文描述现今IETF对流量规格度量的两种算法来了解令牌桶的工作原理;主要讲述我司路由器流量监管和流量整形的实现机制,由于流量限速也用到相同的令牌桶处理机制,所以也讲述了流量限速的实现机制。 2 流量监管和...
  • 流量监管和流量整形

    2019-10-04 13:07:07
    本文描述现今IETF对流量规格度量的两种算法来了解令牌桶的工作原理;主要讲述我司路由器流量监管和流量整形的实现机制,由于流量限速也用到相同的令牌桶处理机制,所以也讲述了流量限速的实现机制。 2 流量监管和...
  • 工作2年了, 开始认真准备下一阶段的面试和工作计划, 这里会记录我的一个面试总结,每一个问题都会有一篇对应的文章, 在这里将这些文章按类别进行汇总和整理,只需要点击问题跳转链接就可以看到...令牌桶的设计思路 ...
  • 1.工作主流程 介绍sentinel工作主要流程前我们先思考一个问题:如果是你来实现一个限流框架你会...接下来我们带着我们思考与实现思路,看下Sentinel主要工作原理,以及他设计实现。 Sentinel整体架构设计图:

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

令牌桶的工作原理