文档介绍:该【gobackn协议实验报告 】是由【小屁孩】上传分享,文档一共【20】页,该文档可以免费在线阅读,需要了解更多关于【gobackn协议实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..gobackn协议实验报告--第1页一,描述本次实验的任务、内容和实验环境。1,实验内容和任务:利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下。两站点之间无差错双工通信。信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度在240~256字节范围。深刻理解数据链路层的字节填充方式的成帧技术,误码检测的CRC校验技术,以及滑动窗口的工作机理。对参数进行设计,充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运行进行验证。2,实验设备环境:WindowsXP环境PC机,MicrosoftVisualC++。二,协议设计:(1)设计该协议的目的,基本原理该实验协议包括物理层,数据链路层和网络层。本实验主要设计数据链路层协议,实现有噪声环境下高信道利用率传输,采用了回退n帧技术的协议。接受方窗口大小为1,发送方窗口大小为N。通过捎带确认(piggybacking)来完成可靠的数据通信;由于出现信道误码而导致收帧出错时,接受方会丢弃所有的后续帧,待定时器超时后发送方重发。首先从网络层接受要发送的数据包,将之分拆成数据帧;然后按成帧方案完成分帧,加校验码,加ack等操作;再进行适当的流量判断和拥塞控制;最后启动定时器将之传递给物理层。数据帧经信道传送给接受方,接受方数据链路层执行与成帧相逆的操作;处理ack信息,终止定时器(或启动ack定时器,ack成帧传送);判断是否为预期数据,数据是否出错,提交给网络层。(2)成帧方案,帧边界和转义字符的定义及转义方法使用的成帧方案:含字节填充的分界符法,即让每一帧都用一些特殊的字节(FLAG)作为开始和结束。当有效载荷域中含有标志字节或转义字节时,在每个在有效载荷域中出现的标志字节或转义字节前均要加一个转义字节(ESC)。接受端的数据链路层在将数据送给网络之前删除掉转义字节。gobackn协议实验报告--第1页:..gobackn协议实验报告--第2页一个数据帧如图所示:起始标志字节本帧序号捎带确认序号有效数据校验码结束标志字节其中有效数据和校验码可能含有转义字符。(3)帧中各个字段的定义和编码,计算CRC校验和的多项式定义帧的定义编码:帧中的第一比特为开头FLAG,第二比特是帧的类型,共定义了{data,ack,nak}frame_kind三种类型,用枚举常量表述,第三比特是顺序编码,用于确定到达帧的顺序,第四比特是ACK捎带确认讯息,记录了当前已收到帧的确认情况,这是数据帧的头部。若为数据帧,从第五比特开始为网路层的数据,到网路层包裹信息结束后,接上4比特的CRC校验讯息,后有一结束字符FLAG表明该帧结束。CRC校验数:CRC校验数据由函数crc32()产生,函数crc32()返回一个32位整数为数据生成CRC-32校验和,并且把这32比特校验和附在数据字节之后。多项式定义:采用的CRC校验方案为CRC-32,生成多项式为:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1校验和附加在数据帧尾部,接受方用带校验和的数据来逻辑除以生成多项式,余数为零则数据无误码,反之有误码等待发送方重传。(4)协议工作时两个站点之间信息交换的过程控制,尤其是发生误码条件下的控制方案协议工作时,两个站点通过互发数据包交换数据,而控制讯息则稍带在数据讯息中传递,当遇到超时情况时,则主动发送空数据包以提供讯息。当出现帧丢失时,如收到帧的序号有跳跃,或者出现CRC校验出错丢弃了某帧,会主动发送NAK否定帧,提示重传,接收方丢弃所有的后续帧。若长期未产生放送消息,则出现ACK超时事件,主动发送ACK帧提示确认,对方收到确认后,滑动窗口继续发送,若一直未收到确认讯息,则出现数据帧超时事件,发送方会自动重发未确认帧。,模块之间的调用关系和功能,程序流程。(1)数据结构:数据结构是整个程序的要点之一,程序维护者充分了解数据结构就可以对主要算法和处理流程有个基本的理解。描述程序中自定义结构体中各成员的用途,定义的全局变量和主函数中的变量的变量名和变量所起的作用。采用字符数组结构来存放数据帧:gobackn协议实验报告--第2页:..gobackn协议实验报告--第3页typedefunsignedcharseq_nr;typedefunsignedcharpacket[PKT_LEN];typedefunsignedcharframe_kind;typedefstructFRAME{frame_kindkind;/*FRAME_DATA*/seq_nrack;seq_nrseq;packetinfo;unsignedintpadding;}frame;其中:framekind是帧的类型。Ack捎带确认数据帧是否正确传到Seq是数据帧传输的序号info是帧传输的内容Padding是帧经过CRC校验之后所添加的内容定义的全局变量:staticintphl_ready表示物理层的状态intout_buffer_len[MAX_SEQ+1]从网络层得到的数据包的长度主函数中的变量的变量名和变量:intevent接收方等待的发生事件intarg物理层到达的字数packetbuffer[MAX_SEQ+1];发送方的数据包缓存区seq_nrnbuffered当前帧号seq_nrnext_frame_to_send下一个要发送的帧的序号seq_nrack_expected期望收到的确认seq_nrframe_expected;期望接收到对方的帧的编号framer;变量帧(2)模块结构:给出程序中所设计的子程序所完成的功能,子程序每个参数的意义。给出子程序之间的程序调用关系图。gobackn协议实验报告--第3页:..gobackn协议实验报告--第4页函数between(seq_nra,seq_nrb,seq_nrc)用于判断收到的ACK序号是否在发送窗口内。a为下限,b为ack序号,c为上限。函数send_to_physical(unsignedchar*out_buf,intslen)用字符填充方式将帧发送到物理层函数recv_from_physical(unsignedchar*in_buf,intarg)用于从物理层接收一个字节并做处理函数send_data_frame(frame_kindfk,seq_nrframe_nr,seq_nrframe_expected,packetbuffer)用于发送从网络层得到的数据函数调用图为:主函数mainbetweensend_to_physrecv_from_phsend_data_fram(3)算法流程:画出流程图,描述算法的主要流程。gobackn协议实验报告--第4页:..gobackn协议实验报告--(1)描述所实现的协议软件是否实现了有误码信道环境中无差错传输功能。能实现协议软件是否实现了有误码信道环境中无差错传输功能,采用了CRC校验和重传技术是错误得以被发现和纠正。(2)程序的健壮性如何,能否可靠地长时间运行。程序健壮性较好,在高负荷和高误码率等条件下均能工作。在较低误码率的信道条件下,该程序运行平稳,没有出现任何差错,健壮性良好,在高误码率的信道条件下,程序运行有时会出现中断,但大多数时候运行时间较长,故本程序健壮性良好。gobackn协议实验报告--第5页:..gobackn协议实验报告--第6页(3)协议参数的选取:滑动窗口的大小,重传定时器的时限,ACK搭载定时器的时限,这些参数是怎样确定的?根据信道特性数据,分组层分组的大小,以及你的滑动窗口机制,给出定量分析,详细列举出选择这些参数值的具体原因。本次实验中物理层提供了一种字节流传输服务,为了成帧,使用了字节填充技术。分组长度为240~256字节。滑动窗口的大小:该参数的选择直接涉及到信道利用率和数据拥塞的问题;若太小,会导致信道利用率很低,信道中长时间没有数据传送;若太大,数据发送过快,会造成接受方数据链路层来不及处理,数据物理层及信道发生拥塞现象导致数据丢失,出错率增大。在go_back_n协议中(假设接受方一直有数据发送,即无ack定时器超时现象),滑动窗口的大小M,信道传输时延a,发送速率c,帧大小f在满足如下关系时信道利用率(M*(f/c)/[2a+2(f/c)])接近100%:M>=[2a+2*(f/c)]/(f/c);由于实际数据传送很可能在某段时间类接受方无数据反送,涉及ack帧单独传送问题,故一般信道利用率不可能达到100%,但M的选择至少要满足公式。至于防止M过大的问题,可通过实际测试的结果分析来得到合适的M值。最终,我们选择M值为31,效果较好。重传定时器的时限:该参数的选择涉及到重传的相应时间,若改时间选择过大,则会导致重传等待的时间过久,若时间选择过小,则将导致较为频繁的重传,这两种情况均将导致信道利用率的下降,经过实际检测,当wait_time设为1700ms时,效果较好。Ack搭载定时器的时限:若该值选择较小,则将导致频繁重传ack帧,虽然我们在程序中将ack帧的长度设定为8(最小长度),但频繁的重传仍将降低信道利用率;若将该值设置过大,则发送方将长时间得不到ack确认信号,严重时将导致重传,降低利用率。经过实际测试,ack_time选择为240-300ms内,效果较好。(5)理论分析:根据所设计的滑动窗口工作机制(Go-Back-N),推导出在无差错信道环境下分组层能获得的最大信道利用率;推导出在有误码条件下重传操作及时发生等理想情况下分组层能获得的最大信道利用率。给出理论推导过程。理论推导的目的是得到信道利用率的极限数据。为了简化有误码条件下的最大利用率推导过程,可以对问题模型进行简化,比如:假定超时重传的数据帧的回馈ACK帧可以100%正确传输,但是简化问题分析的这些假设必须不会对整个结论产生较大的误差。由于需要携带帧讯息,%,由于信道的最大比特率为8000bps,可得出每传输一个字节耗时1ms,每帧的附加讯息固定为10,耗时10ms,若出现转义字符,则可能增加时间,gobackn协议实验报告--第6页:..gobackn协议实验报告--第7页在ESC/FLAG模式中传输的平均250个字符需要两倍的传输空间即极限值500,此时的信道利用率的极限值是49%,若平均每个错帧重传10次,利用率将下降为40%。(6)实验结果分析:你的程序运行实际达到了什么样的效率,比对理论推导给出的结论,有没有差距?给出原因。有没有改进的办法?如果没有时间把这些方法付诸编程实施,介绍你的方案。实验所得的结果是无差错条件下分组层能获得的最大信道利用率对于A是50%,对于B是100%。(7)存在的问题:在“表3性能测试记录表”中给出了7种测试方案,在测试中你的程序有没有失败,或者,虽未失败,但表现出来的性能仍有差距,你的程序中还存在哪些问题?在误码率不同的情况下所执行程序的结果截图如下:gobackn协议实验报告--第7页:..gobackn协议实验报告--第8页当参数为u的运行结果:gobackn协议实验报告--第8页:..gobackn协议实验报告--第9页无参数时运行结果为:gobackn协议实验报告--第9页:..gobackn协议实验报告--第10页fu的运行结果:gobackn协议实验报告--第10页:..gobackn协议实验报告--第11页f的的运行结果如下:gobackn协议实验报告--第11页:..gobackn协议实验报告--第12页当参数为fs时的运行结果如下:该图参数为afs:该图参数为bfs:gobackn协议实验报告--第12页:..gobackn协议实验报告--第13页fle的运行结果:该图的参数为afle该图的参数为bflegobackn协议实验报告--第13页:..gobackn协议实验报告--第14页fl时的运行效果如下:gobackn协议实验报告--第14页:..gobackn协议实验报告--第15页f–ber1e-7时的运行效果:gobackn协议实验报告--第15页:..gobackn协议实验报告--第16页当参数为f–ber5e-5时程序运行效果如下:gobackn协议实验报告--第16页:..gobackn协议实验报告--第17页当参数为f–ber5e-4时候的运行效果如下:gobackn协议实验报告--第17页:..gobackn协议实验报告--第18页当参数为f–ber1e-4的时候运行效果如下:该程序存在的主要问题就在于会反复重传未被确认的帧,造成了信道资源的浪费,这可以在实验的结果中看出,在进行较长时间的运行后,信道流量水平趋于平稳,此时的数据和gobackn协议实验报告--第18页:..gobackn协议实验报告--第19页理论之大致相当,说明所确认的问题确实是症结所在。只要能限制其反复重传,就能提高信道利用率。“可研究和探索的问题”,有哪些问题你有了答案或者自己的见解?给出你的结论,并详细阐述你的理由或见解。,它除了能检查出离散错外,还能检查出突发错,CRC校验码具有以下检错能力:CRC校验码能检查出全部单个错;CRC校验码能检查出全部离散的二位错;CRC校验码能检查出全部奇数个错;CRC校验码能检查出全部长度小于或等于K位的突发错;CRC校验码能以[1-(1/2)K-1]的概率检查出长度为(K+1)位的突发错。(1)验证所完成的程序能否在各种情况下都能够正确工作,是软件测试环节的主要目的。(2)表3中列出了七种测试方案,设计这么多种测试方案的目的是检测此程序在不同信道条件下的传输性能。-u是测试成帧方案的效率。无参数时模拟在实际线路中,不连续的收发时的传输性能。-f用于测试信道满负荷时的传输性能。-l,-e,-s用于测试在特殊情境下传输性能。-ber可以改变误码率,从而检验无差错传输的健壮性及性能。%顺利,编辑的程序一次编译就通过,运行一次就正确,那么完成本次实验的代码编写和调试工作大约需要4~6个小时。你花的时间超过了这个预测吗?描述在调试过程中都遇到了哪些问题和解决的过程。(1)完成本次实验的实际上机调试时间是多少?五天,总共约十五个小时。(2)编程工具方面遇到了哪些问题?包括Windows环境和VC软件的安装问题。无。(3)编程语言方面遇到了哪些问题?包括C语言使用和对C语言操控能力上的问题。实验中数据帧采用了字符数组这种数据结构,在函数调用时会用到数组的形参表示,由gobackn协议实验报告--第19页:..gobackn协议实验报告--第20页于需要改变数组的值,此时传送的是数组首地址,属于传引用调用。(4)协议方面遇到了哪些问题?包括协议机制的设计错误,发现协议死锁,或者不能正确工作,协议参数的调整等问题。在确定成帧方案时,有两种可以实现的方案:一种是先给数据加CRC校验码,再添加ESC字符成帧;另一种是先给数据加ESC,再CRC校验,再给CRC加ESC。其中后者先给数据加操作实现较为复杂,但其检错性能更好,前者处理较为简单,,发现实际的效果差别不大,为了代码简介以及减少不必要变量的使用,我们在最终的程序中使用了先加ESC后CRC校验方法。(6)总结本次实验,你在C语言方面,协议软件方面,理论学习方面,软件工程方面等哪些方面上有所提高?在这次实验过程中,我们遇到了较多困难,实际编程调试的时间超出了预期,主要原因是在于我们对go-back-N协议理解得不够透彻所致,同时对本次实验所提供的实验平台也不够熟悉,前期熟悉该实验平台的工作模式也花费了一部分的时间。在实际编程过程中,我们采用了由简到繁,逐步推进的策略,先编写一个最简单一个窗口的停等协议,在慢慢复杂化,编写go-back-N协议。在编写停等协议阶段,我们按照分组成帧,crc校验,定时器重传,ack定时器的顺序编写。由于对窗口数目和缓冲区数目这两个概念的混淆,以及一开始没有很好的明确算法及相应流程,使我们花费了相当长的时间才达到了实现停等协议的目的。在这个过程中,我们解决了关于数据成帧和crc的校验问题。在实现了停等协议之后,我们扩大了缓冲区的数目,着手进行go-back-N协议的编写。在这个阶段,我们主要解决了超时重传和缓冲区数据发送以及ack发送问题、缓冲区数据发送问题。上面便是我们此次实验的一个大体流程,其实在实验过程中,我们还遇到了其他的问题。经过和组员的一起讨论和对程序的大量调试和运行,最终解决问题和完成任务,同时更为重要的是,通过本次实验,我们对go-back-N这一协议的运作过程有了更为深刻的理解。“源书写格式”要求的源书写规范,格式化你的C语言源程序。源打印必须采用Word格式电子版文件“”规定的字体大小和样式,填写好姓名,学号等相关内容,将程序粘贴到文件中替换原源内容,以横版双列打印在A4打印纸上,装订在实验报告的最后。gobackn协议实验报告--第20页