RED算法其实很简单的,简单说就是防止网络拥塞 的,一般来讲它是端到端的TCP拥塞控制的补充,用于路由器的居多,因为端到端的拥塞控制仅仅负责一条虚电路,额外可以探测网络通路情况,但是却不能保证 每个端点的这种控制行为是一致的或者使能的,因此必须存在一种类似于监督机制的拥塞控制机制,在路由器上监督和管理一切数据包,而不能天真的相信TCP端 到端拥塞控制会做的很好,事实证明,它做的并不是很好。

路由器的QOS算法有很多,包括很多队列机制,这里由于不是重点就不说了,RED算法是与之相似但不同的一个,它旨在能预测到网络将要拥塞,而提前采取丢 包动作,而不是等到网络实际拥塞了以后再采取措施,这里的方式和操作系统的内存置换策略有点类似,因为在操作系统内核中也是需要提前预知内存将不足,而不 是到实际内存不足的时候再腾地方,这是一种以保障持续运行为目的的策略,RED算法也是,典型的实现就是设置一个经验性的阀值,一旦剩余内存低于这个阀值 (对于内存置换算法)或者网络包的总长度大于这个阀值(对于RED算法),那么就认为必须采取措施了,采取措施的结果就是统计值落入这些阀值之下,但是这 样好吗?虽然可以确保系统不会撑死,但是会引起系统剧烈抖动,以内存置换为例,剩余内存刚小于阀值的时候就被发现了,然后去置换内存页面,但是还没有置换 几个页面,剩余内存就大于阀值了,毕竟发现的早,剩余内存还没有到稀缺的地步,此时就停止了置换,在系统几乎满载的情况下,然后没过一会儿,剩余内存又小 于阀值了,如此反复...网络包的例子就不举了。

实际上,在应用中是用两个阀值而不是一个阀值进行管理的,两个阀值可以有效防止抖动的发生将震动从一个点扩展到了一个区间,一个阀值的算法会引起抖动是因 为数值的课徘徊路径太短,就是一个点,一个点只有左右两个自由度,太左了就要右一点,反之就要左一点,没有缓冲的余地,而两个阀值有效的拉长了数值的徘徊 区间,在此区间内数值是可以徘徊的,徘徊的过程是系统已经出问题但是还没有到解决问题的时候的意思,体现了一种积累的效果,同时也是一种懒惰的体现。下面 看一下RED算法:
Avq=0,Count=-1;
当有分组到达时:
[
If( 队列空)