《ARQ协议模拟实现课程设计报告.docx》由会员分享,可在线阅读,更多相关《ARQ协议模拟实现课程设计报告.docx(23页珍藏版)》请在优知文库上搜索。
1、课程设计报告学院:*专业名称:软件工程课程名称:网络技术课程设计课程代码:*所在班级:*学号:*姓名:fccc*c*c课题名称:ARQ协议模拟实现任课老师:*完成时间:2023第1章试验介绍11.l试验目的1第2章协议介绍12.1停止等待协议的简洁介绍(ARQ)12.2停等协议中相关事务的介绍12.3连续ARQ协议简述22. 3.1介绍23. 3.2*i2第3章试验环境34. 1试验环境3第4章停止等待ARQ协议35. 1试验内容34.2试验步骤44.3停等协议的模拟实现44.4试验结果9第5章连续ARQ协议125.1试验内容125.2试验设计及分析125.2.1窗口机制总体设计及分析125.
2、2.2协议选择及分析135.2.3发送方与接收方设计流程135.3程序测试18引言ARQ协议中,发送方每发送一个字符便要启动计时器,在规定时间内,若发送方未收到接收方返回的确认信息,则认为超时,需重发原字符。经过思索,我通过for循环反复读取file2文件实现了这确定时功能,而循环的次数则确定定时器的时间。此外还可利用c+语言自带的timeO函数来实现计时功能。此外,为便利读取中间结果,file2文件的内容每次都会更新,并且接受简洁的字符代表困难的字符串,这些简化都使程序更加简洁,但并未影响整个模拟功能的实现。为了更加流畅地更新、利用文件中的数据,senderO函数调用了receiver()函
3、数,以刚好对文件数据进行接收端的相应处理,以供发送端运用。从而模拟实现整个发送接收过程。第1章试验介绍1. 1试验目的(1)驾驭停止等待协议的基本原理(2)理解数据链路层的主要功能(数据出错限制,数据重复限制,数据丢失限制等等)(3)分析简洁的协议数据单元(4)驾驭停止等待协议的运行机制(5)了解连续ARQ协议(6)驾驭滑动窗口的工作机制第2章协议介绍2. 1停止等待协议简洁介绍(ARQ):停止等待协议是数据链路层的几个协议中最基本的协议,是数据链路层各种协议的基础。此试验是基于winsock编程,是在VC+6.0的windows界面下和限制台下实现的。它接受客户机/服务器(C/S)模型。停止
4、等待协议就是通过双方的收发数据而达到相互通信的目的。在通信时,当收方收到一个正确的数据帧后,便会向发送方发送一个确认帧ACK,表示发送的数据正确接收。当发送方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量限制。由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。为了保证数据的正确性和完整性,接收方在收到数据后,会用确定的方法对接收到的数据进行差错检验,所以接收方很简洁检测出收到的数据帧是否出现差错。当接收方发觉收到的数据出现差错时,就会向发送方发送一个否认帧NAK,表示对方发送的数据错误。发送方会依据接收方发来的信息做出相应的操作。接受这样的有
5、效的检错机制,数据链路层可以对上面的网络层供应了牢靠的传输的服务。2. 2停等协议中相关事务的介绍帧丢失:有时,链路上的噪声干扰很严峻,或者由于其他的一些缘由,接收方收不到发送方发送过来的数据帧,这种状况称为数据帧丢失。发生数据帧丢失时,接收方自然不会向发送方发送任何应答帧。假如发送方要等收到收方的应答信息后再发送下一个数据帧,那么双方将恒久等下去,这样就出现了死锁现象。为了解决这个问题,可在发送方发送完一个数据帧后,就启动一个超时定时器。若到了超时定时器所设置的重发时间仍收不到收方的任何应答帧,则发送方就重传前面所发送的这一数据帧。假如在重传时间内收到确认信息,则将超时定时器清零并停止计时。
6、一般的时间设置为略大于“从发完数据帧到收到确认帧所需的平均时间二帧重复:若丢失的是应答帧,则超时重发将会使接收方收到两个同样的数据帧。由于接收方无法识别重复的数据帧,因而在接收方收到的数据中出现了一种接收序号差错,称为重复帧。要解决这个问题,必需使每一个数据帧带上不同的发送序号。若接收方收到序号相同的数据帧,就表明出现了重复帧。这时接收方应当丢弃这个重复帧,同时向发送方发送一个确认帧。因为接收方这时已经知道发送方没有收到上一次发送的确认帧。大家都知道,任何一个编号系统的序号所占用的比特数应是有限的。经过一段时间,发送序号就可重复。运用序号占用的比特数越少,数据传输的额外开销就越少。对于停等协议
7、,由于每发送一个数据帧就停止等待,用一个比特来编号就够了,也就是说序号轮番运用O和葭帧出错:数据在传输的过程中,不行能保证100%的正确传输,而错误的数据帧对于接收方来说是没有什么意义的。为了避开收到错误的数据帧,接收方在收到数据帧后,就会接受确定的机制对收到的数据帧进行校验,当校验数据正确时,会向高层传送该帧,反之,则丢弃该帧,从而对上面的网络层供应了传输的服务。2. 3连续ARQ协议简述2.1.1 介绍问退n帧(go-back-n)GBN,以及选择性重传(SeIeCtiVerePeat)ARQ,两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流淌,
8、因此又称其为连续ARQ协议。连续重发请求ARQ方案是指发送方可以连续发送一系列信息帧,即不用等前一帧被确认便可接着发送下一帧,效率大大提高。但在这种重发请求方案中,须要在发送方设置一个较大的缓冲存储空间(称作重发表),用以存放若干待确认的信息帧。当发送方收到对某信息帧的确认帧后,便可从重发表中将该信息帧删除。所以,连续重发请求ARQ方案的链路传输效率大大提高,但相应地须要更大的缓冲存储空间。在这一协议中,当发送站点发送完一个数据帧后,不是停下来等待应答帧,而是可以连续再发送若干个数据帧。假如在此过程中又收到了接收端发来的应答帧,那么还可以接着发送数据帧。由于削减了等待时间,整个通信的吞吐量就提
9、高了。ARQ代表的是自动重传请求(AmoRepeatreQuest,ARQ),而GBN与选择重传都属于其中。其中BGN的接收窗口是1,且具有累计确认的特点。而选择重传没有累计确认的特点。2.1.2 特点与原理连续重发请求ARQ方案的特点如下:(1)发送方连续发送信息帧,而不必等待确认帧的返回;(2)在重发表中保存所发送的每个帧的备份;(3)重发表按先进先出(FIFO)队列规则操作;(4)接收方对每一个正确收到的信息帧返回一个确认帧,每一个确认帧包含一个惟一的序号,随相应的确认帧返回;(5)接收方保存一个接收次序表,包含最终正确收到的信息帧的序号。当发送方收到相应信息帧的确认后,从重发表中删除该
10、信息帧的备份;(6)当发送方检测出失序的确认帧(即第N号信息帧和第N+2号信息帧的确认帧已返回,而N+1号的确认帧未返同)后,使重发未被确认的信息帧图27连续ARQ协议工作原理第3章试验环境3. 1试验环境在ViSUalstudio环境下,接受c+程序设计语言,模拟实现ARQ协议。第4章停止等待ARQ协议4. 1试验内容(1) Pl模拟发送方:首先从界面读取待发送字符(每接受一个字符的输入),保存到文件filel.txt中,并启动计时器;(2) p2模拟接收方,它从filel.txt中查找是否有新字符到来,并供应模拟界面给用户选择:1、Ack-接收该字符2、NAK-)丢弃3、无反应一导致超时将
11、用户选择的结果记录到file2.txt中;接收的字符保存到file3.txt中;(3) PI等待接收方应答:读取file2.txt确定下面的操作:1、假如是ACK,则接着接收用户输入;2、假如是NAK,则重传该字符;3、假如超时仍没有新的ACK或NAK,则重传该字符。注:filel.txt要发送的串,file2.txt保存中间结果,file3.txt接受的串,由试验者自己生成。4.2试验步骤(1)编写receiver()函数模拟接收端的相应处理过程;(2)编写senderO函数模拟发送端相应处理过程,其中sender函数调用了receiver()函数;(3)编写主函数main()函数,调用Se
12、nder()和receiver()函数来实现整个发送接收过程,进而模拟了ARQ协议的实现。4.3停等协议的模拟实现ttincludettincludeinclude下面是两个函数原型voidreceiver(int,fstream&,fstream&,ofstream&);接收方voidsender(fstream&datafilel,fstreamdatafile2,ofstream&datafile3);发送方voidmain()(fstreamdatafilel,datafile2;ofstreamdatafile3;CoUt。下面起先数据的传输,留意:传输数据以“!”结束cndl;se
13、nder(datafilel,datafile2,datafile3);CoUt数据传输结束“endl;)接收端voidreceiver(inti,fstream&datafilel,fstreamdatafile2,ofstream&datafile3)(charr,re;datafilel.open(,/filelz,ios:outios:in);if(!datafilel)(COUt”文件打开失败!=A,&r=JZ)若读取的字符有效,即正确接受字符(datafile3.OPeri(filc3”,ios:app);if(!datafile3)(CoUt”文件打开失败!,endl;exit(
14、O);)datafile3r;将收到的字符写入文件filc3COUt字符已正确接收“cndl;CoUt。准备发送确认信息ACKKcndl;COUt请输入A,并以回车结束re;datafile2.open(z,file2z,ios:out);if(!datafile2)COUt”文件打开失败!endl;exit(O);datafilc2re;将确认信息写入file2)if(rZ)读取的字符无效,即接受字符出错(CoUt接收字符错误。Cnd1;COUt准备发送信息NAK”re;datafile3.OPen(file3);if(!datafile3)CoUt文件打开失败!endl;exit(O);datafilc3rc;返回出错信息,将N,写入file3)datafilel.close();datafile2.close();