实验一滑动窗口协议实验

上传人:桔**** 文档编号:486414989 上传时间:2022-09-15 格式:DOC 页数:9 大小:200.50KB
返回 下载 相关 举报
实验一滑动窗口协议实验_第1页
第1页 / 共9页
实验一滑动窗口协议实验_第2页
第2页 / 共9页
实验一滑动窗口协议实验_第3页
第3页 / 共9页
实验一滑动窗口协议实验_第4页
第4页 / 共9页
实验一滑动窗口协议实验_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《实验一滑动窗口协议实验》由会员分享,可在线阅读,更多相关《实验一滑动窗口协议实验(9页珍藏版)》请在金锄头文库上搜索。

1、实验一滑动窗口协议实验实验目的:在NetRiver实验系统中,用C语言实现滑动窗口协议中的1比特滑动窗口协议和后退N帧协议,理解滑动窗口协议实验原理和说明:(1).窗口机制滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):(7)接段接收确1

2、匕帧认I汁吐題W送恤rJ我2接收确发送认0匕軸2号軸分析:初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;发送方继续发送

3、2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口=1;后退n协议:发窗口1,接收窗口1;选择重传协议:发送窗口1,接收窗口1。

4、(2).1比特滑动窗口协议当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stopandwait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。发送拧濒费报文蛙壬撓対发送帧号朝一茨尿帧号谕认帧号计钳器趨时1F发送并藍忘的器1*期待帧号缶一期待帧号0一钢濒贞专0境诗帧云等彳蛊usingstd

5、:deque;usingstd:cout;usingstd:endl;usingnamespacestd;externvoidSendFRAMEPacket(unsignedchar*pData,unsignedintlen);#defineWINDOW_SIZE_STOP_WAIT1#defineWINDOW_SIZE_BACK_N_FRAME4/*themaxwindowssize*/typedefenumdata,ack,nakframe_kind;/*definethestructureofframeandframehead*/typedefstructframe_headframe_

6、kindkind;unsignedintseq;unsignedintack;unsignedchardata100;typedefstructframeframe_headhead;unsignedintsize;/*definethebufferzone*/structStoreTypeframe*pfrm;unsignedintsz;dequemQue;dequemQue2;boolsendWinFull=false;intcounter=0;/*停等协议测试函数*/intstud_slide_window_stop_and_wait(char*pBuffer,intbufferSize

7、,UINT8messageType)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:/*p

8、repareanewframe*/s.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.si

9、ze()!=0)s=mQue.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,intbuffer

10、Size,UINT8messageType)intack;intnum;intj;/*varusedinloopasnumber*/intk;StoreTypes;/*nextistochoosefromthevars*/switch(messageType)caseMSG_TYPE_TIMEOUT:num=ntohl(*(unsignedint*)pBuffer);/*datachange*/for(j=0;jmQue2.size()&jWINDOW_SIZE_BACK_N_FRAME;j+)s=mQue2j;if(*s.pfrm).head.seq=num)break;for(k=j;kW

11、INDOW_SIZE_BACK_N_FRAME&kmQue2.size();k+)s=mQue2k;SendFRAMEPacket(unsignedchar*)(s.pfrm),s.sz);/*resendframes*/break;caseMSG_TYPE_SEND:s.pfrm=newframe;(*s.pfrm)=*(frame*)pBuffer;s.sz=bufferSize;mQue2.push_back(s);if(counterhead.ack;/*receivecorrectack*/for(j=0;jWINDOW_SIZE_BACK_N_FRAME&jmQue2.size();j+)s=mQue2j;if(ack=(*s.pfrm).head.seq)break;if(jmQue2.size()&jWINDOW_SIZE_BACK_N_FRAME)for(k=0;k=j;k+)-#-mQue2.pop_front();counter-;/*resetcuounter*/k=counter;for(;kWINDOW_SIZE_BACK_N_FRAME&kmQue2.size()&counter4;k+)s=mQue2k;SendFRAMEPacket(unsignedchar*)(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号