




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
滑动窗口实验报告(含源码)一、 实验目的1. 实现一个数据链路层协议的数据传送部分。2. 更好地理解数据链路层协议中的“滑动窗口”技术的基本工作原理。3. 掌握计算机网络协议的基本实现技术。二、 实验要求在一个数据链路层的模拟实现环境中,用C语言实现下两个数据链路层协议。1. 1比特滑动窗口协议2. 回退N帧滑动窗口协议三、 实验内容充分理解滑动窗口协议,根据滑动窗口协议,模拟滑动窗口协议中发送端的功能,对系统发送的帧进行缓存并加入窗口等待确认,并在超时或者错误时对部分帧进行重传。编写停等及退回N滑动窗口协议函数,响应系统的发送请求、接收帧消息以及超时消息,并根据滑动窗口协议进行相应处理。四、 源代码及注释#include sysinclude.h#include using namespace std;extern void SendFRAMEPacket(unsigned char* pData, unsigned int len);/1比特滑动窗口#define WINDOW_SIZE_STOP_WAIT 1/回退N帧协议#define WINDOW_SIZE_BACK_N_FRAME 4/缓存区大小#define BUFFER_SIZE 50typedef enum DATA,ACK,NAK Frame_kind;/帧头typedef struct Frame_headFrame_kind kind;unsigned int seq;unsigned int ack;unsigned char data100;/帧typedef struct FrameFrame_head head;unsigned int size;/缓存区Frame bufferBUFFER_SIZE;/当前希望确认的帧,最近缓存的帧,下一次要发送的帧unsigned int expect_frame = 0, last_buffered_frame = 0, next_frame = 0;/* 停等协议测试函数*/int stud_slide_window_stop_and_wait(char *pBuffer, int bufferSize, UINT8 messageType) Frame_head* p = (Frame_head*)pBuffer;/unsigned int frameNum = ntohl(*(unsigned int*)pBuffer);switch (messageType)/网络层要发送一帧数据时case MSG_TYPE_SEND : /缓存当前要发送的帧bufferlast_buffered_frame % BUFFER_SIZE.head = *p;bufferlast_buffered_frame % BUFFER_SIZE.size = bufferSize;/更新下次缓存的位置+ last_buffered_frame;/如果当前有空闲的窗口可以用if (last_buffered_frame - expect_frame ack);/试探 for (int i = expect_frame; i = exp_ack)/期望帧+1+ expect_frame;/如果有缓存帧没发出if (next_frame last_buffered_frame)/发出一个缓存帧SendFRAMEPacket(unsigned char*)(&buffernext_frame % BUFFER_SIZE), buffernext_frame % BUFFER_SIZE.size);/窗口上界+1+ next_frame;/否则,无法继续发送帧,退出。等待下次再更新期望确认帧else break;return 0;/超时 case MSG_TYPE_TIMEOUT : /超时重发,把当前窗口内未确认的帧重发一遍for (int i = expect_frame; i ntohl(bufferi % BUFFER_SIZE.head.seq) continue;SendFRAMEPacket(unsigned char*)(&bufferi % BUFFER_SIZE), bufferi % BUFFER_SIZE.size);return 0; default : break;return -1;/* 回退n帧测试函数*/int stud_slide_window_back_n_frame(char *pBuffer, int bufferSize, UINT8 messageType) Frame_head* p = (Frame_head*)pBuffer;unsigned int timeoutNum = *(unsigned int*)pBuffer;switch (messageType)/网络层要发送一帧数据时case MSG_TYPE_SEND : bufferlast_buffered_frame % BUFFER_SIZE.head = *p;bufferlast_buffered_frame % BUFFER_SIZE.size = bufferSize;+ last_buffered_frame;/窗口数未达上限,则发送当前缓存帧,更新窗口上界if (last_buffered_frame - expect_frame ack); cout receive ack : ack endl; for (int i = expect_frame; i next_frame; + i)unsigned int exp_ack = ntohl(bufferi % BUFFER_SIZE.head.seq);cout exp_ack : exp_ack = exp_ack)+ expect_frame;if (next_frame last_buffered_frame)SendFRAMEPacket(unsigned char*)(&buffernext_frame % BUFFER_SIZE), buffernext_frame % BUFFER_SIZE.size);+ next_frame;else break;return 0;/超时 case MSG_TYPE_TIMEOUT : cout time out : timeoutNum endl;/超时重发for (int i = expect_frame; i frameNum) continue;cout frameNum endl;SendFRAMEPacket(unsigned char*)(&bufferi % BUFFER_SIZE), bufferi % BUFFER_SIZE.size);return 0; default : break;return -1;/* 选择性重传测试函数*/int stud_slide_window_choice_frame_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人与家教合同范本
- 加工定做印刷合同范本
- 项目机器购买合同范本
- 代办管道维修合同范本
- 劳动合同范本 景区
- 种植基地订单合同范本
- 电台广告合同范本
- 混合痔外剥内扎术后护理查房
- 回归热脾区叩击禁忌护理查房
- 内部调岗合同
- 《武汉大学分析化学》课件
- 医学影像学与辅助检查
- 电力工程竣工验收报告
- 《HSK标准教程1》第4课课件
- 双J管健康宣教
- 如何提高美术课堂教学的有效性
- 水电站新ppt课件 第一章 水轮机的类型构造及工作原理
- 护理查对制度课件
- 市政工程占道施工方案
- GB/T 39965-2021节能量前评估计算方法
- GB/T 20671.1-2006非金属垫片材料分类体系及试验方法第1部分:非金属垫片材料分类体系
评论
0/150
提交评论