滑动窗口地仿真协议详情

上传人:夏** 文档编号:476130561 上传时间:2022-08-23 格式:DOC 页数:15 大小:252KB
返回 下载 相关 举报
滑动窗口地仿真协议详情_第1页
第1页 / 共15页
滑动窗口地仿真协议详情_第2页
第2页 / 共15页
滑动窗口地仿真协议详情_第3页
第3页 / 共15页
滑动窗口地仿真协议详情_第4页
第4页 / 共15页
滑动窗口地仿真协议详情_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《滑动窗口地仿真协议详情》由会员分享,可在线阅读,更多相关《滑动窗口地仿真协议详情(15页珍藏版)》请在金锄头文库上搜索。

1、word计算机网络课程设计书 学 院计算机与信息工程学院专 业网络工程课程名称计算机网络题 目滑动窗口协议仿真完成期限自2015年6月23日至2015年6月29日共1周内容与任务一、 项目的目的 掌握滑动窗口协议的工作原理,并能够用所学计算机高级语言进展编程模拟其运行过程;培养学生的动手实践和思考能力。二,项目任务的主要内容和要求(1)本次设计任务是根据滑动窗口协议的工作原理的平台上用C+语言编写一个根本TCP滑动窗口协议的模拟程序。 (2)要求该程序能够实现滑动窗口协议的发送和接收数据帧功能,在此功能上表现滑动窗口协议的运作。(3) 程序按照滑动窗口协议实现端对端的数据传送。包括协议的各种策

2、略,如包丢失、停等应答、超时等都应有所仿真实现;(4) 显示数据传送过程中的各项具体数据。双方帧的个数变化,帧序号,发送和承受速度,暂停或重传提示等;三、 项目设计研究思路(1) 查阅相关资料,理解滑动窗口协议的工作原理; (2) 设计滑动窗口协议实现端对端数据传送的功能流程图; (3) 编写代码实现滑动窗口协议工作的模拟程序,包括包丢失、停等应答、超时等; (4) 测试程序功能的实现情况。四、 具体成果形式和要求 (1)滑动窗口协议实现端对端数据传送的模拟程序。 (2)按照要求撰写课程设计报告并准备辩论。进度安排起止日期工作内容了解网络协议编程的根本知识;了解滑动窗口协议的工作机制;使用编程

3、语言编写一个滑动窗口协议的模拟程序,按要某某现程序。最后汇总,调试,辩论主要参考资料1 谢希仁. 计算机网络M. 4版. :电子工业, 2003.2 李仁发.何彦. 基于虚拟实验方法的滑动窗口协议分析J. 系统仿真学报. 2002. 8 (14) ; 1026 - 1063.3 李建中,X冬冬. 滑动窗口规模的动态调整算法J. 软件学报. 2004. 12 (15) : 1800 - 1814.4 王栩,李建中,王伟平. 基于滑动窗口的数据流压缩技术与连续查询处理方法 J . 计算机研究与开展. 2004. 10 (41) : 1639- 1644.5 特南鲍姆. 计算机网络第四版. 清华指导

4、教师意见签字: 年月日系教研室主任意见签字: 年月日 / 计算机网络课程设计说明书封面 学院名称: 计算机与信息工程学院 班级名称:网络工程一班 学生某某:学 号: 201321 题 目:滑动窗口协议仿真 指导教师姓 名:邵雪梅 起止日期: 2015.6.232015.6.29 第一局部:正文局部一,选题背景 早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不与接收,这就造成数据的丢失。因此就有了滑动窗口机制

5、来解决这些问题。早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。这时接收方只能对前2个帧发出确认。发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。为了解决这个问题,又提出了选择重传协议。当接收方发现某帧

6、出错后,继续承受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。本文主要介绍如何根据滑动窗口协议的原理,在Visual C+的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。本次程序设计分两局部:第一局部是发送方,第二局部是接收方。通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以与滑动窗口协议的工作机制。二、设计理念2.1 滑动窗口协议工作原理TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗

