论文部分内容阅读
TCP应用于无线环境时,由于丢包多是由无线误码引起而不一定是拥塞丢包,其拥塞控制算法出现了不适应性,因此需要新的算法来修正。为了在Windows环境下测试新算法,我们需要修改TCP协议栈源码,然而系统本身的TCP协议栈是非开放源码的,因此我们需要开发一个运行于Windows的TCP协议栈。这篇论文中主要介绍了我们开发TCP协议栈的所使用的技术、具体方法和实现的过程,协议栈各个部分的流程设计、每个模块的功能实现与整体设计实现,以及功能测试。Windows的驱动开发套件(DDK)中对协议驱动开发有较为详细地说明与规定,依照DDK中的说明,我们可以开发一个协议驱动其下层接口符合网络驱动接口规范(NDIS),则无需关心下层网卡相关驱动;上层接口符合传输驱动接口(TDI)规定,则无需关心上层应用。因此,我们选择NDIS和TDI作为我们整体上下层接口的规范。TCP协议向应用层提供了面向连接的服务,以确保网络上所传送的数据包被完整、正确、可靠地接收。一旦数据有损伤或丢失,则由TCP协议负责重传,应用层不参与解决。实现这个复杂的过程,需要大量代码支撑。我们根据TCP原理设计出了主要数据结构、上下层接口和功能模块,然而具体实现上仍然举步维艰。实际上,网上有很多的开放TCP协议栈源码,如BSD TCP/IP协议栈、uC/IP、LwIP、uIP、TinyTcp协议栈等,于是我们想到了移植。根据多方面比较分析,最后我们选择了Linux Kernel 2.4.20.48的TCP协议栈源码作为我们的参考。由于Linux系统的机制与Windows系统有很大的差别,绝大部分代码是无法直接移植的。不过根据该协议栈的实现流程,我们设计出了自己流程,结合DDK,找到了进一步工作的途径。我们所开发的TCP协议栈大致可以分为以下几部分:TDI接口,NDIS接口,TCP上层接口,TCP下层接口,发送模块,接收模块,定时器和内存管理。每个部分都有其特定的功能,进行不同的操作。其中,TDI接口是TCP与上层应用交互的接口,NDIS接口是TCP与下层驱动交互的接口,发送模块完成整个发送数据流程,接收模块完成整个接收数据流程,定时器控制其相关操作的等待时间,内存管理模块使缓存的使用更有效。这些部分相互协作,构成了整个我们的TCP协议栈。我们开发的TCP协议栈仍不完善,还需要进一步修改,不过今日之成果已得来非易,值得我为之骄傲,同时也希望不久的将来能有更大的收获。