ARQ协议模拟实现课程设计报告

上传人:油条 文档编号:28512082 上传时间:2018-01-17 格式:DOC 页数:24 大小:432.98KB
返回 下载 相关 举报
ARQ协议模拟实现课程设计报告_第1页
第1页 / 共24页
ARQ协议模拟实现课程设计报告_第2页
第2页 / 共24页
ARQ协议模拟实现课程设计报告_第3页
第3页 / 共24页
ARQ协议模拟实现课程设计报告_第4页
第4页 / 共24页
ARQ协议模拟实现课程设计报告_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《ARQ协议模拟实现课程设计报告》由会员分享,可在线阅读,更多相关《ARQ协议模拟实现课程设计报告(24页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告学 院: *专业名称: 软件工程课程名称: 网络技术课程设计课程代码: *所在班级: *学 号: *姓 名: *课题名称: ARQ 协议模拟实现任课教师: *完成时间: 2013目 录第 1 章 实验介绍.11. 1 实验目的1第 2 章 协议介绍.12. 1 停止等待协议的简单介绍(ARQ).12. 2 停等协议中相关事件的介绍.12. 3 连续 ARQ 协议简述.22. 3.1 介绍.22. 3.2 特点原理.2第 3 章 实验环境.33. 1 实验环境3第 4 章 停止等待 ARQ 协议.34. 1 实验内容.34. 2 实验步骤.44. 3 停等协议的模拟实现.44. 4

2、实验结果.9第 5 章 连续 ARQ 协议.125. 1 实验内容.125. 2 实验设计及分析.125. 2.1 窗口机制总体设计及分析.12 5. 2.2 协议选择及分析.135. 2.3 发送方与接收方设计流程.135. 3 程序测试.18引 言ARQ 协议中,发送方每发送一个字符便要启动计时器,在规定时间内,若发送方未收到接收方返回的确认信息,则认为超时,需重发原字符。经过思考,我通过 for 循环反复读取 file2 文件实现了这一定时功能,而循环的次数则决定定时器的时间。此外还可利用 c+语言自带的 time()函数来实现计时功能。此外,为方便读取中间结果,file2 文件的内容每

3、次都会更新,并且采用简单的字符代表复杂的字符串,这些简化都使程序更加简洁,但并未影响整个模拟功能的实现。为了更加流畅地更新、利用文件中的数据,sender()函数调用了receiver()函数,以及时对文件数据进行接收端的相应处理,以供发送端使用。从而模拟实现整个发送接收过程。0第 1 章实验介绍11 实验目的(1)掌握停止等待协议的基本原理(2)理解数据链路层的主要功能(数据出错控制,数据重复控制,数据丢失控制等等)(3)分析简单的协议数据单元(4)掌握停止等待协议的运行机制(5)了解连续 ARQ 协议(6)掌握滑动窗口的工作机制第 2 章协议介绍2. 1 停止等待协议简单介绍(ARQ):

4、停止等待协议是数据链路层的几个协议中最基本的协议,是数据链路层各种协议的基础。此实验是基于 winsock 编程,是在 VC+6.0 的 windows 界面下和控制台下实现的。它采用客户机/服务器(C/S)模型。停止等待协议就是通过双方的收发数据而达到相互通信的目的。在通信时,当收方收到一个正确的数据帧后,便会向发送方发送一个确认帧 ACK,表示发送的数据正确接收。当发送方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量控制。由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。为了保证数据的正确性和完整性,接收方在收到数据后,会用一定的方法对接

5、收到的数据进行差错检验,所以接收方很容易检测出收到的数据帧是否出现差错。当接收方发现收到的数据出现差错时,就会向发送方发送一个否认帧 NAK,表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。采用这样的有效的检错机制,数据链路层可以对上面的网络层提供了可靠的传输的服务。2. 2 停等协议中相关事件的介绍帧丢失:有时,链路上的噪声干扰很严重,或者由于其他的一些原因,接收方收不到发送方发送过来的数据帧,这种情况称为数据帧丢失。发生数据帧丢失时,接收方自然不会向发送方发送任何应答帧。如果发送方要等收到收方的应答信息后再发送下一个数据帧,那么双方将永远等下去,这样就出现了死锁现象。为

6、了解决这个问题,可在发送方发送完一个数据帧后,就启动一个超时定时器。若到了超时定时器所设置的重发时间 tout仍收不到收方的任何应答帧,则发送方就重传前面所发送的这一数据帧。如果在重传时间 tout内收到确认信息,则将超时定时器清零并停止计时。t out一般的时间设置为略大于“从发完数据帧到收到确认帧所需的平均时间” 。1帧重复:若丢失的是应答帧,则超时重发将会使接收方收到两个同样的数据帧。由于接收方无法识别重复的数据帧,因而在接收方收到的数据中出现了一种接收序号差错,称为重复帧。要解决这个问题,必须使每一个数据帧带上不同的发送序号。若接收方收到序号相同的数据帧,就表明出现了重复帧。这时接收方

7、应当丢弃这个重复帧,同时向发送方发送一个确认帧。因为接收方这时已经知道发送方没有收到上一次发送的确认帧。大家都知道,任何一个编号系统的序号所占用的比特数应是有限的。经过一段时间,发送序号就可重复。使用序号占用的比特数越少,数据传输的额外开销就越少。对于停等协议,由于每发送一个数据帧就停止等待,用一个比特来编号就够了,也就是说序号轮流使用 0 和 1。帧出错:数据在传输的过程中,不可能保证 100%的正确传输,而错误的数据帧对于接收方来说是没有什么意义的。为了避免收到错误的数据帧,接收方在收到数据帧后,就会采用一定的机制对收到的数据帧进行校验,当校验数据正确时,会向高层传送该帧,反之,则丢弃该帧

8、,从而对上面的网络层提供了传输的服务。2. 3 连续 ARQ 协议简述2.3.1 介绍回退 n 帧(go-back-n )GBN,以及选择性重传(selective repeat)ARQ ,两种协议是 滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续 ARQ 协议。 连续重发请求 ARQ 方案是指发送方可以连续发送一系列 信息帧,即不用等前一帧被确认便可继续发送下一帧,效率大大提高。但在这种重发请求方案中,需要在发送方设置一个较大的缓冲 存储空间(称作重发表) ,用以存放若干待确认的信息帧。当发送方收到对某信息帧的确认帧后,便可从重发表中将

9、该信息帧删除。所以,连续重发请求 ARQ 方案的链路 传输效率大大提高,但相应地需要更大的缓冲存储空间。 在这一协议中,当发送站点发送完一个 数据帧后,不是停下来等待应答帧,而是可以连续再发送若干个数据帧。如果在此过程中又收到了接收端发来的应答帧,那么还可以接着发送数据帧。由于减少了等待时间,整个通信的 吞吐量就提高了。 ARQ 代表的是 自动重传请求(Auto Repeat reQuest,ARQ) ,而 GBN 与选择重传都属于其中。其中 BGN 的接收窗口是 1,且具有累计确认的特点。而选择重传没有累计确认的特点。2.3.2 特点与原理连续重发请求 ARQ 方案的特点如下:(1)发送方连

10、续发送信息帧,而不必等待确认帧的返回;(2)在重发表中保存所发送的每个帧的备份;(3)重发表按先进先出(FIFO)队列规则操作;(4)接收方对每一个正确收到的信息帧返回一个确认帧,每一个确认帧包含一个惟一的序号,随相应的确认帧返回;(5)接收方保存一个接收次序表,包含最后正确收到的信息帧的序号。当发送方收到相应信息帧的确认后,从重发表中删除该信息帧的备份;2(6)当发送方检测出失序的确认帧(即第 N 号信息帧和第 N+2 号信息帧的确认帧已返回,而 N+1 号的确认帧未返回)后,便重发未被确认的信息帧图 2-1 连续 ARQ 协议工作原理第 3 章实验环境3. 1 实验环境 在 visual

11、studio 环境下,采用 c+程序设计语言,模拟实现 ARQ 协议。第 4 章停止等待 ARQ 协议4. 1 实验内容(1)p1 模拟发送方:首先从界面读取待发送字符(每接受一个字符的输入) ,保存到文件 file1.txt 中,并启动计时器;(2)p2 模拟接收方,它从 file1.txt 中查找是否有新字符到来,并提供模拟界面给用户选择:1、 Ack接收该字符2、 NAK-丢弃3、无反应-导致超时将用户选择的结果记录到 file2.txt 中;接收的字符保存到 file3.txt 中;(3)p1 等待接收方应答:读取 file2.txt 决定下面的操作:1、如果是 ACK,则继续接收用户

12、输入;2、如果是 NAK,则重传该字符;3、如果超时仍没有新的 ACK 或 NAK,则重传该字符。3注:file1.txt 要发送的串, file2.txt 保存中间结果, file3.txt 接受的串,由实验者自己生成。4. 2 实验步骤(1)编写 receiver()函数模拟接收端的相应处理过程;(2)编写 sender()函数模拟发送端相应处理过程,其中 sender 函数调用了 receiver()函数;(3)编写主函数 main()函数,调用 sender()和 receiver()函数来实现整个发送接收过程,进而模拟了 ARQ 协议的实现。4. 3 停等协议的模拟实现#includ

13、e #include #include /下面是两个函数原型void receiver(int ,fstream /接收方void sender(fstream &datafile1,fstream &datafile2,ofstream /发送方void main()fstream datafile1,datafile2;ofstream datafile3;cout=A&rre;datafile2.open(file2,ios:out);if(!datafile2)coutZ)/读取的字符无效,即接受字符出错coutre;datafile3.open(file3);if(!datafile3)5couts;datafile1.open(file1,ios:out|ios:in);if(

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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