实验一 数据链路层协议的理解与实现.doc_第1页
实验一 数据链路层协议的理解与实现.doc_第2页
实验一 数据链路层协议的理解与实现.doc_第3页
实验一 数据链路层协议的理解与实现.doc_第4页
实验一 数据链路层协议的理解与实现.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 数据链路层协议的理解与实现201151一、实验目的1、加深对流量控制、差错处理方法的理解2、熟悉TCP/IP编程, 将书本知识运用到实验中;3、开拓学生的创新意识,培养学生的独立动手操作的能力二、实验内容利用已有的模拟信道程序,编制发送、接收程序的部分模块,使系统具有可靠的收发功能。三、设计原理 实验基本设计原理为利用已经提供的模拟信道channel模拟物理信息介质,编写接收发送模块的部分功能,使得系统具有可靠的收发功能。主要原理阐述如下:1、网络体系结构分层原理在网络分层结构中,每一层要为上一层服务,处在高层次的系统仅仅是利用较低层次的系统提供的服务和功能,体现了层次的封装性,处在不同系统中的同层次实体之间没有直接物理通讯能力,他们的通讯是逻辑通讯。从实验中看,编程过程中,sender 与receiver并没有直接联系,而是通过套接字与channel连接,通过channel获得连接通讯,而channel之中的通讯方式,并没有显化的体现在程序之中,这也体现了网络通讯层与层之间的封装思想;2、检错码工作原理偶校验偶校验的工作原理是在原始数据字节的某一位添加一位附加位,使得结果中的1的个数为偶数,增加的位称为偶校验位。在实验中利用encode函数将要发送的数据进行编码,将偶校验位体现的编码的第四位上;3、差错控制方法ARQ停等协议 本次实验采用自动重发协议ARQ中的停等方式实验差错控制,实验原理为发送方没发完一个数据报必须等待对方确认后才能发送下一个数据报。在实验中具体是这样的,sender方发送一个数据报,该数据报已经包含偶校验位以及数据报总长度信息,待接收方receiver接收到数据报即对数据报的偶校验位以及发送序号进行检查,并与自己所缓存的待发送数据信息以及数据报长度信息进行对比,若是合格则在receiver方显示并返回带有ACK信息的应答帧,否则返回带有NAK信息的应答帧以要求sender方重新发送数据报; 4、信道通信方式 数据单向传输,接收方要对接收的数据进行检验,检验出错误则要求发送方重发原信息,对于正确的数据也要返回确认信息。四、实验结果及其分析1、正常传输情况下 从正常情况下的传输通道观察,收发过程符合ARQ停等协议的收发规则。检查收发过程的校验位,发现一切正常,并且结果正确,收发稳定。2、丢失情况 从通道可以观察,在sender发送过字符d的数据报后,信息丢失,根据程序设定若是receiver方在一段时间后没有收到信息,则sender方进行信息重发。通过上图可以看出在信息丢失条件下,收发过程依旧稳定。3、延时情况与信息丢失相同,在延时一定时间以后,信息进行重发,收发过程稳定,算法正确。4、出错情况观察错误发送情况下的信息模拟通道,可以看出,当发送d出错是receiver方返回带有NAK信息的应答帧,此时sender方重新发送字符d的数据报,得到了正确的数据信息,发送过程稳定正确。5、随机情况随机情况下为各种情况的综合表现,从上图可以看出,发送过程发生了延时、信息丢失的情况,经过ARQ停等协议的信息重传,问题得以解决,并发送成功。五、实验中遇到的问题1、sender发送一个字符后,receiver没有应答,系统显示错误并跳出程序经检查发现,由于数据链路层数据传输方向的编写错误,导致信息不能正确传输。正确的方式应该是,在收发方分别建立套接字与信息模拟通道套接字相连,以进行连接通讯.正确的发送方向为:sender_sockfd- channelsender_sockfd-channelreceiver_sockfd-receiver_sockfd正确的回发方向为:receiver_sockfd- channelreceiver_sockfd- channelsender_sockfd- sender_sockfd在编程过程中,注意sendto与recvfrom函数的地址编写即可以保证信息通道的发送正确。2、在发送一个字符后,程序不断要求sender重发数据 经检查发现,receiver方不断发送带有NAK信息的应答帧使得sender不断重发,关键问题在于采用偶校验的错误检查机制发生编写问题。存在以下几个方面的问题。 关于itoa函数的使用。Itoa的函数功能为把一整数转换为字符串,在实验中,我们将数据报的每一位信息定义为1B,而实际通过试验可以的出结论,对于任意一个字符,在利用itoa函数将其变成二进制字符串的过程中,最后保存为7位编码,假若错误认为为8位编码的话,则可能由于初始化或者系统内部未知原因导致在进行符号1的统计中发生错误,进而使得偶校验位失去作用,receiver检测不到正确的信息,就会不断发送NAK要求重发。解决措施为将字符转换成的二进制编码缓存在只有7为存储单元的数组中。关于字符强制转换的问题。在改进了itoa函数的问题之后,程序依旧存在不断重发的问题,并且在错误的发送方式下,数据不能稳定的得到重发。通过逻辑检查,偶校验程序编写依旧存在问题,此时考虑c+程序的数据类型转换问题。通过实验发现,在进行赋值或者打印的过程中,强制转换可以正常运行,而在进行条件判断时,数据类型的强制转换不发生作用,使得数据信息中1个数统计总是为0。将msg_chari=1,改变为msg_chari=1后,发现1的个数统计得到正常运行。3、数据可以正常传输后,发现打印出现问题 在收发方基本可以正常传送数据后,发现程序打印出现问题。主要出现的问题有两个:1、数据在发送完毕后会不断重发某一个数据;2、在延时情况下,发现在数据传送完成后sender方会继续发送一个字符; 通过分析发现,以上问题主要原因的程序的开始截止控制不佳,即流量控制发生错误而导致的。 问题一由于sender方面流量控制错误而导致的,涉及到的流量控制变量有:1、bSending(bSending=1标识用于表示Sender方正在发生数据帧,并等待接收应答信息,接受应答信息后应将bSending重新置0);2、iSendno(已正确发送的帧数);3、 msglen(待发送信息的总长度);通过iSendno和 msglen的大小比较控制程序的发送截止,而由于程序内部重发机制,需要对bSending标志进行设置以保证在延时以及信息丢失下可以进行重发。 问题二由于receiver方面流量控制错误而导致的打印错误,我解决的办法是将if(iRevnostr_send4)流量控制语句作用于整个ReceiverMsg(str_send)接收数据后的整个函数,并将打印语句控制在只有偶校验通过以及在流量可流通的条件下进行打印,这样就可以成功的进行流量控制。六、实验总结通过这次实验,我熟悉了数据链路层传输协议,深刻体会了网络体系分层原理。这种功能区分明晰的分层使得在功能实现上相互独立,便

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论