当前位置:首页 > TCP协议拥塞控制研究
北京交通大学毕业设计论文
重传第十四号分组,同时收到十二个重复的ACKS。这时发送窗口再次进入快速恢复阶段,窗口再次减半。紧接着发送端重传后续的丢失分组。再多次的窗口减半。这样一来,它的拥塞控制性能就会大大降低下面这附图是对TCP New Reno在同一窗口丢三个数据包时的仿真:
图4-11 New Reno三个数据包丢失
TCP New Reno与TCP Reno不同之处在于同一个窗口发生多个数据包丢失时并不会多次的退出快速恢复过程,而是等全部的丢失分组重新传送完毕后才会退出快速恢复过程。下面是TCP SACK在一个窗口三个数据
37
北京交通大学毕业设计论文
包丢失的情况,在仿真图中,TCP SACK会有选择的重发所丢失的分组。
图4-12 SACK三个数据包丢失
综上所述,我们完成了对四种TCP版本的仿真(TCP Tahoe、TCP Reno 、TCP new Reno 、TCP Sack),并分析了仿真结果,验证了我们在第二章得出的结论。
完成本次仿真实验,我对TCP协议有了更清楚得认识,并且使我更加
38
北京交通大学毕业设计论文
熟练使用网络仿真器,网络仿真器是一个非常有用的工具,由于我们这次的仿真实验是参考了网络仿真器自带的一些程序,所以我们在看程序怎样丢包的过程中,我们需要加入自己的一些调试程序:由于我们设定TCP的丢包方式是droptail,已经知道丢失是因为路由器缓存队列长度涨满,这样我们就必须加入一些调试程序使我们能在实验结果中看到是怎么丢包的,所以我们在drop.cc文件中加入了调试命令:
void DropTail::enque(Packet* p) {
double now=Scheduler::instance().clock();
hdr_ip *iph=hdr_ip::access(p);
int fid=iph->flowid(); q_->enque(p);
//printf(\
//printf(\ if (q_->length() >= qlim_) { if (drop_front_) { /* remove from head of queue */ Packet *pp = q_->deque(); drop(pp); } else { q_->remove(p); drop(p);
}
printf(\
printf(\
}
39
北京交通大学毕业设计论文 }
经过这样的调试,我们可以在实验中看到如下数据:
图4-13 调试数据
从这张图中我们各数据包在何时丢失,是哪一个FTP源造成的丢失,以及因何原因造成的数据包的丢失。
这次仿真实验让我更深层次了解TCP拥塞控制的原理,通过对它们的比较,我们知道TCP New Reno 与TCP SACK 有着更良好的性能,TCP New Reno 不需要修改协议本身,使得改进动作比较小,而TCP SACK 虽然拥塞性能好,但需要修改协议本身。
40
共分享92篇相关文档