7、口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的局部。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新确实认到来,窗口不断向右滑动。滑动窗口算法工作过程如下:首先,发送方为每1帧赋一个序号sequence number,记作SeqNum。现在,我们忽略SeqNum是由有限大小的头部字段实现的事实,而假设它能无限增大。发送方维护3个变量:发送窗口大小send window size,记作SWS,给出发送方能够发送但未确认的帧数的上界;LAR表示最近收到确实认帧last acknowled

8、gement received的序号;LFS表示最近发送的帧last frame sent的序号,发送方还维持如下的不变式:LAR-LFSSWS。 2-1滑动窗口协议工作图窗口协议算法有三个功能:l 在不可靠链路上可靠地传输帧l 保持帧的传输顺序l 支持流量控制2.2 选择重传协议在选择重传协议中,当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过

9、程如下列图。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。 2-2 选择重传协议原理图三、过程论述(1发送方程序流程图:3-1发送方程序流程图 2接收方程序流程图:收到的包是否含有Push标志?收到包的序号与等待接收的序号是否一致?收到包的序号在接收窗口X围内?NY直接提取数据,提前应用进程Y入接收队列YN处理在接收队列中的包如果是普通包要判断序号,或者进展拆包,组包操作完毕N3-2承受方程序流程图3.2 功能实现1发送方程序:本程序设有四个变量:一是窗口大小变量,二是第一帧序列号变量,三是最近发送的帧变量,最后一个是最近收到确实认帧变量。swpstate1.head=NULL;

10、 /变量初始值为空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_slot);if(!swpstate1.sendq) exit(1);sendq_rear-next=NULL;printf(请输入窗口大小:);scanf(%ld,&swpstate1.sws); /输入窗口大小swpstate1.rws=swpstate1.sws; /把窗口大小的值赋给变量if (swpstate1.sws0) printf(请输入第一帧的序列号:); scanf(%ld,&swpstate1.hdr.seqnu

11、m); /输入第一帧序列号swpstate1.nfe=swpstate1.hdr.seqnum; /把第一帧的值放进缓冲池内sendp=(struct sendq_slot*) malloc (size of(struct sendq_slot); if(!sendp) exit(1);sendp-msg=swpstate1.hdr.seqnum;sendp-timeout=1;sendp-next=NULL;sendq_rear-next=sendp;sendq_rear=sendp;-swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum; /最近

12、发送的帧取值swpstate1.lar=swpstate1.hdr.seqnum; /最近收到确实认帧取值dowhile(swpstate1.sws0) /当窗口大小大于0时,执行以下的循环sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot); if(!sendp) exit(1); sendp-msg=swpstate1.lfs+1; /如果输入的帧序号大于之前帧序号,那么窗口向前滑动 sendp-timeout=1; /时延为1 sendp-next=NULL; sendq_rear-next=sendp; sendq_rea

13、r=sendp; -swpstate1.sws; +swpstate1.lfs;swpstate1.hdr.acknum=0; /ACK清空swpstate1.hdr.flags=0; /存储缓冲池清空printf(最近收到的ACK的帧序号:%ldn,swpstate1.lar); /输出最近收到的ACK帧序号printf(最近发送的帧序号发送新帧后:%ldn,swpstate1.lfs);/输出最近发送帧序号2接收方的接收原如此从总体上看是先判断输入的数据帧是否在接收X围之内,假如是,如此继续判断是否符合其他接收条件;假如不是,如此马上丢弃该数据帧,不再进展其他条件的判断。struct sendq_slot *sendq_rear,*sendp,*p3,*p4; /设定变量struct recvq_slot *recvp,*recvq_rear,*p1,*p2;if(swpstate1.hdr.flags=0)/上次输入的数据帧被放置在缓存区,输入区被清空do /如果继续接收数据帧如此实施下面循环printf(请输入收到的数据帧号:);scanf(%ld,&a);if(a=swpstate1.nfe&anext=NULL;swpstate1.head=

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号