下载此文档

滑动窗口协议实验报告.docx


文档分类:IT计算机 | 页数:约25页 举报非法文档有奖
1/25
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/25 下载此文档
文档列表 文档介绍
滑动窗口协议实验报告篇一:Exp1_滑动窗口协议_实验报告 Exp1滑动窗口协议实验报告【实验目标】?理解和掌握“滑动窗口”技术。?River进行。?NetRiver系统提供了各实验的上下文和接口函数,利用C/C++编程语言实现典型协议的核心部分。?River系统完成程序代码的编译、调试和测试,验证协议实现的正确性。【实验原理】 1-bit滑动窗口协议 1-bit滑动窗口协议中,需要保证发送窗口大小不超过1。我们用ack_expected表示发送窗口下界,即希望得到确认的帧号;用window_size表示当前发送窗口的大小。当有事件到达时,根据事件的类型进行相应处理: ?超时事件:此时pBuffer指向的UINT32类型存储的是主机序的序列号seq, 将seq与当前窗口区间[ack_expected,ack_expected+windoe_size)进行比较,从seq开始连续进行发送。?网络层发送事件:此时网络层想要发送一个新帧,pBuffer指向的是网络层准备好的帧,我们将该帧放入缓冲队列,并在发送窗口未满时进行1次发送。?帧到达事件:此时我们收到了一个帧,通过ntohl将其确认号转化成主机序ack,然后对比ack是否等于ack_expected,若是则发送窗口下界加1,此时若还有帧在缓冲区则尝试进行1次发送,发送窗口上界加1。回退n帧滑动窗口协议回退n帧滑动窗口协议和1-bit滑动窗口协议相比,主要的区别在于窗口大小的不同,以及处理超时事件时,应从超时的帧开始进行连续发送。其他事件的处理则没有不同。【实验中遇到的问题】起始编号实验中帧号从1开始编号,而不是通常认为的0。静态变量由于两个函数将被分别连续调用,故不适合使用全局变量,否则将出现未初始化的现象。这里我使用了函数内的静态变量来保证合适的初始值。实验系统不稳定实验过程中挺经常遇到服务器超时的现象,而且有时同一个程序运行两次也会有不同的结果。一个经验性的做法是在程序中增加一些cout语句,实践上能够保证结果正确,但具体原因尚不清楚。【源代码】#include""#includeusingnamespacestd; externvoidSendFRAMEPacket(unsignedchar*pData,unsignedintlen); #defineWINDOW_SIZE_STOP_WAIT1#defineWINDOW_SIZE_BACK_N_FRAME4 //帧类型 typedefenum{data,ack,nak}frame_kind;//帧头 typedefstructframe_head{};//完整帧 typedefstructframe{}; //队列元素 typedefstructstore_elm{};/* *停等协议测试函数 frame *pframe;len; //帧头//数据长度 frame_headunsignedint head;size; //帧头//数据的大小 frame_kindunsignedintunsignedintunsignedchar kind;seq;ack; //帧类型//序号//确认号//数据 data[100]; unsignedint intstud_slide_window_stop_and_wait(char*pBuffer,intbufferSize,UINT8messageType){ switch(messageType){caseMSG_TYPE_TIMEOUT: seq=*((UINT32*)pBuffer); //给出主机序//发送缓冲区 staticdequebuffDeque;staticUINT32window_size=0;staticUINT32ack_expected=1;UINT32seq,ack;store_elms; //起始编号为1 if(ack_expected for(UINT32i=seq-ack_expected;i SendFRAMEPacket((unsignedchar *)(buffDeque[i].pframe),buffDeque[i].len); }break; caseMSG_TYPE_SEND: =newframe; //缓存新帧*=*(frame*)pBuffer;=bufferSize;(s); if(window_size s=buffDeque[window_size++]; SendFRAMEPacket((unsignedchar*)(),); //尝试发送 caseMSG_TYPE_RECEIVE: ack=nto

滑动窗口协议实验报告 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数25
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xiang1982071
  • 文件大小23 KB
  • 时间2018-10-27