本节书摘来自异步社区《cisco qos认证考试指南(第2版)》一书中的第6章,第6.3节,作者 【美】wendell odom , michael j. cavanaugh,更多章节内容可以访问云栖社区“异步社区”公众号查看
cisco qos认证考试指南(第2版)
流量整形和流量限速都会测量发送或接收数据的速率。限速特性会丢弃超出门限值的数据包,使整体限速后的速率不会超出设定。整形特性会将超出门限值的数据包排到队列中,并以整形速率发送这条队列中的数据包。无论是哪种方法,限速和整形都用来预防流量超出限速器或整形器设定的比特率。
这一部分介绍了与整形和限速相关的概念,首先说明使用整形和限速的动机。使用整形特性的一个经典理由是链路对端的设备启用了限速特性。举例来说,假设r1属于一家企业,r2属于一个isp。r1向r2发送数据包,r2对收到的流量实施了限速,即它会丢弃超出x bit/s的流量。isp会选择在r2进行限速,是为了预防自己的网络接收过多的流量。r1可以对其流量进行整形,使用与r2限速器设定速率相同的速率向r2发送流量,这样可以避免r2丢弃超出设定速率的数据包。还有其他一些理由让工程师使用整形和限速,接下来我们会一一讨论。
本节还介绍了用来执行整形和限速功能的机制。比如限速器和整形器都必须测量比特率。为了测量速率,必须观察并计算一段时间内的流量比特或字节。为了简化流程,整形和限速使用类似的机制来计算流量比特或字节。但现在,我们先介绍使用整形和限速的动机。
在大多数情况下,整形和限速分别实施在两个不同网络的边界上。以图6-1为例,这里描绘了两个整形和限速的常见案例。图中显示了pb帐篷公司的网络,它使用帧中继服务,并通过isp1来连接internet。
在本例中,pb帐篷公司分别有3个边界连接不同的网络。链路1是第一个边界,位于r1和帧中继网络交换机frs1之间。第二个边界位于交换机frs2和r2之间。最后,还有一个边界位于r3和isp-r1之间,标记为链路3。
对于每个边界,分别有法律文件详细地写明pb帐篷和帧中继服务提供商之间的协议,以及pb帐篷与isp1之间的协议,其中包括流量契约(traffic contract)。这种契约用在帧中继环境中更为合理,但也可以应用于internet连接。举例来说,r2使用t1访问链路连接到帧中继网络。但r2和r1之间vc上的cir(承诺信息速率,committed information rate)只有64 kbit/s。类似地,r1拥有128 kbit/s访问链路,但在连接r2的vc上,cir为64 kbit/s。那么在r1发送数据包时,数据包的传输速率是128 kbit/s——因为物理链路只能以这个速率工作!同样,r2必须以1.5 mbit/s的速率发送数据包。但是流量契约中声明在r1和r2之间的vc上,任意方向只允许使用64 kbit/s。
pb帐篷和isp1之间协商使用一条比pb帐篷现有需求更快速的链路,为pb帐篷internet流量负载在未来的增长留出余量。当pb帐篷需要更多流量容量来访问internet时,它们双方就需要达成一个新的流量契约,pb帐篷也要付给isp1更多的钱。比如都市中以太/快速以太/吉比特以太网服务正变得越来越普遍;但大多数站点实际上并不需要100 mbit/s带宽来连接internet。若pb帐篷使用快速以太网链路来连接isp1,并且流量契约中声明pb帐篷可以使用2 mbit/s带宽服务,那么在internet连接上,物理容量和合约容量之间也出现了不匹配,这与帧中继链路的情况相同。
简而言之,当出现路由器能够发送的流量多于流量契约所允许的流量时,就需要使用限速和整形。整形特性会降低数据包的发送速率,使实际流量不会超出流量契约的限制。限速特性会丢弃一些数据包,来保证实际流量不超出流量契约的限制。
1.限速:何时?何地?
只要物理始终速率超出了流量契约的限制,就可能需要使用限速特性。举例来说,isp1拥有1000个客户,与pb帐篷相同,每个客户使用一条100 mbit/s的连接,并且流量契约支持2 mbit/s带宽。随着时间的推移会发生什么事?若没有任何机制的介入,每个客户都会发送和接收越来越多的流量。在短时间内,所有客户都会很高兴,因为它们通过isp1核心的数据包数量远大于契约限制。即使isp1有足够的带宽容量来为每个客户提供10 mbit/s带宽,最终isp1的网络会变得超载,因为所有客户都不停地发送越来越多的流量,最终所有流量的质量都会降低。队列常常排满,导致丢包的频繁发生。多媒体流量会由于高延迟和高抖动而获得糟糕的质量。tcp连接会由于丢包而缩小窗口大小,这会在isp1中导致同步问题。isp1可以扩容,但这很大程度上意味着isp1应该向客户收取更多的钱,但客户可能并不愿意签下更高的流量契约。
在真实的isp网络中,网络工程师在设计网络核心时,考虑到了一定程度上的超额订阅。术语“超额订阅(oversubscription)”是指客户发送和接收的流量大于契约或订阅流量。在前文isp1的案例中,isp和帧中继提供商在建立网络时也考虑到了一定程度的超额订阅。但是它们在建立网络时,肯定不会假设所有客户无论何时,都以访问速率发送流量。
限速特性可以保护网络,使之不会出现流量超载的情况。若isp1限制了每个客户的速率,并丢弃超出流量契约的数据包,那么它就可以保护自己的网络,使之不会出现流量超载的情况。但是为网络实施限速,有一定的政策性困难。假设isp拥有1000个客户,每个客户的流量契约都是2 mbit/s。每个客户都发送和接收更多的流量,平均为10 mbit/s,导致isp1的网络变得拥塞。isp1决定实施限速特性,使用契约速率进行限速,丢弃超出2 mbit/s的数据包。当然大多数客户会非常不高兴!这个选择不是会导致业务终结,就是会导致职业生涯的完结。
限速器也可以只是标记下流量,而并不丢弃流量。在这种情况下,限速器会在实际流量超出速率限制时,以不同的ip优先级或dscp值来标记数据包,但仍让数据包通过。在此之后的qos功能,其中包括限速器和丢包工具(比如wred,加权随即早期检测),对比与未被标记过的数据包,会更积极地丢弃被标记过的数据包。本质上,若流量速率超出了速率限制,限速器可以增加后续数据包在网络中被丢弃的可能性。通常来讲,若限速器标记了数据包,但网络当前没有拥塞,那么数据包还是可以穿越网络的;若网络拥塞了,则数据包更有可能被丢弃。
isp需要决定是否进行限速,以及限速到什么程度。isp的选择精简为以下三个基本选项。
不限速——为了支持所有流量,建立网络时要预计所有客户都以访问链路的时钟速率发送和接收流量。对于销售来说,可以通过声明不实施限速来达成交易,但要鼓励那些超出契约限制的客户购买更多的带宽。
以契约速率进行限速——为了支持这些流量,只需使网络能够支持所有契约速率的总和即可,即使这样一来核心网络在支持新客户时可能会超载。对于销售来说,要鼓励那些开始超出契约限制的客户升级契约,并为其提供一些鼓励措施。
以契约速率和访问链路始终速率之间的一个值进行限速——比如isp1可以将pb帐篷限速为5 mbit/s,但契约限制为2 mbit/s。可以将网络建设为仅支持所有限速速率的总和。销售团队可以在客户持续超出契约速率时,鼓励客户购买更高的契约速率;但要以为其提供远高于契约速率的流量,来显示运营商的大度,并维持客户的高满意度。
在多路访问wan链路(帧中继和atm网络)中限速特性也很有用,原因与isp连接需要限速相同。一旦允许以高于契约速率的速率发送数据,当多个站点同时以更高的速率发送流量时,网络就面临着超载的危险。举一个例子来帮助你理解一些问题。图6-2描绘了pb帐篷的网络结构,它拥有12个分支站点,1个中心站点。
每个站点都可以以128 kbit/s的速率发送流量,但每个分支去往主站点的vc上的cir为64 kbit/s。若所有12个站点都遵从各自的cir,帧中继网络应该可以处理这些负载。若所有12个站点长时间发送128 kbit/s流量,运营商可能仍可以继续转发流量,因为多数帧中继提供商会将它们的核心网络建得容量大一些。它们也会将这一点当作营销宣传的亮点,即客户可以免费获得额外的带宽。
当然了,在一定程度上,若运营商的所有客户都以完整的线路速率发送数据包,一段时间后,网络很可能会拥塞。帧中继网络与isp拥有相同的选择——不限速,但提供更多容量;以cir进行限速,并处理销售和客户满意度问题;以高于cir的速率进行限速,以不同的方式处理销售和客户满意度问题。
为了对图6-2所示网络进行限速,可以在帧中继交换机上执行限速特性,或者在路由器上执行。传统上,会在数据包进入网络的时候执行限速,因此建议当数据包从客户网络进入帧中继交换机时执行限速。若运营商可以控制企业网络中的边缘路由器,那么也可以在数据包离开路由器去往帧中继云的时候执行限速特性。如果客户负责控制云边界的路由器,对于运营商来说,在这些路由器上实施限速策略可能有些风险,因为可能有些客户会关闭限速,以获得更多的免费容量。
cisco qos考试中涉及ios路由器中的限速特性(使用cb限速)考试并不涉及帧中继交换机或lan交换机中的限速,但它们的基本概念是相同的。
2.流量整形:何时?何地?
网络中使用流量整形主要出于以下两个原因:
以与限速速率相同的速率来整形流量(如果运营商对流量进行了限速);
为了避免出向阻塞的影响。
以图6-3所示的分支1和分支24为例。分支1没有实施限速,分支24限速为96 kbit/s。对于两个站点来说,帧中继交换机上都配置了96 kbit/s的限速(每条vc上的cir都是64 kbit/s。因此运营商实施的限速并不严格。pb帐篷的工程师希望能够获得更多的带宽,因此将整形速率设置为96 kbit/s,而不是使用64 kbit/s的cir)。
对于分支1来说,由于没有启用整形特性,r1就不会延迟发送任何数据包。但是frs1上实施的限速特性会在r1的流量速率超出96 kbit/s时,丢弃一些数据包。因此有一些数据包会被丢弃,尽管未被丢弃的数据包不会经历额外的整形延迟。如果分支1的流量对丢包不敏感,但可能对延迟和抖动敏感的话,使用这个策略是合理的。
对于分支24来说,由于启用了整形特性,r1会延迟发送一些数据包。frs3上执行的限速特性不会丢弃数据包,因为r1不会发送超出96 kbit/s的流量。因此不会有数据包被丢弃,尽管有一些数据包会经历更多的延迟和抖动。若分支24的流量对丢包敏感,但对延迟和抖动不敏感的话,使用这个策略是合理的。
使用整形的另一个理由是为了避免出向阻塞的影响。出向阻塞发生在数据包试图离开多路访问wan(比如帧中继和atm)的时候,由于拥塞数据包无法离开网络。汽车的交通模式也会导致与出向阻塞相同的行为问题。比如在早晨,人们都试图去往大城市的市中心。即使城市中的公路有8条车道,但所有住在周围小镇的人们都在每天早晨7点至8点之间试图从公路仅有的几个出口离开。市中心地区的公路和出口会变得拥塞。同样地,在下午,若每个人都试图在17:30通过一个出口去往郊区,八道公路到两道出口公路之间会变得拥塞。类似地,尽管网络中拥有足够多的带宽容量,出向阻塞仍会发生在数据包试图离开网络的时候。
图6-4以帧中继网络为例,展示了出向阻塞带来的问题。
假设所有24个分支都整形为64 kbit/s。若所有分支同时发送64 kbit/s,那么所有分支向主站点发送的总流量为1.5 mbit/s。因为主站点路由器安装有t1链路,因此frs2在通过访问链路向主站点路由器转发数据包时不会经历拥塞。但是若分支站点没有启用整形特性会怎么样?若所有24个分支都以128 kbit/s(访问速率)发送流量,一段时间后,积累的流量负载可能会达到3 mbit/s。数据包在试图离开frs2的接口(连接主站点路由器)时会开始排队。数据包可能会遭遇更多延迟、更多抖动,最终会有更多数据包被丢弃,因为frs2的输出队列排满了。要注意,运营商并没有实施任何限速——出向阻塞仍会发生,因为分支站点的总流量会超出出向链路(云和主站点之间)的负载。
有趣的是,即使启用限速,在分支启用整形,出向阻塞可能仍会发生。在图6-3中,整形和限速都配置为96 kbit/s,因为运营商不想太严格地执行流量契约。若所有24各分支同时发送96 kbit/s流量,那么将有2.25 mbit/s流量需要离开frs2,去往主站点路由器。再说一次,即使启用了限速和整形,出向阻塞仍可能发生。
同样地,出向阻塞也可以发生在图中从右到左的方向上。假设主站点路由器从lan接口接收到11个连续的1500字节数据包,去往分支24。主站点路由器大概要花费100毫秒的时间,将数据包发送到帧中继网络中,因为它的访问链路是t1。当数据帧到达frs1,它们需要通过访问链路被发送到r24。但是这条访问链路的访问速率是128 kbit/s。为了发送这11个数据包,需要花费1秒多的时间将数据包串行化到链路上!大多数数据包会在frs3的输出队列中等待被发送。这个简单的场景是另一个出向阻塞的案例,有时也称为速率不匹配(speed mismatch)。
应对出向阻塞问题的一个解决方案是流量整形。在案例网络中,将所有分支上的vc都整形为64 kbit/s,可以确保总负载不会超过主站点的访问速率。同样地,若主站点路由器将r1的vc整形为64 kbit/s,甚至整形为128 kbit/s,也就解决了frs1上的出向阻塞问题。
在上述两个整形环境中,延迟和抖动会随着启用整形功能而增加。路由器中的整形延迟代替了帧中继交换机中的队列延迟,因为数据包会排列在路由器的整形队列中。随着路由器中队列的形成,ios中的队列工具可以用来更好地处理流量,并为延迟敏感的流量提供更好的延迟参数。举例来说,路由器中形成了整形队列,路由器可以使用llq(低延迟队列)来优先发送队列中的voip(ip语音)数据包。帧中继交换机无法实施复杂的队列,因为做出转发和队列决策时,帧中继交换机无法查看帧中继或ip头部之外的字段。
表6-2列出了在使用限速和整形时,有关原理的重点内容。
只有当传输媒介的物理时钟速率超出流量契约时,才有必要使用整形特性。在多数案例中,整形会应用在连接帧中继或atm网络的路由器中。现在越来越常见的另一种应用场合是应用在企业与isp之间的点到点串行链路或以太链路上,且流量契约定义的流量值低于物理链路。
路由器的接口只能以物理时钟速率向外发送比特。为了在长时间内,使路由器发送的平均比特率低于时钟速率,路由器只能在一段时间内发送一些数据包,然后在另一段时间内不发送任何数据包。为了使平均发送数据包的速率控制在物理链路速率的一半,路由器应该在一半时间内发送数据包,并在另一半时间内不发送数据包。为了使平均速率控制在物理链路速率的1/4,路由器应该在1/4时间内发送数据包,在剩下的3/4时间内不发送数据包。随着时间的发展,路由器就像使用断音的方式发送数据包,发送一会儿,停一会儿。
回顾几个简单的案例,你就可以理解流量整形的逻辑。当然了,为了通过考试,你需要知道更多的细节内容!下列简单的案例阐释了基本逻辑:假设r1的访问速率为128 kbit/s,cir为64 kbit/s,工程师希望将流量整形为cir(64 kbit/s)速率,r1只能在一半的时间内,向链路上发送流量。随着时间的推移,r1在一半的时间内,以128 kbit/s速率发送流量(因为它只能以这个速率发送流量),那么长时间内的平均速率是64 kbit/s。概念就是这么简单!
还有一个更简单的案例强调了概念中的重点。以图6-4为例,假设r1希望整形为96 kbit/s,因为帧中继交换机的限速速率是96 kbit/s。在访问速率为128 kbit/s的链路上,整形速率为96 kbit/s,那么r1应该在3/4的时间内发送流量,因为96/128 = 3/4。
再次以图6-4为例,若主站点路由器要将连接r24的vc整形为128 kbit/s,那么为了避免出向阻塞问题,主站点路由器需要在128/1536(t1链路实际可用的比特率是1.536 mbit/s)或1/12的时间内发送流量。若主站点路由器希望将这条vc整形为64 kbit/s(与cir相匹配),那么主站点路由器应该在64/1536或1/24的时间内,向这条vc上发送流量。
流量整形实现这个基本逻辑的方法是定义一个测量时间间隔,并规定在这个时间间隔内允许发送的比特数,这样就形成了整形速率。通过案例解释非常有帮助,但我们先来看一些定义,见表6-3。
流量整形的实际流程和表6-3中列出的术语,再加上一些案例,有助于你理解流量整形特性。第一个案例见图6-5,r1的访问链路速率为128 kbit/s,整形速率为64 kbit/s。
路由器应该在一半的时间内向128 kbit/s链路发送流量,以满足平均64 kbit/s的要求。流量整形通过在每个tc期间,只用一半的时间来发送流量,满足这一要求。
如图所示,r1以链路速率发送62.5毫秒,然后停止发送62.5毫秒,完成了第一个时间间隔(很多整形工具tc的默认值都是125毫秒;cb整形恰好使用本例中另一个tc值,但概念是一样的)。随着数据包排队并发送,r1在每个时间间隔内重复这个过程。1秒钟过后,r1在8个时间间隔内分别有62.5毫秒在发送流量,总共500毫秒——也就是0.5秒。通过在半秒钟之内发送128 kbit/s,r1发送数据的平均速率就变成64 kbit/s。
ios流量整形实际上并不是在62.5毫秒计时器开始时发送流量,并在计时器停止后停止发送流量。ios实际上会根据配置进行计算,算出在每个时间间隔内允许发送多少字节,并以此来满足整形速率的要求。这个字节数称为每个时间间隔的承诺突发(bc)。它被看作突发量,是因为比特流实际上是以物理链路速率发送的。但这个突发是被认可的,因为如果你在每个时间间隔内都发送这么多比特,那么你仍遵从了流量契约的限制。在本例中,bc值设置为8000比特,实际流程允许整形器在每个时间间隔内发送数据包,直到已发送8000个字节为止。到那时,整形器会停止发送数据包并等待tc结束,也是另一个时间间隔开始,接着在下一个时间间隔内发送bc比特的流量。时间间隔125毫秒,每个间隔内可发送8000比特,这样就可满足64 kbit/s的整形速率。
bc值是基于下列公式计算的:
bc = tc×cir
或者
bc = tc×整形速率
cisco文档中随处可见第一个公式,这个公式是假设你希望以cir速率进行整形来计算的。但是在很多案例中,你希望以其他速率进行整形,使用第二个公式就更为精确。举例来说,若整型工具默认的tc为125毫秒,整形速率为64 kbit/s,那么bc为:
bc = 0.125秒×64000 bit/s = 8000比特
在配置整形特性时,你通常会配置整形速率,不配置bc。若你同时配置了这两个值,ios会更改tc来满足公式的要求;你永远无法实际配置tc的值。若你只配置了整形速率,根据整型工具的不同,ios会取得tc或bc中的一个值,然后计算出另一个值。
本章后文介绍cb整形的部分,会介绍cb整形如何在只配置了整形速率的情况下,计算tc和bc。若你同时配置了整形速率和bc,那么ios会根据以下公式计算tc:
tc = bc/cir
tc = bc/整形速率
与前文公式相同,使用cir的公式假设你希望以cir速率进行整形,第二个公或使用整形速率,因为你可以使用不同于cir的速率进行整形。
另一个案例有助于把这些概念汇总在一起。在前文中已经看到pb帐篷公司的案例,在时钟速率为128 kbit/s的链路整形为96 kbit/s,因为帧中继运营商将链路限速为96 kbit/s。若整形功能中配置的整形速率为96 kbit/s,假设tc是125毫秒,那么公式计算如下:
bc = 0.125秒×96 000 bit/s = 12 000比特
图6-6描绘了这个案例中发生的事件。在每个时间间隔内,整形特性允许发送12 000比特,耗时91.25毫秒。91.25/125 = 3/4,表示路由器的平均发送速率是时钟速率的3/4,即96 kbit/s。
流量整形利用每个时间间隔内发送多少比特的流量来达到目标,因为这比一直计算速率要高效得多。整形器只需抓取下一个数据包,从bc值中减去数据包中包含的比特数,重复这一过程直到bc值被耗尽。那时,整形器停止抓取数据包并等待tc超时,tc超时后,整形器会继续发送另一个bc的流量。
对于被整形的数据包来说,tc的长度可能会影响延迟和抖动参数。现在考虑另一个案例,主站点路由器向r24发送数据包,访问链路为t1,整形速率为128 kbit/s。图6-7展示了整形细节。
对于t1速率来说,在一个时间间隔内发送bc比特的流量并不会花费太长时间。但是将tc值设置为125毫秒对于延迟敏感的流量来说不是一个好的选择。假设主站点收到了一个voip包,并需要把它发送到r24。主站点使用llq,并将voip包分类到低延迟队列中,因此这个新收到的voip包就是下一个要发送的数据包。但不幸的是,在这个voip包前面发送出去的数据包已经消耗了这个tc内的全部bc比特。voip数据包需要等待多久,直到当前tc超时并进入新的时间间隔?发送bc比特的流量只需10毫秒,因此还有115毫秒才能开始新一轮时间间隔,voip数据包才能被发送!voip要求的单向延迟预算为150~200毫秒,单一设备上的整形延迟达到115毫秒显然是不可行的。因此cisco建议当网络中有延迟敏感的流量时,通过配置bc,使tc变为10毫秒或更低。在这个案例中,若将bc配置为1280比特,tc = 1280/128 000 = 0.010秒,即10毫秒。
注释:很多人可能会担心这种1280比特或只有160字节的小bc会带来问题!大多数数据包都会超出这个长度。因此通常在这种情况下还需要使用分片特性。考虑到对延迟敏感的流量,分片也使用类似的大小——事实上,在第8章你会读到,在这个案例中,分片的大小很可能是160字节。因此网络中存在延迟敏感的流量时,你要通过减少bc,把tc降低到10毫秒,bc值的设置应该只允许每个tc间隔内通过1个分片。通过这种做法,你可以降低后续数据包等待下一个tc到来的整形延迟,并且通过将数据包分片成更小的片段,可以降低串行化延迟。
下面几个小节继续讨论流量整形是如何工作的,其中包括超额突发、队列、自适应和一起启用整形特性的概念。
1.流量整形且不使用超额突发
流量整形还支持在某些时间间隔内,发送多于bc的流量。基于的思想是很简单的:数据流量是突发的,因此在一段时间的空闲后,当再次产生流量后,最好在第一个时间间隔内能够发送多于bc的流量。这个超出的比特数称为突发超额(burst excess)或简称be。流量整形工具将be当作一个可选项。
想要了解启用be的流量整形的基本运行原理,需要深入了解流量整形是如何工作的,还需要理解令牌桶的概念。令牌桶可以用来描述整形和限速是如何实施的。
先放下be不提,想像一个桶中填满了令牌,就像地铁代币。在令牌桶环境中,1个令牌赋予你发送1比特的资格。令牌桶如前所述,用来规范流量整形的操作;这个桶的大小是bc。
围绕着令牌桶和令牌的两个主要行为如下:
新令牌填入令牌桶;
整形器消耗令牌,来获取转发数据包的资格。
在每个tc开始的时候(假设这时be = 0),令牌桶中会填入令牌,桶会被正好填满,填入的令牌数量不能超过桶的容量。或者你也可以想像在每个时间间隔开始的时候,整形器向令牌桶中倒入bc数量的令牌;若上一次的令牌没有用完,导致这时桶中没有足够的空间,就会有一些令牌从桶中溢出。这些溢出的令牌将无法再使用。无论你通过哪种方式理解,结果都是在时间间隔开始时,令牌桶中有满满一桶令牌,大小为bc。图6-8描绘了这一基本概念。
每当一个数据包被发送出去,流量整形特性都从令牌桶中花费令牌来购买数据包的发送资格。若数据包的长度是1000比特,将会有1000个令牌从桶中消耗掉。当流量整形特性试图发送一个数据包,但令牌桶中没有足够的令牌可以购买这个数据包的发送资格,流量整形特性就必须等待下一个时间间隔,那时令牌桶会被重新填满。
对令牌桶更形象的比喻是:孩子和每周六早晨他会收到的零用钱。假设每周的零用钱是10美元。孩子每周都可以花掉这些钱;若他不花钱,那他就可以把钱存起来买更贵的东西。假设孩子的父母每周六早晨都会查看孩子的存钱罐,如果里面还有钱,那他们就会往里面少添点儿钱,使孩子每周六早晨都只有10美元可花!就这样过了几个星期,孩子会尽量在一个星期内花掉所有的钱,因为他知道他不能攒到超过10美元的钱。同样地,bc比特,或者如果你愿意使用桶中的令牌的话,也只能在一个tc间隔内使用,下一个tc(时间间隔)开始的时候,总有bc个令牌在桶中,不会再多。
2.流量整形且使用超额突发
流量整形特性通过将令牌桶设置得大一些,来实施be。事实上,为了支持超额突发,现在令牌桶中除了bc数量的令牌之外,还有be数量个令牌。在每个时间间隔开始的时候将令牌填入桶中,发送数据包的时候消耗令牌来换取发送资格,这些还是一样。比如在时间间隔开始的时候,整形器仍会试图将bc个令牌填入桶中。若由于桶中没有足够的空间而导致有些令牌溢出了,那这些溢出的令牌就不再有用了。
获得be(换句话说,令牌桶大小变为bc加be)的关键优势在于令牌桶变大了。这样一来,若实际比特率低于整形速率,在一段时间后,令牌桶中会有很多令牌。若在下一个时间间隔内,需要发送的字节数大于bc,整形器还是会发送它们——令牌数量以bc + be为上限。通常来说,整形器允许发送的数据量可以增加到突发值。
图6-9描绘了使用be的整形器如何工作。图中所示的整形器将一条128 kbit/s链路的cir整形为64 kbit/s。bc设置为8000比特,be设置为8000比特。
图6-9所示案例假设在本例发生前,网络已经经过了足够长的不活跃期或一段数据流量很低的时期,使得令牌桶被填满了。换句话说,本例中一开始令牌桶中有bc + be个令牌,也就是16 000个令牌。接着来了大量流量,因此流量整形特性以最快的速度发送数据包,直到消耗掉所有令牌。
在第1个时间间隔内,流量整形特性一共发送了16 000比特。假设tc为125毫秒,在128 kbit/s的链路上发送16 000比特需要全部的125毫秒!好在这个案例中,前一段时间网络不活跃,r1在第1个时间间隔内,可以持续发送流量。
在第2个时间间隔开始时,整形其向令牌桶中添加bc(8000)个令牌。这些令牌填不满令牌桶,但允许整形器发送8000比特,这需要消耗半个时间间隔。因此在本例中,整形器会持续发送187.5毫秒(完整的第1个时间间隔和第2个时间间隔的前一半),然后流量整形特性会降低发送速率。从而通过使用be,在开始发送流量时,实现了数据流量的突发。
3.流量整形自适应
整形功能对流量施加的整形速率可以随着时间而变化。自适应过程能够使整形器识别拥塞,并且暂时降低整形速率,以便减少拥塞。自适应功能也能检测到拥塞情况的好转,并且将整形速率恢复为原始值。
两个特性定义了自适应是如何工作的。首先,整形器必须以某种方式感知拥塞的发生和消除。其次,整形器必须在拥塞发生和消除的时候降低速率和提升速率。
图6-10描述了主站点路由器感知拥塞的3种方式。图中的3条线分别代表发往主站点路由器的3个数据帧,也意味着拥塞。其中两个数据帧中设置了帧中继becn位(后向显式拥塞通告)。这个字段可以设置在任何帧中继数据帧的头部,这个字段用来表示与该数据帧传输方向相反的方向上是否有拥塞。第三个消息(最底部)是一个预见(foresight)消息。stratacom和获得stratacom的cisco在帧中继和atm网络中将预见特性定义为一个信令协议,用来通告网络信息,比如拥塞信息。若帧中继网络是由cisco/stratacom的wan交换机构成,这些交换机就可以发送预见消息,cisco路由器可以对这些消息进行响应。接下来借由图片来说明路由器识别拥塞所使用的这3种不同的方法。
首先看看becn帧。becn中的“backward(反向)”表示拥塞出现在反方向上,与数据帧的发送方向相反。因此当frs1在尝试向r1发送数据帧(图中从右到左)时检测到了拥塞,那么它就会在r1发送的下一个数据帧(图中从左到右)上标记becn位。事实上,任何设备都可以设置fecn(前向显式拥塞通告)和becn位——但是在有些网络中,帧中继交换机会设置该位,但有些网络中不设置。
若设置了becn位,主站点路由器若使用自适应整形,就会降低去往r1的vc上的整形速率。由于拥塞发生在从右到左的方向上,这是通过从左向右发送的becn指出的,主站点路由器就知道它可以通过降低整形速率来帮助减少拥塞。若主站点路由器收到了另一个设置了becn位的数据帧,它会继续降低整形速率。最终,主站点路由器会持续降低整形速率,直到达到一个最低速率,有时也称为mir(最低信息速率),或者称为mincir。
同样地,若主站点路由器从r12收到的数据帧设置了fecn位,意味着从左到右的方向上发生了拥塞。这时主站点路由器降低速率不会起到任何作用,但r12降低速率有助于缓解拥塞。因此主站点路由器会“反射”fecn,即在下一个数据帧中设置becn位,并将其发送到连接r12的vc上。r12收到设置了becn位的数据帧之后,就会降低整形速率。
最后,预见消息是与数据分离的,它是无数据的信令帧。因此当拥塞发生时,无需等待数据帧,就可以通过发送预见消息来通知拥塞情况。除此之外,预见消息是发往需要降低速率的设备的。举例来说,若一台交换机发现在主站点路由器与r24之间的vc上,从右到左的方向上出现了拥塞。交换机会生成预见消息,并通过相同的vc向主站点发送预见消息,主站点路由器就知道需要暂时降低这条vc上的整形速率。在配置自适应整形特性时,你需要配置最小和最大整形速率。在没有拥塞时,cb整形使用最大速率。当整形器接收到becn或预见消息后,它会降低最大速率的25%。为了降低速率,cb整形特性实际上降低bc加be总和的25%,保留相同的tc值。换句话说,cb整形特性会在一个时间间隔内,允许通过更少的比特数量。若整形器持续收到becn,它就会继续降低最大速率的25%,直到达到最低速率。
在连续16个时间间隔内若没有再收到becn或预见拥塞消息,速率会增加。在每个tc内整形速率增加最大速率的1/16,直到达到最大速率。为了达到这个目的,之前减少的bc和be值会在每个tc内增加原始配置值的1/16。这样一来,计算在一个时间间隔内,cb整形增加的速率实际上就是增加的bc和be值。计算公式如下:
(bc + be) / 16
4.在哪里整形:接口、子接口和vc
工程师可以在物理接口、子接口,有时也可以在vc上应用整形特性。根据选择的不同,可以通过配置,对每条vc进行单独整形,也可以对多条vc一起进行整形。在多数情况中,工程师希望对每条vc进行单独整形。
当工程师在没有配置vc的接口上应用了整形特性,那么整形特性就是应用在主接口上的,因为这个接口上并没有配置子接口和vc。但对于帧中继和atm的接口来说,有些站点会有多条vc终结在一个接口上,也就是说这里很有可能使用了子接口。在有些案例中,一个多点子接口关联了多条vc;在其他案例中,使用的是点到点子接口,即一个子接口上关联了一条vc。现在问题变成了:要想对每条vc进行整形,应该在哪里启用流量整形特性?
首先考虑典型的分支站点模型,如图6-11中的r24。r24使用一条vc来连接pb帐篷公司的主站点。由于r24只有这一条vc,因此r24的配置中可能甚至根本用不到子接口。若r24的串行链路上没有配置子接口,流量整形就可以直接配置在物理接口上;若使用了子接口,流量整形既可以配置在物理接口上,也可以配置在子接口上。由于这里只有一条vc,无论是在物理接口还是在子接口上启用整形特性都可以——获得的结果是一样的。
现在来看看主站点路由器。它通过vc连接远端站点(需要注意r1和r2之间也建立了一条vc,这是为了给这个案例增添一点乐趣)。在主站点路由器上,连接分支3~24使用的是点到点子接口,连接r1和r2使用的是多点子接口。为了对连接分支3~24的vc分别进行整形,可以将整形特性配置在子接口上。但是应用在多点子接口上的整形特性,会对该接口关联的所有vc起作用。因此为了对每条vc进行单独整形,你需要在每个dlci(数据链路连接标识)上启用整形特性。
因此,cb整形特性可以在子接口上启用,但不能在多点子接口上的每条vc上启用。在图6-11所示案例中,cb整形可以对主站点到r1和r2的所有流量进行整形,但无法对去往r1和r2的流量分别进行整形。
总而言之,多数qos策略都需要在每条vc上实施整形特性。用来启用整形特性的配置命令会根据配置vc的数量而有些许不同,配置方法也不同。表6-4总结了可用选项。
5.队列和流量整形
整形工具可以支持多种队列工具,并将其应用在整形队列中的数据包上。同时,ios支持的队列工具可应用在与物理接口相关联的接口软件队列上。以下问题可能会造成工程师的困惑:决定何时为整形队列使用队列工具、何时为接口软件队列使用队列工具、如何在不同的情况中进行配置。本节会为你解决其中的一些困惑。
注释:目前qos考试中除了cb整形特性之外,不涉及其他整形工具。但是如何对整形特性使用队列工具,以及如何对接口软件队列使用队列工具,这两种应用使很多人感到困惑。“队列和流量整形”小节中讨论了相关细节内容。考试中可能并不会涉及这部分内容,但相关概念相当重要。
表6-5列出了流量整形工具,以及在整形队列中可以应用的队列工具。
当整形器使用一种队列工具来代替单一的fifo整形队列时,它会根据队列工具的不同,创建出多个整形队列。举例来说,若frts为其整形队列应用pq(优先级队列),那么它会为整形流量创建4个队列,分别命名为high(高)、medium(中)、normal(普通)和low(低)。图6-12描绘了基本概念,其中包括在物理接口启用整形特性,物理接口使用fifo队列,在每条vc上为整形流量配置pq。
从图6-12中可以看出,整形队列与接口软件队列是相互独立的。由于为整形器应用了pq,因此这条vc上有4个整型队列。当整形器允许发送另一个数据包时,它会根据pq调度程序的逻辑,从pq整形队列中提取下一个数据包。接着这些数据包会被放入与物理接口相关联的软件队列中,然后被转发出接口——本例中的软件队列为单一的fifo队列。
在有些情况中,数据包会跳过整形队列;在其他情况中,数据包会跳过接口软件队列。为了搞明白这是怎么回事,请看图6-13描绘的场景,其中描绘了每个队列应该使用的决策逻辑。
ios总是会出于一定的原因,才会将数据包放入整形队列或者接口的输出队列中,使其等待下一步操作。举例来说,你已经知道若接口的硬件队列没有排满,数据包会被直接放入硬件队列中,即跳过接口软件队列。相同地,若由于当前速率未超出整形速率,整形特性决定正常发送数据包,即数据包无需被延迟发送,这时数据包会直接进入输出队列,或者甚至直接进入硬件队列。
前文中提到过,很多qos设计都需要对vc进行整形。假设在一台路由器上,有2条cir为64 kbit/s的vc共享一条访问链路,每条vc配置在一个单独的点到点子接口上。工程师要为每条vc创建整形队列。ios会在接口上创建唯一的输出队列。图6-14描绘了上述内容。
整型工具根据整形器所使用的队列工具,为每个子接口或vc创建出一组队列。ios会根据物理接口的队列配置,为物理接口创建一组接口软件队列,详见第5章。在图6-14所示案例中,每条vc创建了2组整形队列。两条vc使用同一个接口输出队列。
最终在这个案例中,拥塞会发生在物理接口上。图6-14中配置的两个整形速率之和是160 kbit/s,超出了链路的访问速率(128 kbit/s)。由于接口输出队列会排满,因此有必要为接口输出队列应用队列工具。
限速器与整形器一样,它也需要判断数据包是否在流量契约规定的范围之内。为了实现这个目的,它通过一个测量程序,有效地测量已接收数据包中字节数的积累量。根据测量结果,限速器会对数据包执行以下操作:
允许通过;
丢弃;
重新标记一个不同的ip优先级或ip dscp值。
限速器比整形器稍微复杂一些。与cb整形一样,cb限速也使用令牌桶的机制,以此监测流量,并判断数据包是否超出了流量契约的限制。若你希望cb限速特性来判断一个数据包是否遵从或超出流量契约,你需要使用单一的令牌桶,这点与cb整形一样。你可以认为测量程序将流量分为了两个限速类别。这两个类别分别是遵守(conforming)和超出(exceeding)。
然而,cb限速特性可以根据数据包是否遵守契约,将流量分为3个类别:
conforming(遵守)——数据包在契约之内;
exceeding(超出)——数据包使用了超额突发;
violating(违反)——数据包完全在契约之外。
在配置cb限速特性时,你可以只定义遵守和超出行为,也可以定义3个行为。若你只使用了两个类别,限速器有时也称为“双色(two-color)”限速器,它使用一个令牌桶。若你配置了3个类别,cb限速特性将使用两个令牌桶,也称为“三色(three-color)”限速器(rfc 2697,“a single-rate three color marker”中详细描述了三色限速功能的概念)。
cb限速特性也使用一个称为双速率限速器的概念,即限速器实际监测两个不同的速率,分别是cir(承诺信息速率)和pir(峰值信息速率)。为了达到这一目的,cb限速特性还需要将两个令牌桶的概念与其结合。这种更先进的限速特性使路由器能够以两种速率来执行流量契约,使得运营商为其客户提供了更为灵活的服务。rfc 2698,“a dual-rate three color marker”中详细描述了限速和监测双速率的概念。
接下来按顺序介绍单速率单桶(双色)cb限速特性、单速率双桶(三色)cb限速特性,最后介绍rfc 2698中的概念——双速率三色限速器,即使用两个令牌桶和两个不同的限速速率。
1.cb限速:单速率双色(一个令牌桶)
在使用令牌桶进行限速时,有两点非常重要:首先,令牌会重新装满令牌桶;其次,当限速器需要判断数据包是否遵守契约时,限速器会查看令牌桶,并尝试从中拿出足够多的令牌来允许数据包通过。若令牌足够多,限速器会“花掉”这些令牌,即将其从令牌桶中移除,并以此获得发送数据包的资格。
在限速特性中,一个令牌代表能够发送1字节的资格;在整形特性中,一个令牌代表能够发送1比特的资格。首先来看看cb限速特性如何将单一令牌桶填满。与cb整形不同,cb限速特性不使用有规律的时间间隔(tc),而是在对数据包进行了限速后,将令牌放回到令牌桶中。每次对数据包进行了限速,cb限速特性就会将一些令牌放回到令牌桶中。放回令牌桶中的令牌数量计算公式如下:
(当前数据包到达时间−前一个数据包到达时间)×限速速率 / 8
注意,到达时间的单位是秒,限速速率的单位是bit/s,计算出的结果是令牌的数量。每个令牌代表可以发送1字节的资格,因此公式需要除以8,以便把比特转换为字节。
公式基于的概念很简单——从本质上说,在对数据包实施限速之前将一小部分令牌重新放入桶中,结果最终会根据限速速率填入令牌。举例来说,假设限速速率设置为128 000 bit/s(等于16 000字节每秒)。若在前一个数据包到达后已经过去了1秒,cb限速特性就会向令牌桶中填入16 000个令牌。若在前一个数据包到达后已经过去了0.1秒,cb限速特性就会向令牌桶中填入价值0.1秒的令牌,即1600个令牌。若过去了0.01秒,cb限速特性就会向令牌桶中填入160个令牌。本质上,cb限速特性会根据距离上次填充过去了多长时间,向令牌桶中填入一定比例的令牌。
令牌桶与限速器相关的另一个用途是帮助限速器判断数据包是否遵守流量契约。cb限速特性会将数据包中的字节数与令牌桶中的令牌数进行对比,cb限速特性的决策逻辑跟简单,如下所示。
若数据包中的字节数小于等于(<=)令牌桶中的令牌数,数据包就遵守契约。cb限速特性会将与数据包字节数等量的令牌移出令牌桶,并根据遵守策略对数据包实施操作。
若数据包中的字节数大于(>)令牌桶中的令牌数,数据包就超出契约。cb限速特性不会将令牌移出令牌桶,并根据超出策略对数据包实施操作。
从而,单速率双色限速器所使用的逻辑很简单。令牌桶中会根据数据包的到达时间填入一定比例的令牌。若数据包遵守契约,cb限速特性会转发、丢弃或重新标记这个数据包,并从令牌桶中移除一定量令牌。若数据包超出契约,cb限速特性会转发、丢弃或重新标记这个数据包,但并不会从令牌桶中移除令牌(注意,丢弃遵守契约的数据包是可用的配置选项,但通常没什么用处)。
2.cb限速:双令牌桶(单速率)
当你希望限速器同时支持bc(承诺突发)和be(超额突发)时,限速器就使用两个令牌桶。通过使用两个令牌桶,cb限速特性可以将数据包分为以下3类:
conform(遵守);
exceed(超出);
violate(违反)。
这3个分类的目的是为了让限速器判断数据包是否完全遵守契约、是否使用了超额突发(超出)、是否超出了超额突发量(违反)。
注释:这两个令牌桶没有官方名称,因此在本节中称它们为bc桶和be桶。
与单一令牌桶相同,为了理解cb限速特性如何使用两个令牌桶,就要理解令牌桶的填充和消耗。cb限速特性会在数据包到达时填充bc桶。但在填充bc桶时溢出的令牌不会被白白浪费。当bc桶被填满时,多余或溢出的令牌会填入be桶中。若be桶也填满了,溢出的令牌将无法使用。图6-15描绘了这一基本逻辑。
在工程师配置了bc和be后,cb限速特性使用双令牌桶,算法如下。
1.若数据包中的字节数小于等于(<=)bc令牌桶中的令牌数,数据包就遵守契约。cb限速特性会将与数据包字节数等量的令牌移出bc令牌桶,并根据遵守策略对数据包实施操作。
2.若数据包未遵守契约,且数据包中的字节数小于等于(<=)be令牌桶中的令牌数,数据包就超出契约。cb限速特性会将与数据包字节数等量的令牌移出令牌桶,并根据遵守策略对数据包实施操作。
3.若数据包为遵守契约并也不是超出契约,数据包就违反契约。cb限速特性不会将令牌移出任何一个令牌桶,并根据违反策略对数据包实施操作。
本质上来讲,数据包分为3类:在bc限制之内为遵守;需要更多的字节数,且这些字节数在be突发范围之内为超出;需要的字节数超出be范围为违反。
3.cb限速:双令牌桶(双速率)
使用单速率的双令牌桶cb限速特性提供了一个非常有用的功能。在一段低活跃期后,大量的数据突发会被看作遵守或超出流量契约,但并不会违反流量契约。因为数据流往往是突发的,因此限速器使用突发容量很有道理。
使用双速率的双令牌桶限速特性也提供了突发特性,同时通过使用双速率,cb限速器还允许你设置两个不同的速率门限值。数据包在低速率(cir)限制的范围之内为遵守流量契约。第二个速率门限值——pir——定义的是高于cir的流量速率。超出cir但仍在pir范围之内的数据包为超出契约,但未违反契约。超出pir限制范围的数据包为违反流量契约。
这样一来,该特性的运作机制包含以下内容:限速器如何向令牌桶中填入令牌;在判断数据包是否遵守、超出或违反流量契约的过程中,限速器如何从令牌桶中移除令牌。首先以图6-16为例,它描绘了双令牌桶的填充过程。在本例中,令牌桶分别称为cir桶和pir桶。
它的令牌填充过程与前文介绍的单速率三色限速特性有两点不同。首先,在需要被限速的数据包到达时,填充两个令牌桶。区别在于pir桶是直接填充的,而无需等待cir桶填满后,再由溢出令牌进行填充。这意味着pir桶无需依赖一段非活跃期,来获得更多令牌。还要注意在填充时,溢出的令牌将不再使用。
根据两个不同的速率来填充两个令牌桶非常重要。举例来说,假设你将cir设置为128 kbit/s(16千字节每秒),将pir设置为256 kbit/s(32千字节每秒)。若在下一个数据包到达之前经过了0.1秒,cir桶中会填入1.6千字节个令牌(1/10秒价值的令牌,以字节为单位),pir桶中会填入3.2千字节个令牌。因此相比cir桶,pir桶中有更多的令牌可用。
流程中的第二个不同是限速器如何看待令牌桶中的令牌,并以此判断数据包是否遵守、超出或违反流量契约。这里的逻辑与前文介绍的单速率双令牌桶相同,只是在处理遵守契约的数据包时有些不同。
1.若数据包中的字节数小于等于(<=)cir令牌桶中的令牌数,数据包就遵守契约。cb限速特性会将与数据包字节数等量的令牌移出bc令牌桶,并根据遵守策略对数据包实施操作。cb 限速特性还会将与数据包字节数等量的令牌移出pir 桶。
2.若数据包未遵守契约,且数据包中的字节数小于等于(<=)pir令牌桶中的令牌数,数据包就超出契约。cb限速特性会将与数据包字节数等量的令牌移出pir令牌桶,并根据超出策略对数据包实施操作。
在学习上述内容前,你可能已经猜到了这个基本逻辑。若cir桶中的令牌数量足够多,数据包就遵守契约;若cir桶中的令牌数量不足,但pir桶中的数量足够多,数据包就超出契约;若两个桶中的令牌数量都不足,数据包就违反契约。不太一样的部分在于即使数据包遵守契约,限速器也会从pir桶中移除令牌。
通过案例来理解这个逻辑。假设cb限速特性的配置如下:
cir为128 kbit/s(16千字节每秒);
bc为8000字节;
pir为256 kbit/s(32千字节每秒);
be为16 000字节。
实际上,pir和be的值是cir和bc的两倍。现在假设两个桶中都填满了令牌,这时到达了一系列数据包。由于数据包是同时到达的,填入令牌桶中的令牌数量可能为0,也可能非常少——为了便于讨论,假设这时没有新的令牌填入到任何桶中。
首先会有8000字节的数据包通过限速器,这些数据包遵守契约。这时cir桶中的令牌数量减少为0。同时pir桶中的令牌数量也减少了,从16 000变为8000个令牌。
对于接下来的8000字节数据包,限速器认为它们超出契约,同时从pir桶中移除相应数量的令牌。剩下的数据包违反契约,它们至少要经过一段时间,等待有更多的令牌填入两个桶中。
cb限速特性包含很多小细节,比如它如何判断数据包是否遵守、超出或违反流量契约。为了帮助你准备考试,表6-16列出了cb限速特性使用令牌桶的关键点。
限速但不丢弃
整形器会将超出数据包排队,限速器会将超出数据包丢弃。但限速器提供了一定程度的妥协行为,也就是不丢弃数据包,但会为其打上标记,使之后发生拥塞时,这个数据包更可能被丢弃!考虑图6-17所示案例,r1上启用了限速功能。
如图所示,以虚线表示两个数据包穿越路由器的路径。两个数据包在进入r1时,都标记为dscp af11。r1的限速器判断数据包1遵守契约,但数据包2超出了限速速率。r1的限速器将数据包2重新标记为af13。diffserv建议af13应该与af11属于相同的队列,但af13比af11具有更高的丢弃优先级。在未发生拥塞时,两个数据包都可以穿越网络。若发生了拥塞,数据包2更有可能被丢弃,因为它的dscp值具有更高的丢弃优先级。
限速特性通过重新标记数据包,提供了一个妥协选项。isp为了保护自己的网络,会在拥塞时,积极丢弃被重新标记的数据包,以免网络过载。当网络性能可以负担时,使客户发送更多的流量,也提高了客户满意度。
相同的概念在一定程度上也可以应用在帧中继和atm网络中。帧中继头部包含de(丢弃资格)位,atm头部包含clp(信元丢弃优先级)位。这两个比特位都标志着这个数据帧或信元,在网络拥塞时,具有更高的丢弃优先级。
最后,在重新标记数据包时,你可能实际上需要标记多个字段。举例来说,你可能想要通过ip头部的dscp字段,将数据包从af11重新标记为af13。你可能还希望标记atm clp或802.1p cos字段。当限速器被配置为标记数据包(属于同一限速类别)的多个字段,这个限速器就被称为多行为(multi-action)限速器。