m0n0对于m0n0 WebGUI流量控制的理解

m0n0提供的流量管理软件为ipfw,我们并不需要了解该软件的机理,所以了解该软件并不妨碍我们对流量控制的理解。通过对自动化生成的队列和管道,我们可以简单的发现一个共同点,就是“队列共用管道,且该管道队列权值和为100”。
  
   通过实践总结和理论分析,我们对于“管道”和“队列”会有如下认识

   “管道” 就是一个网络带宽划分的模型,一个网络的带宽可以划分为任意个管道。管道是逻辑的而不是物理,所以管道在数值上叠加没有实际意义。管道具有独立性,一个管道在逻辑上是独立的,不会和任何其他的管道叠加。

   "队列"就是“管道”内TCP/IP数据包转发机制的模型,一个管道内充满了队列永不停息。队列在管道中的逻辑行为只有2种,就是upload和 download,但是这两种行为只是逻辑上的相对意义,你定义了两种行为的其中之一,另一个行为才会存在。比如定义了“上”的方向,自然就有了“下”的 方向,反过来亦然。
  
    对于队列组建方式m0n0提供的非常灵活,有三个影响队列的参数是权重,延时,slot长度。首先讲队列的slot概念。 slots是单个队列的长度,这个可以任意设定,主要取决于你的CPU和网卡的处理能力,当然还有你的内存。原则上理解,单个队列越长,处理起来效率就会 越低,CPU占用越高,内存使用越大,但是网速肯定会提高,因为潜在的缩短了TCP/IP包流通的时间。

   单位长度TCP/IP流通时间=(单队列组建+单队列转发+单队列处理+延时)*队列总数

其中括号中的时间数值受到单个队列长度影响较小,所以,队列总数成为影响时间的关键。由于数据流永远存在的,所以,slots值一旦确定,m0n0就会自动填充当前队列到达slot值,然后再建立下一个队列,长度依然是slots值。

    对于单个队列的每个数据槽按何种次序填充则依据权重进行分配,例如:某个管道内队列定义了5个A权重50,B权重20,C权重15,D权重10,E权重 5。队列slots=100,那么权重50的A数据包会自动填充100单位的前50个单位,从51位开始填充权重为20的B数据包,从71位开始填充权重 为15的C数据包,到达队列的86位开始填充权重为10 的D数据包,最后填充E数据包直到长度实现100。然后依次建立下一个队列。
                  简单的排列顺序:100=50+20+15+10+5。

     也就是说,管道内的数据包依据流量规则被打上标签以后,根据权重自动组成队列。这样,权重高的数据被优先传输,并且占用更大的管道带宽,权重最低的数据被最后处理,并占用最低的管道带宽。

    延时就不用说了,上面的公式可以看得出延时的作用,这个主要用于网络非常拥堵的状况,人为的架设信号灯提供CPU更长的分时处理机会。

    到这里,我们虽然理解了管道,队列,但是 队列和管道究竟如何设计?这是一个难点,这是因为,队列规则的最终生成其实是整个流量管理模型设计最后的产物,也就是说,你必须在写出流量规则以前要明白 你要建立什么规则,需要几个管道,管道如何使用这3个问题。这是至顶向下的设计,然而WebGUI却要先写队列再写规则,造成了理解的困难。了解这些后我 们基本上会把注意力集中在管道,队列,规则的设计上。
  
    以 下是就是三种流量控制的管理思路:
   
      1.针对上网行为的流量控制设计
      2.针对特定应用的流量控制设计
      3.针对网络协议的流量控制设计

你可能感兴趣的:(网络应用,网络协议)