ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:283.35KB ,
资源ID:4144334      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4144334.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告滑动窗口协议仿真.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

课程设计报告滑动窗口协议仿真.docx

1、课程设计报告滑动窗口协议仿真滁州学院课程设计报告课程名称: 计算机网络 设计题目: 滑动窗口协议仿真 系 别: 计算机与信息工程学院 专 业: 计算机科学与技术 组 别: 第五组 起止日期: 011年1月24日2011年月日指导教师: 赵国柱 计算机与信息工程学院二一一年制课程设计题目滑动窗口协议仿真组长赵育坤学号2122035班级计专班系别计算机与信息工程学院专业计算机科学与技术组员闫婷、张侠、余静、于东锋、张飞、赵育坤指导教师赵国柱课程设计目的掌握滑动窗口协议的基本原理,并能够用所学计算机高级语言进行编程模拟课程设计所需环境开发环境:VC+ 运行环境:Windo 操作系统课程设计任务要求1

2、程序按照滑动窗口协议实现端对端的数据传送。包括协议的各种策略,如包丢失、停等应答、超时等都应有所仿真实现2显示数据传送过程中的各项具体数据。双方帧的个数变化,帧序号,发送和接受速度,暂停或重传提示等课程设计工作进度计划序号起止日期工 作 内 容分工情况1月24号11月2号了解工作要求,明确分工内容,网上查阅相关资料所有组员共同参与11月28号1月号sener队列模块的编写由闫婷完成32月号12月号sender主函数的编写由赵育坤、张飞完成411月28号11月30号rive队列模块的编写由张侠完成52月号12月4号recever主函数的编写由余静、于东锋完成612月5号12月7号最后汇总,调试由

3、赵育坤、于东锋完成指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日课程设计任务书一. 引言二. 基本原理21窗口机制21b滑动窗口协议2.3 后退N协议.选择重传协议2.流量控制三. 需求分析3.1课程设计题目3.2开发环境3.3 运行环境3.4 课程设计任务及要求 界面要求3.6 网络接口要求四. 详细设计 41 结构体的定义4.2 发送方的主要函数43接受方的主要函数五 源代码 5.1 发送方的主要代码52 接收方的主要代码六. 调试与操作说明 致谢参考文献课程设计的主要内容1引言早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况

4、,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。因此就有了滑动窗口机制来解决这些问题。早期我们使用的是bi滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续RQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ac确认。同1bi滑动窗口协议相比,大大减少了c数量,并消除了延迟ak对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第

5、3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。2基本原理2. 窗口机制滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚

6、至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。接受方为其窗口内的每一个序号保留了一个缓冲区。与每个缓冲区相关联的还有一位,用来指明该缓冲区是满的还是空的。 若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口1;后退N协议:发送窗口1,接收窗口=;选择重传协议:发送窗口1,接收窗口。2 1t滑动窗口协议当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(top-anwa)。该协议规定

7、发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(aknoldeme)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。. 后退N协议由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧

8、时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。从这里不难看出,后退协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低。由此可见,若传输信道的传输质量很差因而误码率较大时,连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为k,接收窗口仍是1。24 选择重传协议在后退n协议中,接收方若发

9、现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SLETIC EPEA),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。.5流量控制TCP的特点之一是提供体积可变的滑动窗口机制,支持端到端的流量控制。TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下

10、: (1)CP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;(2)发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;(3)发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。(4)滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而,它只能在源端设备和目的端设备起作用,当网络中间设备(例如路由器等)发生拥塞时,滑动窗口机制将不起作用。3需求分析3.1 课程设计题目:滑动窗口协议仿真.2 开发环境:Visua C 0 .3 运行环境:

11、Windows 操作系统 34 课程设计任务及要求: (1)程序按照滑动窗口协议实现端对端的数据传送。包括协议的各种策略,如包丢失、停等应答、超时等都应有所仿真实现。 ()显示数据传送过程中的各项具体数据。双方帧的个数变化,帧序号,发送和接受速度,暂停或重传提示等。3.5 界面要求:此次课程设计要求的所有功能应可视,我们组主要是用VC+编写的,运行在DOS环境下,观察发送方(sende)发送数据包到接收方(ceive)时。界面应显示出双方帧个数的变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送和接受情况,包括在相应的窗口详细显示相应的AK和其他收发数据帧后发出的消

