欢迎来到天天文库
浏览记录
ID:49866059
大小:293.00 KB
页数:7页
时间:2020-03-05
《滑动窗口协议实验swp.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一滑动窗口协议实验♦实验目的:在NetRiver实验系统中,用C语肓实现滑动窗口协议屮的1比特滑动窗口协议和斤退N帧协议,理解滑动窗口协议♦实验原理和说明:(1).窗口机制滑动窗口协议的基木原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,共至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帆或者是那些可以被发送的帧。下面举一个例了(假设发送窗口尺寸为2,接收窗口尺寸为1):发送方接收
2、方k>/确帧X7£(5收2接认送帧IV发P送帧■»I7发2(«)接收确认已帧分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返冋信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认Z列。至此,发送方打开的窗口数己达规定限度,在未收到新的确认返冋帧Z前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方己收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收I号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返冋信息,关闭0号窗口,表示从重发表屮删除0号帧
3、。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认Z列。至此,发送方打开的窗口又己达规定限度,在未收到新的确认返I川帧Z前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗」表示从重发表屮删除1号帧。此时接收窗口状态仍不变。若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1,接收窗口J后退n协议:发窗U>1,
4、接收窗口>1;选择重传协议:发送窗口>1,接收窗口>1。(2)」比特滑动窗口协议当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返冋JT;才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。发送方接收方⑶.后退n协议由于停等协议要为每一个帧进行确认后才继续发送下一帧,
5、大大降低了信道利用率,因此又提出了后退n协议。后退n协议屮,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧示,若发现该N帧的前一个帧在计时器超时示仍未返冋其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。血帧搖收帧从这里不难看出,后退n协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来己正确传送过的数据帧进行重传(仅
6、因这些数据帧Z前有一个数据帧出了错),这种做法又使传送效率降低。由此可见,若传输信道的传输质最很差因而谋码率较大时,连续测协议不一定优于停止等待协议。此协议屮的发送窗口的大小为k,接收窗口仍是lo(4).选择重传协议在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区屮,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区屮的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELE
7、CTICEREPEAT),其工作过稈如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。发送帧接收帧♦实验代码以及代码说明:实现代码如下:#includensysinclude.hn#ineludeusingstd::deque;usingstd::cout;usingstd::endl;usingnamespacestd;externvoidSendFRAMEPacket(unsignedchar*
此文档下载收益归作者所有