网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
滑动窗口协议 实验报告 1300011002 沈澈 一、实验目的和内容 本实验的主要目的是实现一个数据链路层协议的数据传送部分。计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输,是计算机网络各层协议中通信控制功能最典型的一种协议。本实验要实现基于滑动窗口技术的三种不同的协议,即: 1)1比特滑动窗口协议 2)回退N帧滑动窗口协议 3)选择性重传协议 1比特滑动窗口协议 当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号。由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只用一比特来编号就够了。 需要编写的测试函数stud_slide_window_stop_and_wait要根据参数messageType进行相应的操作。messageTpe有三种可能的取值,对应于发送,接收和超时三种不同的情况。发送时,由于窗口大小限定为1,所以在收到前一帧的ack之前不能发送下一帧。所以函数中需要维持一个队列静态变量buff作为发送缓冲区。还要维持一个整型静态变量window_size记录目前等待ack的帧的个数。(在停-等式协议中等待ack的帧数只能是0或1,定义成整型是为了兼容后两种协议)这样,每当有需要发送帧时,就将此帧压入缓冲区并尝试发送。每当接到一个ack确认,就把缓冲区中已确认的帧弹出,这样就滑动窗口中就空出了新的位置,可以再尝试发送新的帧。当发生超时事件,则重发缓冲区中的等待确认的帧。 回退N帧滑动窗口协议 回退N帧滑动窗口协议与1比特滑动窗口协议相似,只需将滑动窗口的大小做适当的调整。(在实验中设定为4)当遇到超时事件时要重发滑动窗口中的所有帧,而不能只发超时帧。收到ack时,要把在此ack之前的所有帧都弹出。 选择性重传协议 选择重传协议可以在回退N帧滑动窗口协议的基础上改进得到。选择重传协议中没有超时事件,只有发送和接收。发送与之前的协议完全相同。接收时需要提取接受帧的帧头中的kind字段,区分ack帧和nak帧。收到ack帧的处理与之前相同。收到nak帧时,只需将相应的帧重新发送即可。 二、遇到的问题 实验中遇到了不少困难,花了不少时间调试。遇到的主要困难有以下两个: 在回退N帧滑动窗口协议和选择性重传协议中,当收到ack时要把ack之前的所有帧都弹出,而不能只在队列头部的帧与ack相符时才弹出。这是因为,当接收方发送序号为seq的ack帧时,序号小于seq的帧一定都已经接收到了。 帧内的信息是用网络序存储的,在读取时要用ntohl, ntohs等函数转换为主机序 三、实验代码 #include sysinclude.h #include queue using namespace std; extern void SendFRAMEPacket(unsigned char* pData, unsigned int len); #define WINDOW_SIZE_STOP_WAIT 1 #define WINDOW_SIZE_BACK_N_FRAME 4 typedef enum {data,ack,nak} frame_kind; typedef struct frame_head { frame_kind kind; unsigned int seq; unsigned int ack; unsigned char data[100]; }; typedef struct frame { frame_head head; unsigned int size; }; typedef struct elem { /* data */ frame *pframe; unsigned int len; }; /* * 停等协议测试函数 */ int stud_slide_window_stop_and_wait(char *pBuffer, int bufferSize, UINT8 messageType) { //buffer static dequeelem buff; static UINT32 window_size = 0; static UINT32 ack_expected = 1; UINT32 ack; elem s; switch(messageType){ case MSG_TYPE_TIMEOUT: SendFRAMEPacket((unsign

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档