12、息,以表明模拟协议的正确运作过程。在各种情况下,接受方和发送方窗口应实时显示帧的发送和接受情况,包括序号,时间戳,内容等。以及窗口的填充和清空情况。3. 网络接口要求:两台机器或是一台机器中两个独立的线程模拟发送方与接受方,接收数据的端口初始应为监听状态。发送方向接受方发起连接,成功后开始发送数据。4.概要设计 结构体定义如下:typedef enum da 1,ack,nak,toufamend; /帧类型ypede rut rae_ed fame_knd n; /帧类型 unsine iseq; /序列号 uigne in ck; /确认号 unsigne ha taMAX_LEGH; /

13、数据ead;yd stutfame rme_had ha; /帧头 usigneintsize; /数据的大小 re;ypedef sr frmeode 队列节点类型 fame hed_data; str fmenode *xt; Frmenode;typdef stuct amenoe *frot; /队头指针 Framenoe rea; /队尾指针LinkQue;.2 发送方的主要函数实现:函数名:vid InitLne(LnkQueuq); 功 能:初始化队列。函数名:vid GtFmeomH(LkQue*q);功 能:从主机取数据帧,由于实验需要,假设主机有足够多的数据帧要发送。vd

14、Dene(inkee *q); 功 能:数据帧发送完毕(收到确认帧)后,删除发送的数据帧(队头)。函数名:intQueeEp(LkQuu q); 功 能:判断队列是否为空。函数名:m QueueFront(LinQueue*); 功 能:取队头,首帧是准备好待发送的帧。函数名:nt ueuLen(LnkQuee *q);功 能:计算队列长度。函数名:DWORWINAPI RecivFun(LPI pArg);功 能:发送线程调用的函数,g参数存接收帧指针。函数名:voi ma();功 能:发送方主函数,首先和接收方(本机120.01)建立ockt连接并初始化发送队列。然后重复下面的步骤:(1)

15、从主机取数据帧;(2)发送数据帧,含超时重发(接收方未收到或未收到接收方ck)和错误重发(收到接收方nak);(3)设置超时计时器,这里是5秒;()等待确认,调用Ceatehred()函数创建一个线程,超时则调用TeminteThrea()函数结束线程并再次发送数据帧。收到数据帧则做后续处理;()收到否认帧k则再次发送数据帧,收到确认帧a则发送下一个数据帧;()如果发送的测试时间达到20秒,则提示是否继续测试,按q或Q退出测试。4.3接收方的主要函数实现:函数名:vid nitie(LinkQuue q);功 能:初始化队列。函数名:vd GtFameHost(LikQuee *q);功 能:

16、准备好接收帧的缓冲池,首帧是待接收的帧,尾帧是已经接收的待提交主机的帧。由于实验需要,假设数据帧送往主机是足够快的。int eLne(Qeu*q,frame *p,nigned ituw)功 能:将帧数据保存供提交主机,urw是打开的待接收数据的窗口。函数名:int QeeEmpt(LinkQueu *q);功 能:判断队列是否为空。函数名:int ueuLe(LikQee *q);功 能:计算队列长度。函数名:void mai();功 能:接收方主函数,首先和发送方建立ot连接并初始化初始化接收窗口。然后重复下面的步骤:()等待,接收数据帧;(2)校验数据帧,假定产生随机结果,20%的概率校

