在学习了思科的相关课程以后,我发现自己懂的实在是太少了,我们经常讨论的RouterOS的限速问题,实际上是网络优化的一部分。我们都知道Cisco培训体系是有强大的理论作为基础的,做优化只有先找到理论依据,才能有条不紊的进行配置,无论是在RouterOS上面还是Cisco系列路由器上面。今天我们就来说说限速的理论依据。
“限速”只是民间的一种说法,简单的理解为把某一类流量的带宽给限制住,从而让另一类流量有足够多的带宽。其实,它有一个很好听的名字,QoS(服务质量Quality of Service),它不是互联网领域的专有名词,它是各种存在服务供需关系的场合中普遍存在的概念,他评估服务方满足客户需求的一个能力。在因特网中,QoS所评估的就是网络投递分组的服务能力。由于网络提供的服务是多样的,因此对QoS的评估可以基于不同方面。通常所说的QoS,是对分组投递过程中可为延迟、延迟抖动、丢包率等核心需求提供支持的服务能力的评估。
在一个正常的网络环境中,出口带宽的容量与内网对外访问的无限需求构成了路由器上最主要的矛盾。传统的路由器在处理数据包的原则是先来先转发,一旦在某一时刻数据包到达路由器的速度超过了路由器转发的速度(即路由器向外发送的速度,严格的说还需要加上路由器处理数据包的时间,很小,忽略不计。通常是由于 外网带宽 < 内网带宽 造成的),路由器首先考虑的是将这些数据包存起来,再发送。
下面我们来做一系列的假设
假设一:到达路由器的流量是断断续续的,而且平均带宽不超过出口带宽,那么存储转发的效果非常明显,理论上来讲它可以不遗漏任何一个数据包,所有需要转发的数据包都可以通过路由器来转发;
假设二:到达路由器的流量也是断断续续的,但是平均带宽超过了出口带宽,那么路由器缓冲区的数据包会越来越多,总有一刻会超出缓冲区的大小,于是便产生的丢包;
基于上面那两个假设,我们大致上就会明白路由器产生丢包的根本原因和路由器中的缓冲区(实际上就是我们所谓的队列)。
前面已经说了,QoS是评估服务方满足客户需求的一个能力,它在有限的条件下让尽可能多的人满意。因此,前面我们提到的队列就应该不止一条,就是按照需求可以存在多条队列。我再举个简单的例子,在有些低级公路的收费口,我们可以看到只有一个等待收费的队列,这样处理起来就像是先到先处理,而在一些高级的公路的收费口,我们可以看到有很多条等待收费的队列,而且会存在一些专用或者警用车道,防止前面车阻塞了以后耽误了公务。在我们路由器中也是一样的道理,我们按照需求设置了不同的队列,同时可以设置这些队列的优先级,来判断哪些数据包可以优先被处理。
我们根据上面的那个公路收费假设,再做如下假设
假设一:我们的入口车道有3条,而出口车道只有1条。这时,我们可以直观的感受到拥塞的产生,当3条入口车道同时到达的时候该如何处理呢?最通常采用的方法是轮询,每个次(假设每辆车通过的时间相同均为1s)每个车道走一辆车,这样不断的轮询下去,这就是没有设置优先级没有设置带宽的情况,这也是最公平的情况。
假设二:我们入口车道还是3条,但是有1条是专用车道,而出口车道还是只有一条。这时,这条专用这道只要有车到达,其他车道就立即停止,让专用车道的车先过,从而保证的重要的事务,这就是我们在设置队列的时候添加了优先级。但是如果专用车道一直有车通过,那么其他两个车道的车就一直无法通过这个收费站,这样肯定会造反的。
假设三:基于假设二,我们就要限制专用车道,我限制专用车道的方法是在一段时间(比如10s)内允许通过的数量为4辆,剩下的6辆车的容量留给普通车道,这样不就解决了剩余两个车道一直没办法通过的情况吗!这就是我们在网络设备中设置了带宽限制以后的情形。
关于带宽限制,也有专门的名词来描述,即最小保证带宽和最大限制带宽。这里要说明一下,在routeros中,是可以对队列进行带宽限制的,最小保证带宽是前提,是不论优先级的,比如在上面得假设三中,我们设置剩下的两个普通车道都是每10秒通过3辆,在某一时刻,普通车道1通过速率是3辆/10s,普通车道2的通过速率是2辆/10s,专用车道的通过速率是5辆/10s,他们的最小保证通过量分别是3辆,3辆,4辆,那么在下一时刻,同时来了两辆车,分别是普通2车道和专用车道,那么收费站还是应该让普通2车道的车先走,虽然它的优先级比专用车道要低!而最大限制带宽是保证,超过最大限制带宽时,无论你的优先级再高,routeros也会把超过的部分给停下来!
PS:顺便说一下,一个数据包或者数据帧到达一个网络设备的某一个物理端口时,总是有先后顺序的,一个端口的速率的时候其实是说它的发包速度,千兆网卡发包的速度是百兆网卡的10倍。
预告:下一篇我将说明如何去标记以及如何有效应用在routeros中!