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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6643650.html】到电脑端继续下载(重复下载【60天内】不扣币)。

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(滑动窗口协议实验SWP.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

滑动窗口协议实验SWP.doc

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

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

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

4、口>1,接收窗口>1。 (2).1比特滑动窗口协议     当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。其发送方和接收方运行的流程图如图所示。           (3).后退n协议     由于停等协议要为每一个帧进行确认后才继续发送下一

5、帧,大大降低了信道利用率,因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。如:当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。    从这里不难看出,后退n协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(

6、仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低。由此可见,若传输信道的传输质量很差因而误码率较大时,连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为k,接收窗口仍是1。 (4).选择重传协议     在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重

7、发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。 u 实验代码以及代码说明: 实现代码如下: #include "sysinclude.h" #include using std :: deque; using std :: cout; using std :: endl; using namespace std; extern void SendFRAMEPacket(unsigned char* pData, unsigned int len); #define WINDOW

8、SIZE_STOP_WAIT 1 #define WINDOW_SIZE_BACK_N_FRAME 4 /* the max windows size */ typedef enum {data, ack, nak} frame_kind; /* define the structure of frame and frame head */ typedef struct frame_head { frame_kind kind; unsigned int seq; unsigned int ack; unsigned char data[100]; }; t

9、ypedef struct frame { frame_head head; unsigned int size; }; /* define the buffer zone */ struct StoreType { frame *pfrm; unsigned int sz; }; deque mQue; deque mQue2; bool sendWinFull = false; int counter = 0; /* * 停等协议测试函数 */ int stud_slide_window_stop_

10、and_wait(char *pBuffer, int bufferSize, UINT8 messageType) { unsigned int ack; unsigned int num; StoreType s; /* by the messagetype to decide */ switch(messageType) { case MSG_TYPE_TIMEOUT: num = ntohl(*(unsigned int *)pBuffer); s = mQue.front(); /* if the seq is OK,send it */

11、 if (num == ((* s.pfrm).head.seq)) { SendFRAMEPacket((unsigned char *)(s.pfrm), s.sz); } break; case MSG_TYPE_SEND: /* prepare a new frame */ s.pfrm = new frame; (*s.pfrm) = *(frame *)pBuffer; s.sz = bufferSize; mQue.push_back(s); /* send all the data in buffer */ if

12、sendWinFull) { s = mQue.front(); SendFRAMEPacket((unsigned char *)(s.pfrm), s.sz); sendWinFull = true; } break; case MSG_TYPE_RECEIVE: /* receive ack */ ack = ntohl(((frame *)pBuffer)->head.ack); if (mQue.size() != 0) { s = mQue.front(); if (ntohl(s.pfrm->he

13、ad.seq) == ack) /* receive right ack seq number */ { mQue.pop_front(); s = mQue.front();//??????? SendFRAMEPacket(((unsigned char *)s.pfrm), s.sz);/* send frames again */ } } else { sendWinFull = true; /* databuffer is empty */ } break; } return

14、0; } /* * 回退n帧测试函数 */ int stud_slide_window_back_n_frame(char *pBuffer, int bufferSize, UINT8 messageType) { int ack; int num; int j; /* var used in loop as number */ int k; StoreType s;/* next is to choose from the vars */ switch (messageType) { case MSG_TYPE_TIMEOUT: nu

15、m = ntohl(*(unsigned int *)pBuffer); /* data change */ for (j = 0; j < mQue2.size() && j < WINDOW_SIZE_BACK_N_FRAME; j++) { s = mQue2[j]; if ((*s.pfrm).head.seq == num) break; } for (k = j; k < WINDOW_SIZE_BACK_N_FRAME && k < mQue2.size(); k++) { s = mQue2[k]; Send

16、FRAMEPacket((unsigned char *)(s.pfrm), s.sz);/* resend frames */ } break; case MSG_TYPE_SEND: s.pfrm = new frame; (*s.pfrm) = *(frame *)pBuffer; s.sz = bufferSize; mQue2.push_back(s); if (counter < 4) { s = mQue2.back();/* send the N frames */ SendFRAMEPacket((unsi

17、gned char *)(s.pfrm), s.sz); counter++;/* start the counter */ } break; case MSG_TYPE_RECEVE: ack = ((frame *)pBuffer)->head.ack;/* receive correct ack */ for (j = 0; j < WINDOW_SIZE_BACK_N_FRAME && j < mQue2.size(); j++) { s = mQue2[j]; if (ack == (*s.pfrm).head.seq)

18、 { break; } } if (j < mQue2.size() && j < WINDOW_SIZE_BACK_N_FRAME) { for (k = 0; k <= j; k++) { mQue2.pop_front(); counter--; /* reset cuounter */ } } k = counter; for (; k < WINDOW_SIZE_BACK_N_FRAME && k < mQue2.size() && counter < 4; k++)

19、 { s = mQue2[k]; SendFRAMEPacket((unsigned char *)(s.pfrm), s.sz);/* continue send frames */ counter++; } break; } return 0; } /* * 选择性重传测试函数 */ int stud_slide_window_choice_frame_resend(char *pBuffer, int bufferSize, UINT8 messageType) { return 0; 在实现1比特协议中,利用函数参数

20、messageType传递的参数MSG_TYPE_TIMEOUT,MSG_TYPE_SEND和MSG_TYPE_RECEIVE,因此在函数主体中用switch进行分类,对应不同参数下的函数响应。 首先定义帧头、帧的结构,定义一个缓冲区,然后利用缓冲区的数据组装帧并调用发送函数发送组好的帧。然后利用返回的MessageType参数实现分类。在收到超时选项时,重新发送该帧(帧序号是ack),如果收到系统要发送帧,直接对缓冲区的帧进行发送;如果收到的是接受帧的确认号,先进行转换,然后对比看是否相同,如果相同并且缓冲区还没有空,继续发送,否则调用发送函数重发该帧。 在后退N帧函数中,实现的窗口大小

21、设置为WINDOW_SIZE_BACK_N_FRAME 4,主体实现框架同一比特滑动窗口,只是多了两个计数器,分别用来记录发出的帧的seq和收到的ack。在switch语句中,对于MessageType传递的参数来作出相应的响应:①当传回的参数为超时时,先调用ntohl函数进行数据转换,再利用超时的帧号与窗口大小找到相应要重传的帧(最大帧号不超过窗口大小);然后开始使用for循环依次发送这些帧。②传回的参数为要发送帧时,取缓冲区的数据构建新帧,然后把构建的帧缓存,启动计数器counter,开始发送帧,每发送一个帧,counter累加(不能超过窗口大小)。③参数为收到帧确认时,如果每一个ack号

22、都是已经发送的帧头(在缓冲区里)的seq( ack=((frame*)pBuffer)->head.ack)相同,继续发送下一组帧。发送下一组帧之前先重新编排帧号,counter也相应重新编排。在队列里如果序号k小于窗口大小并且counter小于4,用队列mQue2里的s开始继续发送帧。 u 总结: 整体来说,滑动窗口在实验中是固定的,这样便于处理帧号和ack的确认以及存储。由于实验中实现的后退N帧还是利用了messageType参数,在未收到确认帧的时候只能选择重发滑动窗口中的帧,在帧完全确认接收正确以后才能发送新帧,这样实际运行起来效率会比较低(系统必须等待对方的确认)。 - 8 -

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服