首页 TCP拥塞控制原理演示系统

TCP拥塞控制原理演示系统

举报
开通vip

TCP拥塞控制原理演示系统                      本 科 毕 业 设 计 题目:TCP拥塞控制原理演示系统 姓    名       李  强         学    院   信息与电气工程学院  专    业     网络工程        年    级         2008级        学    号       20082212385    指导教师       李 阿 丽        2012 年 5月 23日 独 创 声 明 本人郑重声明:所呈交的毕业论文(设计),是本人在指导老师的指...

TCP拥塞控制原理演示系统
                      本 科 毕 业 设 计 题目:TCP拥塞控制原理演示系统 姓    名       李  强         学    院   信息与电气工程学院  专    业     网络工程        年    级         2008级        学    号       20082212385    指导教师       李 阿 丽        2012 年 5月 23日 独 创 声 明 本人郑重声明:所呈交的毕业论文(设计),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 外,本论文(设计)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 此声明的法律后果由本人承担。 作者签名:        二〇一  年  月  日 毕业论文(设计)使用授权声明 本人完全了解鲁东大学关于收集、保存、使用毕业论文(设计)的规定。 本人愿意按照学校要求提交论文(设计)的印刷本和电子版,同意学校保存论文(设计)的印刷本和电子版,或采用影印、数字化或其它复制手段保存论文(设计);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布论文(设计)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定) 论文作者(签名):          二〇一  年  月  日 毕业设计选题 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 姓名 李强 性别 男 学院 信息与电气工程学院 年级 2008级 学号 20082212385 设计题目 TCP拥塞控制原理演示系统 课题来源 教学 课题类别 应用研究 选做本课题的原因及条件分析: TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,在大三学习计算机网络时了解到,当网络传输量过大时,会出现丢包的现象,而且当接受方接受到报文,发送确认报文时,会发生三个重复的确认报文,这就需要TCP拥塞控制原理来解决这些问题,TCP拥塞控制分为了四个阶段,既慢开始,拥塞避免,快重传,快恢复,本次课题就是要把TCP拥塞控制原理形象的演示出来,当出现丢包,或者重复确认报文时做出怎样的处理,在学习计算机网络时对这一段的知识比较感兴趣,所以选择了这个项目。 指导教师意见: 本系统设计了一个TCP拥塞控制原理的演示,学生可以借助这个系统来更好地学习计算机网络中传输层TCP的协议,了解出现三个重复的确认报文和丢包的时候系统是如何处理的,选题内容较为合理,有较好的研究和应用价值,符合设计相关的要求,同意选题。                                         签名:           年    月    日 院(系)毕业论文(设计)领导小组意见:                                 (公章)           年    月    日 毕业设计任务下达书 学院 信息与电气工程学院 专业 网络工程 学号20082212385  姓名 李强 现将毕业设计任务下达书发给你。毕业设计任务下达书内容如下: 一、 毕业设计题目     TCP拥塞控制原理演示系统 二、 主要内容 (1) 本课题的任务是熟悉TCP拥塞控制机制,并适当形式演示其基本原理 (2) 该系统只需向用户提供AIMD和Slow Start两部分的原理演示。 (3) 程序模块功能设计,完成各个功能所需代码。 三、 具体要求 (1) 了解TCP拥塞控制原理; (2) 熟练掌握TCP拥塞的四个过程的处理方法; (3) 当达到门限值和出现三个重复的确认报文丢包时的窗口变化; (4) 说明所使用编程语言中所用到的方法和函数; 四、 主要参考文献 [1] 谢希仁. 计算机网络(第四版)[M]. 北京:电子工业出版社. 2006 [2] Larry L. Peterson等著,叶新铭等译,计算机网络,机械工业出版社,2001.6 [3] Bruce Eckel,Java 编程思想,机械工业出版社,2005 五、 进程安排 阶  段 起 止 日 期 主  要  内  容 准备开题阶段 2012.1.18-2012.3.9 搜集材料,学习相关知识 设计实现阶段 2012.3.10-2012.5.20 划分功能并且实现相应模块功能,检测和试运行 说明书完成阶段 2012.5.11-2012.5.5 根据设计撰写设计说明书,定稿 答辩阶段 2012.5.26-2012.5.2713 准备答辩材料 六、 毕业设计任务下达书于  年  月  日发出。毕业设计应于  年  月  日前完成后交指导教师,由指导教师评阅后提交毕业设计答辩委员会。 七、 毕业设计任务下达书一式两份,一份给学生,一份留学院存档。                     指导教师:          签发于      年  月  日               分管院长:          签发于    年  月  日 毕业设计开题报告 姓名 李强 性别 男 学 院 信息与电气工程学院 年级 2008级 学号 20082212385 预计完成时 间 2012.6.1 设计题目 TCP拥塞控制原理演示系统 课题来源 教学 课题类别 应用研究 指导教师 李阿丽 毕业设计实施 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 : 第一阶段:开题 熟悉TCP协议规范; 第二阶段:综合分析 熟悉拥塞控制的基本原理 第三阶段:修改完善设计 TCP拥塞控制原理演示系统框架设计 第四阶段:完成设计 TCP拥塞控制原理演示系统设计与实现 第五阶段:完成系统设计任务说明书 设计主要内容(提纲): 1、TCP拥塞控制慢开始,拥塞避免,快重传,快恢复四个阶段的演示 2、慢开始和拥塞避免的界面展示 3、程序模块功能设计,完成各个功能所需代码。 指导教师意见: 学生对于TCP拥塞控制原理演示系统所采用的设计平台VisualStudio2008较为熟练,基本可以实现演示系统功能,整个实施方案过程合理清晰,步骤合理,阶段任务明确;设计内容完整、科学,符合设计的相关要求,已经具备了开题的条件,同意开题。 签名:                                                         年    月    日           年      月      日 学院毕业论文(设计)领导小组意见:                                                     (公章)                                                         年    月    日 (签章)          年      月      日 毕业设计结题报告 姓名 李强 性别 男 学院 信息与电气工程学院 年级 2008级 学号   20082212385 设计题目 TCP拥塞控制原理演示系统 课题来源 教学 课题类别 应用研究 指导教师 李阿丽 本课题完成情况介绍(包括研究过程、实验过程、结果分析、存在的问题及应用情况等。) 经过TCP拥塞控制原理的不断发展,网络技术的不断进步。拥塞控制方法也变得多种多样, 在研究期间,我查看了有关资料和相关书籍,和不断的努力,最终完成了课题的要求,通过这次毕业设计,我对TCP拥塞控制原理有了更深的认识,对拥塞控制四个算法也基本上参透了更多,我对计算机网络这一学科产生了浓厚的兴趣,相信对以后的学习会有很大的帮助,但是该系统还有很多不足之处,有待改进。 指导教师意见: 本设计基本实现了需求阶段所定义的功能,用户可以比较直观的查看拥塞控制原理演示信息,并实现了一定的交互,同时实现了三个重复确认报文和丢包的的情况,使读者比较方便的了解该系统功能,清晰明白的掌握TCP拥塞控制的四个过程,同意结题。 签名:      年    月    日     学院毕业论文(设计)领导小组意见: (公章)                                                         年    月    日 设计成绩 毕业设计成绩评定表 学院:信息与电气工程学院                        学号:20082212385 姓  名 李强 设计总成绩: 设计题目 TCP拥塞控制原理演示系统 指 导 教 师 评 语 评定成绩:          签名:                  年    月  日 评 阅 人 评 语 评定成绩:        签名:                      年  月  日 答 辩 小 组 评 语 答辩成绩:        组长签名:                  年  月  日 注: 1、论文(设计)总成绩=指导教师评定成绩(50%)+评阅人评定成绩(20%) +答辩成绩(30%) 2、将总成绩由百分制转换为五级制,填入本表相应位置。 目 录 1 引言    1 2 开发平台与技术的选择及介绍    2 2.1 开发环境的介绍    2 2.1.1 硬件环境    2 2.1.2 软件环境    2 2.2 TCP拥塞控制简介    2 2.3 开发平台简介    3 3 需求分析及可行性研究    3 3.1 需求分析    3 3.1.1 功能要求    3 3.1.2 TCP/IP协议和拥塞控制简介    3 3.1.3 TCP拥塞控制的四个阶段简介    5 3.1.4 性能要求    8 3.2 可行性研究    9 3.2.1 技术可行性分析    9 4 系统功能模块分析    9 4.1 主框架具体功能    9 4.2 各功能模块详细设计    10 4.2.1 按钮的设计理念    10 4.2.2 time1函数    10 4.2.3 文字同步演示窗口    11 4.3 设计不足之处    11 5 程序运行结果及演示图片    11 5.1 拥塞控制中的慢开始阶段    11 5.2 拥塞避免阶段    13 6 结束语    15 参考文献    15 致 谢    16 附录A    16 TCP拥塞控制原理演示系统 李强 (信息与电气工程学院,计算机网络专业,2008级2班,20082212385) 摘  要:TCP的拥塞控制由“慢启动”和“拥塞避免”组成,后来TCP Reno版本中又针对性的加入了“快速重传”、“快速恢复”算法,再后来在TCP NewReno中又对“快速恢复”算法进行了改进,近些年又出现了选择性应答(SACK)算法,还有其他方面的大大小小的改进,成为网络研究的一个热点。本文根据这四个过程实现了一个演示系统来进行模拟。系统采用C#编写,通过动态图形界面形象地演示报文传送过程,使TCP拥塞控制原理演示变得简单直观。   关键词:慢开始;拥塞避免;快重传;快恢复;演示系统 The Demonstration System of TCP Congestion Control Abstract:TCP congestion control from " Slow start" and " Congestion avoidance" composed of TCP Reno versions later then targeted to join the " Fast retransmit", " Fast Recovery"algorithm, and then later again in the TCP NewReno in the" fast recovery "algorithm has been improved in recent years has emerged selective acknowledgement algorithm, as well as other large and small improvements become a research hotspot network. The system, which is written in C#, makes the demonstration of the TCP congestion control principal simple and intuitive by vividly demonstrate the packet transmission process in dynamic graphical interface. Key words: Slow start; Congestion avoidance; Fast retransmit;Fast Recovery; System 1 引言 TCP,即传输控制协议,是目前网络上使用的最多的传输协议,我们知道,整个互联网的体系结构是以IP协议提供的无连接的端到端的报文传输服务为基础,在这种体系结构下,端到端的数据传输需要自己来保证数据的可靠性,TCP所作的就是这样的工作,它提供了端到端的数据可靠性的传输,当然,在互联网上没有100%的可靠性保证。正是因为TCP的贡献,所以自从提出后就成为了网络的标准传输协议。 TCP网络协议本身是一个复杂的抽象的交互过程,其行为由大量的参数(定时器,窗口大小,重传次数,应答的方式等)来确定,甚至不同的参数组合定义了不同的网络协议,很难通过静态的文字或者图表描述让大家理解网络原理与协议的含义和精髓,本次毕业设计希望通过采用C#编程,通过动态的演示效果和配置灵活的软件和多媒体的形式,动态直观的演示计算机网络中的 TCP拥塞控制的原理和工作过程,希望为以后学习计算机网络中传输层的学者提供一个更加直观简单的参考。 2 开发平台与技术的选择及介绍 2.1 开发环境的介绍 本次系统设计的是一个TCP协议的可视化,它面对的是所有的学习计算机网络的有志之士,在一个立体的环境中使大家可以直白的理解TCP拥塞控制原理,因为选择的是VisualStudio2008这款功能强大的开发软件,因此对硬件的要求就就会比较高,关于硬件将会在下面给大家详细的介绍。 2.1.1 硬件环境 开发该系统运用visual studio2008应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。 处理器:Intel Pentium PIII或更高处理器。 内存:1GB或更高。 2.1.2 软件环境 选择好的操作系统和好的编程语言是系统优劣的关键,我们要求系统在尽可能多的环境下运行,故选择Windows XP或者Windows 7系统。因为VisualStudio2008具有友好的集成开发界面、面向对象的可视化开发模式、良好的数据库及多媒体应用支持以及高效的软件开发与程序运行,功能更大,开发效率更高,不仅是网络环境下的优秀前端开发语言和工具,也是服务器端Web编程的优秀工具。加之本人对本系统的操作最为熟练,所以选择该平台为开发环境。 操作系统:Windows XP或Windows 7。 开发工具:VisualStudio2008。 2.2 TCP拥塞控制简介 TCP协议主为了在主机间实现高可靠性的包交换传输协议。本文将描述协议标准和实现的一些方法。因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但是对于政府和商用部门也适用。TCP是面向连接的端到端的可靠协议。它支持多种网络应用程序。TCP对下层服务没有多少要求,它假定下层只能提供不可靠的数据报服务,它可以在多种硬件构成的网络上运行。下面的图是TCP在层次式结构中的位置,它的下层是IP协议,TCP可以根据IP协议提供的服务传送大小不定的数据,IP协议负责对数据进行分段,重组,在多种网络中传送。 TCP的上面就是应用程序,下面是IP协议,上层接口包括一系列类似于操作系统中断的调用。对于上层应用程序来说,TCP应该能够异步传送数据。下层接口我们假定为IP协议接口。为了在并不可靠的网络上实现面向连接的可靠的传送数据,TCP必须解决可靠性,流量控制的问题,必须能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,同时TCP必须解决连接问题,这样TCP才能称得上是面向连接的,最后,TCP也必须能够解决通信安全性的问题[2]。 2.3 开发平台简介 开发平台选用了VisualStudio2008,因为TCP拥塞控制的过程较抽象,希望采用可视效果比较好的开发平台,所以思索再三,选择了VS,再者VS的几个版本来说,VisualStudio2008是兼容性比较强的系统,而且编程设计也更加的人性化,使用起来也更加的方便,所以选用VisualStudio2008来做为本次开发的平台。 3 需求分析及可行性研究 3.1 需求分析 需求分析是在学习软件工程课程时了解到的一项规划分析,设计软件之前的必做功课,需求分析的质量对系统软件开发的影响是巨大的、总体性的,高质量需求对项目的制作开发往往起到意想不到的效果,所以需求分析必不可少。如果需求分析出现纰漏,在后续阶段改正需求分析阶段产生的错误将付出巨大的时间和空间的代价。 3.1.1 功能要求 这个程序要实现: (1) 程序要求对TCP拥塞控制的几个阶段进行分别的演示。 (2) 程序要求有开始,暂停,继续,停止等按钮用以方便程序的演示。 (3) 在演示框的右侧有和演示同步的语言描述方便大家对程序的理解。 (4) 通过对TCP拥塞控制的可视化让人们更加深入的了解计算机网络中的TCP协议。 (5) 要求整个过程简单明了,不繁冗拖沓,界面美丽大方。 3.1.2 TCP/IP协议和拥塞控制简介 TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP主要包括以下协议: IP:网间协议(Internet Protocol),负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。 ICMP:网间报文控制协议(Internet Control Message Protocol),此协议处理网关和主机的差错和传送控制。 TCP: 传输控制协议(Transmission Control Protocol),这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。 TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。 TCP提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 的首部增大很多,还要占用许多的处理机资源。  因为在本设计中主要是完成TCP的拥塞控制所以下面主要介绍一下TCP的拥塞控制的一般原理和它所起到的作用 (1)在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)。 (2)出现资源拥塞的条件:             对资源需求的总和 > 可用资源    (3)若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。 (4)拥塞控制所起到的作用如图3.1所示                      图3.1  拥塞控制所以到的作用 拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问题。当前网络正朝着高速化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因。在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因。这点应特别引起重视。 (5)当网络出现拥塞时,无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法如图3.2所示。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。 (6)当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。 由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大 [8]。                       图3.2拥塞控制整个过程 3.1.3 TCP拥塞控制的四个阶段简介 (1)慢开始阶段(slow start):发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止(如图3.3)。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。 最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下: 开始 ---> cwnd = 1 经过1个RTT后 ---> cwnd = 2*1 = 2 经过2个RTT后 ---> cwnd = 2*2= 4 经过3个RTT后 ---> cwnd = 4*2 = 8 如果带宽为W,那么经过RTT*log2W时间就可以占满带宽。                         图3.3 慢开始演示 (2)拥塞避免阶段(congestion avoidance):当发现超时或收到3个相同ACK确认帧时,则表示有丢包事件,此时网络已发生拥塞现象,此时要进行相应的拥塞控制(图3.4所示)。将慢开始阈值设置为当前拥塞窗口的一半;如检测到超时,拥塞窗口就被置为l。如果拥塞窗口小于或等于慢启动阈值,TCP重新进人慢开始阶段;如果拥塞窗口大于慢启动阈值,TCP执行拥塞避免算法。                       图3.4  拥塞控制过程 从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。 上面讨论的两个机制都是没有检测到拥塞的情况下的行为,那么当发现拥塞了cwnd应该这样去调整。 首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据是它重传了一个报文段。上面提到过,TCP对每一个报文段都有一个定时器,称为重传定时器(RTO),当RTO超时且还没有得到数据确认,那么TCP就会对该报文段进行重传,当发生超时时,那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失,并且后续的报文段也没有了消息,在这种情况下,TCP反应比较“强烈”: (1) 把ssthresh降低为cwnd值的一半。 (2) 把cwnd重新设置为1。 (3) 重新进入慢启动过程。 从整体上来讲,TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小。可以看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包,那么立即减半退避,可以给其他新建的流留有足够的空间,从而保证整个的公平性。 其实TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有: ① 把ssthresh设置为cwnd的一半 ② 把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3) ③ 重新进入拥塞避免阶段 (3)快速重传阶段(fast retransmit):当TCP源端收到到三个相同的ACK副本时,即认为有数据包丢失,则源端重传丢失的数据包,而不必等待RTO超时。同时将ssthresh设置为当前cwnd值的一半,并且将cwnd减为原先的一半(如图3.5所示)。                         图3.5快速重传阶段演示 (4)快速恢复阶段(fast recovery) :当"旧"数据包离开网络后,才能发送"新"数据包进入网络,即同一时刻在网络中传输的数据包数量是恒定的。如果发送方收到一个重复的ACK,则认为已经有一个数据包离开了网络,于是将拥塞窗口加1 [8]。 3.1.4 性能要求 首先要求程序要完全可靠,可以应付种种由于系统问题产生的错误。要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。 程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。 开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。 要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。并且不发生内存泄漏之类影响系统运行的错误事件。并且要求易于维护及扩展。所以应该采用模块化开发,各个模块之间不要有太多的联系,以免维护困难。 3.2 可行性研究 3.2.1 技术可行性分析 (1)首先搭建毕业设计所需要的软件平台,软件使用的VisualStuidio2008,做好程序运行的前期准备。 (2)进行开发前的准备,做好需求分析,熟悉VisualStuidio2008的功能以便开发,同时对TCP拥塞控制慢开始,拥塞避免,快重传,快恢复4个过程进行深入的了解 (3)深入了解软件运行环境和TCP四个过程之后,所要做的工作就是编出程序,演示出运行的过程,所以这个课题在技术上是完全可以实施的。 4 系统功能模块分析 4.1 主框架具体功能 为了更好的把TCP协议中的拥塞控制四个算法形象展现出来,需要有一个优美的窗口,在窗口中实现拥塞控制的各个阶段的发送窗口的变化,然后有几个按钮控制整个演示过程的开始,停止,暂停,继续,使得动态演示更加的完美,在演示的同时要在演示窗的旁边有同步的文字解释,使得整个过程中的每一个步骤更加容易理解,这就是本课题的总体设计结构和大概的综述。 本设计主要由以下四个部分组成:慢开始部分,拥塞避免部分,快重传部分,和快恢复部分,实现四个部分的算法大体一致。是使用一个switch语句来模拟一个时钟计时器,用像素点来定位滑动窗口的位置,再通过一个循环函数不断对像素点的横坐标进行不断的加点和减点,来控制窗口的移动效果,产生好似运动的形象过程,这个系统是由演示部分,控制按钮和文字解说三个部分组成,三个部分相互联系构成一个有机的整体,给TCP协议的拥塞控制的可视化一个完美的诠释。 还需说明的是,快重传算法和快恢复算法在实际过程中是搭配着使用,根据不同的网络拥塞来选择使用何种算法,当网络拥塞情况严重时,会首先考虑快重传算法,但是快重传算法当出现三个重复的确认报文时,就会从慢开始阶段进行指数增加,这样恢复到原来的发送窗口的时候,会经历较长的时间,所以现如今网络技术发达,基本上快重传已经废弃不用了,多数当出现网络拥塞时,使用快恢复算法。对于本次实验设计,为了能形象的将快重传和快恢复算法都形象的演示出来,我就模拟了两次丢包的情况,第一次时运用快重传技术,而第二次运用的是快恢复技术,简明扼要,演示起来清楚明白。 4.2 各功能模块详细设计 4.2.1 按钮的设计理念 本程序总共有四个按钮,即开始,停止,暂停,继续,开始和停止设计在同一个按钮上,可以根据情况进行切换,由于C#这门语言对图形界面的友好性较强,所以可以手动的对按钮进行微调,代码也是十分简单,当点击开始时,按钮就显示了停止按钮,暂停/继续按钮的功能和开始按钮类似,只是对像素点的判断不同,点击暂停按钮不会将像素点恢复到其实的地方,而是将点坐标固定到运行的当前位置,其他不做改变。 开始和停止按钮组成一个按钮,开始按钮按下后数据开始传送,此时开始按钮自动变成停止按钮,按下停止按钮,数据M1回到初始位置,按钮自动变为开始按钮。开始时,将会使time1函数激活,程序就会开始运行,发送端就会发送数据,当点击停止时,time1函数就会停止,发送数据条就会回到原始的像素点。暂停和继续按钮组成一个按钮,未按动开始按钮前暂停按钮和继续按钮为未启动状态显示为灰色,当开始按钮按下后暂停按钮自动启动,按下暂停按钮后暂停按钮自动转化成继续按钮,同时数据传送定格,按下开始按钮后,开始按钮自动转化为暂停按钮,同时数据继续传送,这就是几个按钮的状态和功能。 4.2.2 time1函数 time1函数是正个TCP拥塞控制原理演示系统的核心部分,是控制窗口滑动,和数据包传送的控制部分,time1函数是有一个switch语句构成,并根据step不同的取值进行不同阶段的控制,发送的滑动窗口都是由图片组成,是程序中引用在文件夹里的资源,根据time1函数在不同时刻发送不同的图片,来形成一种动态的演示效果,在起始时刻,发送的图片在起始的像素原点,当开始按钮被激活时,就会调用time1函数,函数启动后就会将原始的像素点的横坐标加10,函数不断的调用,横坐标就会不断的加10,使得发送的数据资源产生一种移动的效果,当横坐标加到末尾的位置时,就会自动停止,完成了发送的过程。这是接收端的case情况就会被激活,从像素轨道的最末端向起始端滑动,其中原理和发送相同,只是接受端发送确认报文时,是将像素点的横坐标不断地减10,横坐标不断减少,就会造成了数据资源向左滑动的效果,从而完成了确认报文的发送。在发送和接收端的图片的可见度控制,使得发送和接收的两张主机图片会随着发送数据包的运动而来回滑动。对于重复确认报文的控制,time1函数会控制接收端发送三个确认的报文,总之,发送方和接收方所发送的任何信息都是通过time1函数来确定,time1函数的时间间隔设置为100ms,即每100ms像素点的横坐标不断的加10和减10,就是在窗口中实现数据的发送和接收,因为不是做的Flash,要以程序来实现数据包的来回传送,所以就要用函数不断的改变数据包的坐标来实现数据包的滑动,但是同时要控制数据包的停止,在数据包发送到接收端消失后,要让其停止而不是在隐藏后继续滑动,这就要用一个函数来实现,在后面程序的分析时再做具体的分析。这其中的具体实现就是当传送轮次一发送出数据M1在接收方接收到数据包的同时,数据M1停止,同时接收方发送出确认M1返回发送方,第一个传输轮次结束。在整个传输过程中数据M1和确认M1都不仅仅是从显示传送到隐藏,在隐藏后还继续滑动,而是在从显示到隐藏的同时就已经停止滑动,这是为了方便程序在后面做进一步完善而做好的准备。 4.2.3 文字同步演示窗口 最后就是文字同步演示窗口,在数据开始传送后下面的文字同步演示窗口启动并对数据传送进行同步的传送介绍,当数据资源开始有发送方发送后文字同步演示窗口将对此作出解释即“轮次XX,数据XXX开始由发送方开始传送”,当数据资源由接收方接受到后确认XX开始返回,文字同步演示窗口同样会作出解释“轮次X,确认XX开始由接收方返回到发送方”。由于是文字同步演示,所以当暂停和开始按钮按下后文字同步演示窗口会相应的暂停和开始,这也是程序完善性的一个基本的体现。当停止按钮按下后文字同步演示窗口的的所有解释文字全部清空进入到下一轮的数据传送演示状态。 4.3 设计不足之处 本次程序设计归根到底只是窗口动态演示的过程,没有什么规定和协议之类的跳跃限制,和本人预期的效果有一定的差距,如果能形成一个服务器端和客户端进行数据传输,并模拟传输窗口的变换和数据包丢失的情况是最理想的效果,而不是人工的数据传送演示状态。这也就是整个TCP Reno拥塞控制可视化的过程,整个过程将全部由C#语言实现程序简洁严密,但本程序仍然存在大量的残缺之处,应该再认真钻研使得程序尽善尽美 5 程序运行结果及演示图片 5.1 拥塞控制中的慢开始阶段 (1)最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(M1)大小,当接收端收到了发送端的数据包M1后会返回一个确认,如图5.1所示: 图5.1轮次1--cwnd=1接收方开始发送确认M1 (4)当第一个数据包发出并收到确认后,cwnd加1开始传送第二组数据,具体如图6.3所示,发送方发送M2,M3时, 如图5.2所示         图5.2轮次2--cwnd=2发送方开始发送数据M2到M3 当数据M2-M3到达接收方后,接收方返回确认数据,如图5.3所示         图5.3轮次2--cwnd=2接收方开始发送确认M2到M3 如此发送端按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段,次过程不再赘述。 5.2 拥塞避免阶段 当拥塞窗口达到预设的门限值8时,即将进入拥塞避免阶段,拥塞窗口就会线性增加,下一次发送窗口为9,如图5.4所示: 图5.4轮次5--cwnd=9接收方开始发送确认M16到M24 当接收到3个重复的确认的报文后,TCP拥塞控制系统有效地控制发送窗口的大小,变为当前发送窗口10的一半,所以拥塞窗口变为5,具体如图5.5:                         图5.5轮次7--cwnd=5接收方开始发送确认M30到M34 图5.6轮次12--cwnd=4接收方开始发送确认M61到M64 6 结束语 TCP拥塞控制原理演示系统能形象的演示出慢开始,拥塞避免,快重传,快恢复四个过程的网络传输过程,当出现网络拥塞时,展现拥塞控制算法的处理过程,随着科技的不断进步经济的不断发展,人们对计算机网络可靠性传输越来越关心,传输材料从最初的双绞线,到同轴电缆加双绞线,再到现在的光纤,速度是越来越快,但是传输的数据量就会变大,对于拥塞控制的要求也就会越高,所以好的拥塞控制算法就成为了当今网络时代大家所关注话题,实现拥塞控制的可视化主要完善两个模块的功能:一是拥塞控制中的慢开始阶段数据的动态演示;二是在动态演示的同时要有同步的文字解释,通过数据的动态演示和文字的同步演示让人们明白拥塞控制的主要原理。 我的这次设计只是把传统的拥塞控制算法用图形界面展现出来,并模拟一下丢包和出现三个重复确认报文的情况,但是由于作者能力有限,所以该设计还有很多的不足之处,当出现网络拥塞时,门限值的变化就没有展示给读者,快重传,快恢复也没有演示出来,而且对C#语言还有许多的不明之处,拥塞控制的过程是个多变的过程,还需更多的有志之士发挥出更大的潜力,创造出更好的算法,对于我的毕业设计我还会再做改进,将这个TCP拥塞控制演示系统更加直观,更加完善。 参考文献 [1] Andrew S. Tanebaum,计算机网络,清华大学出版社,2004.8 [2] 吴功宜,计算机网络教程,电子工业出版社,2003.7 [3] 高传善等,计算机网络,人民邮电出版社,2003.8 [4] 杨云江. 计算机与网络安全实用技术[M]. 北京:清华大学出版社.2007.25 [5] Behrouz Forouzan 等著,朱丹宇译,数据通讯与网络,机械工业出版社,2000.4 [6] Charles Petzold. Windows程序设计[M]. 微软出版社. 2003.1 [7] Anthony Jones,Jim Ohlund.Windows. 网络编程[M]. 北京:清华大学出版社. 2004.3 [8] 谢希仁. 计算机网络(第四版)[M]. 北京:电子工业出版社. 2006 [9] Larry L. Peterson等著,叶新铭等译,计算机网络,机械工业出版社,2001.6 [10] Bruce Eckel,Java 编程思想,机械工业出版社,2005 [11] 陈磊. TCP/IP详解[M]. 北京:人民邮电出版社. 1993.3 [12] Simon Roberts. Complete Java 2 certification study guide,电子工业出版社,2004 [13] H. M. Deitel,P. J. Deitel,Java 程序设计教程,清华大学出版社,2006 [14] Marry Campione, Java Tuorial A short course on the basic(Java 语言导学),机械工业出版社,2004 致 谢 本课题在设计和论文的写作过程中,都得到了李阿丽老师的悉心指导。李老师多次询问开发进程,帮助我开拓开发思路,并给予热忱鼓励。李老师严谨的治学态度,乐观随和的处事态度,不仅教育我如何设计和写作,更重要的是教我如何做人,虽历时仅数月,却让我终生受益。 临近毕业,特别感谢我的班主任逄珊老师四年来对我的关心和帮助,感谢所有教育过我的老师对我的教育和培养,他们踏踏实实的作风,不仅激发我更加勤奋好学,而且从多方面给我带来积极的影响。 最后,感谢我的父亲、母亲和同学对我的理解与支持。 附录A         //轮次函数         private void timer1_Tick_1(object sender, EventArgs e)         {             switch (Step)//轮次             {                 case 0://轮次1发送一个数据M1                     if (pictureBox_s.Location == Left_s)                     {                         textBox1.Text += "轮次1--cwnd=1发送方开始发送数据M1\r\n";                     }                     if (pictureBox_s.Location == Right_e)                     {                         pictureBox_s.Visible = false;//发送端图片区  不可见                         Step = 1;                         pictureBox_s.Location = Left_s;                     }                     else                     {                         pictureBox_s.Visible = true;//发送端图片区  可见                         pictureBox_s.Location = new Point(pictureBox_s.Location.X + 10, pictureBox_s.Location.Y);                     }                     break;                 case 1:                     if (pictureBox_r.Location == Right_s)                     {                         textBox2.Text += "轮次1--接收方收到M1并发出确认\r\n";                     }                     if (pictureBox_r.Location == Left_e)                     {                         pictureBox_r.Visible = false;//接收端图片区  不可见                         Step = 2;                         pictureBox_r.Location = Right_s;                     }                     else                     {                         pictureBox_r.Visible = true;//接收端图片区  可见                         pictureBox_r.Location = new Point(pictureBox_r.Location.X - 10, pictureBox_r.Location.Y);                     }                     break;                 //进入拥塞避免                 case 8:                     textBox1.Text += "拥塞窗口达到预定的门限值\r\n";                     textBox1.Text += "慢开始过程结束\r\n";                     textBox2.Text += "慢开始过程结束\r\n";                     textBox1.Text += "拥塞避免过程开始\r\n";                     textBox2.Text += "拥塞避免过程开始\r\n";                     Step = 9;                     break;                 case 9:                     if (pictureBox_s.Location == Left_s)                     {                         textBox1.Text += "轮次5--cwnd=9发送方开始发送数据M16到M24\r\n";                     }                     if (pictureBox_s.Location == Right_e)                     {                         pictureBox_s.Visible = false;                         Step = 10;                         pictureBox_s.Location = Left_s;                     }                     else                     {                         pictureBox_s.Visible = true;                         pictureBox_s.Image = global::SlowStart.Properties.Resources.m5;                         pictureBox_s.Location = new Point(pictureBox_s.Location.X + 10, pictureBox_s.Location.Y);                     }                     break;                 case 10:                     if (pictureBox_r.Location == Right_s)                     {                         textBox2.Text += "轮次5--接收方收到M16到M24并发出确认\r\n";                     }                     if (pictureBox_r.Location == Left_e)                     {                         pictureBox_r.Visible = false;                         Step = 11;                         pictureBox_r.Location = Right_s;                     }                     else                     {                         pictureBox_r.Visible = true;                         pictureBox_r.Image = global::SlowStart.Properties.Resources.q5;                         pictureBox_r.Location = new Point(pictureBox_r.Location.X - 10, pictureBox_r.Location.Y);                     }                     break;                 case 11:                     if (pictureBox_s.Location == Left_s)                     {                         textBox1.Text += "轮次6--cwnd=10发送方开始发送数据M25到M34\r\n";                     }                     if (pictureBox_s.Location == Right_e)                     {                         pictureBox_s.Visible = false;                         Step = 12;                         pictureBox_s.Location = Left_s;                     }                     else                     {                         pictureBox_s.Visible = true;                         pictureBox_s.Image = global::SlowStart.Properties.Resources.m6;                         pictureBox_s.Location = new Point(pictureBox_s.Location.X + 10, pictureBox_s.Location.Y);                     }                     break;                 case 12:                     if (pictureBox_r.Location == Right_s)                     {                         textBox2.Text += "轮次6--接收方收到M25到M30并发出确认\r\n";                     }                     if (pictureBox_r.Location == Left_e)                     {                         pictureBox_r.Visible = false;                         Step = 13;                         pictureBox_r.Location = Right_s;                     }                     else                     {                         pictureBox_r.Visible = true;                         pictureBox_r.Image = global::SlowStart.Properties.Resources.q6;                         pictureBox_r.Location = new Point(pictureBox_r.Location.X - 10, pictureBox_r.Location.Y);                     }                     break;                 case 13:                     if (pictureBox_r.Location == Right_s)                     {                         textBox2.Text += "轮次6--接收方收到M30并发出确认\r\n";                     }                     if (pictureBox_r.Location == Left_e)                     {                         pictureBox_r.Visible = false;                         Step = 14;                         pictureBox_r.Location = Right_s;                     }                     else                     {                         pictureBox_r.Visible = true;                         pictureBox_r.Image = global::SlowStart.Properties.Resources.q7;                         pictureBox_r.Location = new Point(pictureBox_r.Location.X - 10, pictureBox_r.Location.Y);                     }                     break; 文档已经阅读完毕,请返回上一页!
本文档为【TCP拥塞控制原理演示系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_083599
暂无简介~
格式:doc
大小:458KB
软件:Word
页数:26
分类:生活休闲
上传时间:2017-09-19
浏览量:51