版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程设计报告滑动窗口协议的模拟姓名:学号:专业:信息工程指导教师:2010年11月17日1 .实验目的32 .实验原理33 .实验代码以及代码说明54 .总结105 .参考文献10滑动窗口协议的模拟一.实验目的:计算机网络是一项实践教学内容。通过本课程的学习使学生掌握计算机网络的的理论知识,然后通过实际动手实现课程设计的要求,使课堂所学能应用到实际应用当中,以此来巩固理论知识,提高解决问题,完成工程的能力。二.实验原理:(1) .窗口机制滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称
2、为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):发送h接收确认i号帧分析:初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;发送方打开0、i号窗口,表示0、i号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收
3、窗口此时状态仍未变;接收方已收到0号帧,0号窗口关闭,i号窗口打开,表示准备接收i号帧。此时发送窗口状态不变;发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。若从
4、滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退n协议:发窗口>1,接收窗口>1;选择重传协议:发送窗口>1,接收窗口>1。(2) .1比特滑动窗口协议当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号
5、。由于停等协议规定只有一帧其发送方和接收方运行的完全发送成功后才能发送新的帧,流程图如图所示。因而只用一比特来编号就够了。接收方发送方。一发送顿号0一期特侦号一发送顼号.后退n协议由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后
6、仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。从这里不难看出,后退n协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低。由此可见,若传输信道的传输质量很差因而误码率较大时,连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为k,接收窗口仍是1。(4).选择重传协议在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能
7、立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICEREPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。发.送巾时接收帧三.实验代码以及代码说明:实现代码如下:#include"sysinclude.h"#include<deque>usingstd二deque;usingstd二cout;usingstd二endl;usingnamespacestd;
8、externvoidSendFRAMEPacket(unsignedchar*pData,unsignedintlen);#defineWINDOW_SIZE_STOP_WAIT1* defineWINDOW_SIZE_BACK_N_FRAME4/*themaxwindowssize*/typedefenumdata,ack,nakframe_kind;/*definethestructureofframeandframehead*/typedefstructframe_headframe_kindkind;unsignedintseq;unsignedintack;unsignedchard
9、ata100;typedefstructframeframe_headhead;unsignedintsize;/*definethebufferzone*/structStoreTypeframe*pfrm;unsignedintsz;deque<StoreType>mQue;deque<StoreType>mQue2;boolsendWinFull=false;intcounter=0;/* 停等协议测试函数* /intstud_slide_window_stop_and_wait(char*pBuffer,intbufferSize,UINT8messageTyp
10、e)unsignedintack;unsignedintnum;StoreTypes;/*bythemessagetypetodecide*/switch(messageType)caseMSG_TYPE_TIMEOUT:num=ntohl(*(unsignedint*)pBuffer);s=mQue.front();/*iftheseqisOK,sendit*/if(num=(*s.pfrm).head.seq)SendFRAMEPacket(unsignedchar*)(s.pfrm),s.sz);break;caseMSG_TYPE_SEND:/*prepareanewframe*/s.
11、pfrm=newframe;(*s.pfrm)=*(frame*)pBuffer;s.sz=bufferSize;mQue.push_back(s);/*sendallthedatainbuffer*/if(!sendWinFull)s=mQue.front();SendFRAMEPacket(unsignedchar*)(s.pfrm),s.sz);sendWinFull=true;break;caseMSG_TYPE_RECEIVE:/*receiveack*/ack=ntohl(frame*)pBuffer)->head.ack);if(mQue.size()!=0)s=mQue.
12、front();if(ntohl(s.pfrm->head.seq)=ack)/*receiverightackseqnumber*/mQue.pop_front();s=mQue.front();SendFRAMEPacket(unsignedchar*)s.pfrm),s.sz);/*sendframesagain*/elsesendWinFull=true;/*databufferisempty*/break;return0;/*回退n帧测试函数*/intstud_slide_window_back_n_frame(char*pBuffer,intbufferSize,UINT8m
13、essageType)intack;intnum;intj;/*varusedinloopasnumber*/intk;StoreTypes;/*nextistochoosefromthevars*/switch(messageType)caseMSG_TYPE_TIMEOUT:num=ntohl(*(unsignedint*)pBuffer);/*datachange*/for(j=0;j<mQue2.size()&&j<WINDOW_SIZE_BACK_N_FRAME;j+)s=mQue2j;if(*s.pfrm).head.seq=num)break;for(
14、k=j;k<WINDOW_SIZE_BACK_N_FRAME&&k<mQue2.size();k+)s=mQue2k;SendFRAMEPacket(unsignedchar*)(s.pfrm),s.sz);/*resendframes*/break;caseMSGTYPESEND:s.pfrm=newframe;(*s.pfrm)=*(frame*)pBuffer;s.sz=bufferSize;mQue2.push_back(s);if(counter<4)s=mQue2.back();/*sendtheNframes*/SendFRAMEPacket(u
15、nsignedchar*)(s.pfrm),s.sz);counter+;/*startthecounter*/break;caseMSIG_TYPE_RECEVE:ack=(frame*)pBuffer)->head.ack;/*receivecorrectack*/for(j=0;j<WINDOW_SIZE_BACK_N_FRAME&&j<mQue2.size();j+)s=mQue2j;if(ack=(*s.pfrm).head.seq)break;if(j<mQue2.size()&&j<WINDOW_SIZE_BACK_N
16、_FRAME)for(k=0;k<=j;k+)mQue2.pop_front();counter-;/*resetcuounter*/)k=counter;for(;k<WINDOW_SIZE_BACK_N_FRAME&&k<mQue2.size()&&counter<4;k+)(s=mQue2k;SendFRAMEPacket(unsignedchar*)(s.pfrm),s.sz);/*continuesendframes*/counter+;)break;)return0;)/*选择性重传测试函数*/intstud_slide_wi
17、ndow_choice_frame_resend(char*pBuffer,intbufferSize,UINT8messageType)(return0;在实现1比特协议中,利用函数参数messageType传递的参数MSG_TYPE_TIMEOUT,MSG_TYPE_SEND和MSG_TYPE_RECEIVE,因此在函数主体中用switch进行分类,对应不同参数下的函数响应。首先定义帧头、帧的结构,定义一个缓冲区,然后利用缓冲区的数据组装帧并调用发送函数发送组好的帧。然后利用返回的MessageType参数实现分类。在收到超时选项时,重新发送该帧(帧序号是ack),如果收到系统要发送帧,直
18、接对缓冲区的帧进行发送;如果收到的是接受帧的确认号,先进行转换,然后对比看是否相同,如果相同并且缓冲区还没有空,继续发送,否则调用发送函数重发该帧。在后退N帧函数中,实现的窗口大小设置为WINDOW_SIZE_BACK_N_FRAME4,主体实现框架同一比特滑动窗口,只是多了两个计数器,分别用来记录发出的帧的seq和收到的ack。在switch语句中,对于MessageType传递的参数来作出相应的响应:当传回的参数为超时时,先调用ntohl函数进行数据转换,再利用超时的帧号与窗口大小找到相应要重传的帧(最大帧号不超过窗口大小);然后开始使用for循环依次发送这些帧。传回的参数为要发送帧时,取缓冲区的数据构建新帧,然后把构建的帧缓存,启动计数器counter,开始发送帧,每发送一个帧,counter累加(不能超过窗口大小)。参数为收到帧确认时,如果每一个ack号都是已经发送的帧头(在缓冲区里)的seq(ack=(frame*)pBuffer)->head.ack)相同,继续发送下一组帧。发送下一组帧之前先重新编排帧号,counter也相应重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧城市厂房委托出租与城市管理服务合同3篇
- 2025年度纺织行业供应链金融服务合同范本3篇
- 二零二四年养老院活动指导员聘用合同(老年文化活动策划与执行)3篇
- 二零二五版安保服务合同纠纷处理条款3篇
- 二零二四年度“石油化工”项目投资合同
- 二零二五年度疫情期间电子商务平台运营与推广合同3篇
- 2024注册不良资产处置公司协议转让
- 2024版用房产抵押借款合同
- 2025年度玫瑰花采摘与加工服务外包合同4篇
- 年度高压液压阀产业分析报告
- T-SDLPA 0001-2024 研究型病房建设和配置标准
- (人教PEP2024版)英语一年级上册Unit 1 教学课件(新教材)
- 全国职业院校技能大赛高职组(市政管线(道)数字化施工赛项)考试题库(含答案)
- 2024胃肠间质瘤(GIST)诊疗指南更新解读 2
- 光储电站储能系统调试方案
- 2024年二级建造师继续教育题库及答案(500题)
- 小学数学二年级100以内连加连减口算题
- 建设单位如何做好项目管理
- 三年级上递等式计算400题
- 一次性餐具配送投标方案
- 《中华民族多元一体格局》
评论
0/150
提交评论