17、验错误或发送方发送数据帧超时;()校验错误时,丢弃数据帧,并发送否认帧nak;(4)如果出现接收超时(假定未收到发送方发送的数据帧),则不给发送发任何回应;()如果校验正确,首先判断是否是上一帧的重发。是上一帧的重发,则丢弃数据帧,并发送确认帧ck;是新的数据帧,则保存数据帧到当前接收窗口,并发送确认帧ack。(6)送数据帧至主机。.源代码5.1 发送方的主要代码:void Initie(LiQueu*q) qfrt q-er ULL;intQueEmpy(LinQueue*) rturnqfrnt = NU& qre =NUL;fae ueFrot(LinkQuue *q) f (QuueE

18、mpy() printf(队列为空!); Seep(SEEP); eit(); rern q-font-ad_ata;int QueuLen(Linkee *q)i(QeeEmpty(q)) turn; intnum = 0;ramnode p =q-front;while(p != NUL) num+; p=-next;return u;void GetFamFomos(LinkQuue *q) if(QueLen(q) MXPOL) prif(ata %d 已准备好n, q-fronthddataha.seq); retur; Franode *p=(Famenode *)aloc(siz

19、ef(Framende);memset(p-hea_data.head.ata,0, AX_LENGH);and(unsigd)me(NULL));p-ead_daa.sie = rn() % MA_LENGTH; / 帧大小随机生成mset(-had_a.eaaa, 1,pheadaasize);-hea_daa.head.ac -1; pead_data.had.kind = data;p-headdatahead.seq = ;-next =NLL; if(QueueEmpy(q) q-front=q-a=p; /首帧是待发送的帧 elsep-head_data.heeq = (q-re

20、ar-head_ata.head.s 1)%MXPOL; q-rear-ext =p;qrear =p; ritf(从主机得到:dta d,放入缓存,p-hed_datahead.seq);GetFraeFromHot(q); 由于实验需要,假设主机有足够多的数据帧要发送od DeL(Lnkueu q) Frne *p = LL; if(ueueEmpty(q)) prit(队列为空!); ee p = q-font; q-front=pnex; (q-rr =p) q-rear =NUL; prtf(发送data %d,d 成功!从缓存中删除n, p-hed_dta.ea.se, phad_

21、dta.sze);fre(p); = NUL;voidin() pntf(建立连接 . n);Bgn: WORD wVersonReqested; WAT wsata; /初始化scket库VsionReuesedMKEWRD(1,1);/两个yte型合并成一个WRD型 it er=SStartup(wVroneuested,&wsaDa);if(r!0) Slep(EEPMS); retur; ( OBY( watawVersion ) != 1 | HITE( wsaaa.wVrin ) != ) SAClanup(); /中止WindosSocks服务 SASaup()成对使用 Slep

22、(SLEEPS); retur; socketlien= soe(AFINET,SO_RAM,0);/监听的套接字CKD_INlienadd; clientadd.snadr.Sun.Sddr inet_adr(12700.); cliesin_fmily= AF_IET; clientad.inprt htons(7001);/设置连接端的IP、端口if(SOCETEROR=connect(socketClent,(SODR*)clientad,sizeof(OCADR) ) /连接 WSClanup(); Slep(SEMS); goto Bgi; har gtataECEVE_MAX_L

23、GTH; memset(getDta,0, REEIVE_MAX_LEGT); /清零if(rec(scketien,getDa,EIV_MAX_LENGTH,0) =SCKT_ERROR) /接受 prif(接受连接提示信息出错!n); lse prin(%n,etat); car eataSEN_MAXLEGTH;meet(ndData, 0, END_AX_ENGTH); trcy(sedta,你好接收方,我是发送方!); i( SOCETER= snd(soctCliet,endDaa,tre(endData)1,) ) /发送 pintf(发送连接提示信息出错!n); WSACaup

24、(); closesocket(oketlint); Seep(SLEEPM); retur; prntf(按任意键继续!n);whl (!kbhit() ;/等待开始 ep(SLEPMS);ritf(1bi滑动窗口协议:发送方,发送窗口=n);inkQee Qu;InitLin(uuQ);frame packetsen;/data raacetcive; / ck,naknsgned lo ic =GetTicut(); int ret =0;ADEhThred; wile(1) GetFrmeFrmHot(&QueQ); /从主机取数据帧mmset(pketsend,, zeo(paces

25、nd); Seep(SEMS); pinf(n); aketend = QuuFont(&QueueQ); 取数据帧 et = sen(sockeClient,(char *)&pckeend, sizof(pacesend), 0);/发送data f(rt = SOCKE_EO) prnf(发送数据出错!); continue; ntf(发送数据帧:data, %dn, pakten.ea.sq, pakt.sie); const unsged ogtmeOut 5 000; /设置超时计时器 5秒超时 em(&paktrciv, 0, sizeof(packetrecive); Slee(LES); pintf(n);ntaizeCritcalection(&C); /初始化临界区 hThread=Ctehra(ULL,0,ReiveFu,(PVD)&pkereceive, , NUL); t r WatoMuplOjects(, hhra, TRU, ieu); DelteCriticalSction(&C); /与IitilzeCriticaSction(&C);成对使用 if(re

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2