在Internet中最简单也最普遍的队列管理机制就是DropTail。当一个数据报到达队列时,就把数据报放到队列中等待被传送,但由于队列长度是有限的,因此如果数据流太大,而队列没有空间去暂存这些新到的数据报,就会把队列最尾端的数据报丢弃,这样的管理机制就叫做DropTail。很多时候,DropTail队列管理机制会与FIFO(First In First Out)相结合,整个运作方式为:数据报传送的顺序与封包进入队列的顺序相同,先进入队列的封包先传送出去,后进入队列的封包较晚传送出去。如果队列长度超过暂存空间的大小,就会把队列最尾端的数据报丢弃。
DropTail在丢弃数据报时,并不会去考虑要丢弃的数据报属于哪个数据流,只是单纯的把超过暂存空间大小的数据流丢弃,因此DropTail队列管理机制的最大优点就是实际操作简单。但是,有利有弊,正是由于这个特性,使得队列在相当长的时间内处于充满或几乎充满的状态。而队列管理机制最重要的目标之一是降低稳定状态下队列的长度,因为端点到端点的延迟主要由队列中排队等待造成的。
此外,DropTail容易造成TCP全局同步(TCP Global Synchronization)问题。由于Internet 上的数据流都具有突发性,到达路由器的封包也往往是突发的。如果此时队列处于充满或几乎充满状态,就会导致在短时间内连续大量的丢包。而TCP数据流具有自适应特性(Adaptive),发送端发现封包丢失就会急速降低传送速度,于是网络拥塞情况得到缓解。但发送端在发现网络不再拥塞后又开始增加发送速度,最终又造成网络拥塞。这种现象就像一个循环,周而复始的进行下去,致使网络长期处于链路利用率很低的状态,降低了整体的吞吐量,这正是传说中的“TCP全局同步”现象,这个现象,我们会在后面的实验中通过网络仿真产生的数据和图形进行验证。
除了DropTail外,另外两种在队列满时用得比较多的队列管理机制是Random Drop 和 Drop Front。当队列满时,前者从队列中随机找到一个数据报丢弃,让新来的数据报进入队列;后者从队列前端把数据报丢弃,以便新来的数据报进入队列。但这两种队列管理机制仍然存在“满队列”问题。由于这几种方法都是在队列满时被迫丢包,因此被称为被动式队列管理。
---------------------
本文来自 jianwushuang 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/jianwushuang/article/details/6208591?utm_source=copy