停止等待协议实验报告_第1页
停止等待协议实验报告_第2页
停止等待协议实验报告_第3页
停止等待协议实验报告_第4页
停止等待协议实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、实验 停止等待协议分析与协议模拟实现一、实验目的和任务1. 掌握停止等待协议的原理及分析过程包括使用状态转移图进行协议的分析。2. 在计算机上编程模拟停止等待协议的工作过程并实现文件的端到端传输。3. 能够在文件的传输过程中表现出协议运行所遇到的各种状况,如丢包,差错控制等二、分析与设计1. 设计任务分析: 停止等待协议是数据链路层的几个协议中最简单的协议, 是具有最简单流量控制的数据 链路层协议, 是数据链路层各种协议的基础。 实验是基于 winsock 编程,是 visual C+win32 控制台运用程序实现的。它采用客户机/服务器(C/S)模型,即发送数据的一端为客户端,接收数据的一端

2、为服务器端。停止等待协议就是通过双方的收发数据而达到相互通信的目 的。本实验通过编程模拟实现停止等待协议, 随机的发送文件, 通过服务器的的接受结果和客 户端的接受结果显示理解停止等待协议的原理,掌握其应用。2.? 协议分析假定 1:链路是理想的传输信道, 所传送的任何数据既不会出差错也不会丢失。 假定 2 : 不管发方以多快的速率发送数据, 收方总是来得及收下, 并及时上交主机。 这个假定就相当 于认为:接收端向主机交付数据的速率永远不会低于发送端发送数据的速率。如果存在这样的传输信道, 数据链路层协议也是不需要的。 信道不会出错, 而且接收方 缓存的容量为无限大而永远不会溢出; 或接收速率

3、与发送速率绝对精确相等。 在上述两个假 定的情况下,数据链路层当然就不需要任何协议就可以保证数据传输的正确。这就是说,传输数据的信道是不可靠的(即不能保证所传的数据不产生差错),并且还需要对数据的发送端进行流量控制。现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率。由收方控制发方的数据流收方每接受到发方一帧后,回复确认帧 , 让发方继续发送下一帧 ,并且收方将数据帧交给上层软件识别 , 出现错误就将帧丢掉 . 在大多数协议中, 流量控制是一组过程, 这组过程是用来告诉发送方在等待接收方的应答信号之前最多可以传送多少数据。流量控制有两个要点:( 1)数据流不能使接收方过载。任

4、何接收设备都有一个处理输入数据的速率限制,并 且存储输入数据的存储器容量也是有限的。 接收设备必须在达到这些限制之前通知发送设备 并且请求发送设备发送较少的数据帧或是暂停一会儿。 在使用输入数据之前, 需要对数据进 行校验和处理, 因此,每个接收设备都有一块存储器,叫做缓冲区,用于存放未来得及处理 的数据帧。 如果缓冲区将满, 接收方也必须能够通知发送方暂停传输, 直到接收方又能接收 数据。(2)应答。 随着数据帧的到来, 接收方对他们进行应答, 可以每收到一帧给一个应答, 也可以一次对若干帧进行应答。 如果一个帧到达时已经被破坏, 接收方发送一个否定应答帧 (NAK)。在数据链路层,差错控制

5、主要指错误检测和重传方法。在一个帧中出现任何一个错误, 接收方就返回一个否定应答帧, 出错的帧就被发送方重新传送。 这个过程被称作自动重复请 求(ARQ)。数据被重传的情况有三种:帧破坏、帧丢失和应答帧丢失。流量控制和差错控制是结合在一起实现的,共有两种实现流量控制和差错控制的技术: 停止等待协议和滑动窗口协议。可以用多种方法来表示一个有限状态机,对协议进行描述,以下只描述一种。1)混合描述方法比较实用的办法是合并一些状态,即考虑一些次要的细节。例如,甲方的状态1 和状态 2 ,状态 3 和状态 4 都可以合并,乙的状态 1 和状态 4,状态 2 和状态 3 也可进行 合并。这样可以用3个字符

6、XYZ表示整个系统的状态,其中X = 0或1 ,对应于甲方准备发0 或1(包括发完后等待 ACK的状态);Y= 0或1,对应于乙方期望收到 0或 1 ; Z= 0、I、A或,对应于信道上传送的是0、1、ACK或出现了差错(包括丢失)。这样,就可得出 图 3-24 的有限状态机。在弧线(或直线)旁边注明的数字为状态变迁的 标号,其意义也注明在 图 3-24 的右方。假设系统一开始处在( 000)状态。这表示甲发完 0 ,乙期望收到 0 ,而信道上传 送的也是0。在无差错的情况下,系统的状态仅在4个状态中循环:(000)7( 01A)f(111 )7( 10A)7( 000)7从理论上讲,应当共有

7、2 X 2 X 4 = 16种不同的状态。去掉没有意义的组合后,还剩下 10 种状态,而导致状态变迁的输人事件共有 9 种 ( 标号 0 8 )。这种有限状态机可帮助我们检查协议是否正确。 例如, 检查一下乙方会不会连续将两个 0 号帧送交主机。这相当于检查一下会不会出现这种情况,即在两次出现状态变迁1 之间不出现状态变迁 3 。仔细检查 图 3-24 就可发现这种情况是不会发生的。同样方法也可用 来排除连续将两个 1 号帧送交主机的可能。再检查一下会不会发生甲方连续改变状态 2 次( 如从 0 到 1 ,再回到 0 )而乙方的 状态未改变。 这种情况相当于出现了未被发现的报文丢失。 可以看出

8、, 这种情况也是不存在 的。协议必须不出现死锁。 死锁的出现是因为存在着这样的一种状态子集, 其特点是: 从这 一子集内变迁到子集外是不可能的, 而在这一子集内状态的变迁总是局限于子集内的几个状 态。可以看出,如图 所示的自动机没有死锁现象。3设计方案论证当收方收到一个正确的数据帧后,便会向发方发送一个确认帧ACK表示发送的数据正确接收。当发方收到确认帧后才能发送一个新的数据帧, 这样就实现了接收方对发送方的流量 控制。由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。 为了保证数据的正确性和完整性, 接收方在收到数据后, 会用一定的方法对接收到的 数据进行差错检

9、验, 所以接收方很容易检测出收到的数据帧是否出现差错。 当接收方发现收 到的数据出现差错时,就会向发送方发送一个否认帧NAK,表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。 采用这样的有效的检错机制, 数据链路层可以 对上面的网络层提供了可靠的传输的服务。三、系统运行与验证 程序分两部分:客户程序和服务器程序。工作过程是: 服务器首先启动,它创建套接字 之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户写入文件的路径, 然后将文件发送到服务器, 服务器要求写入保存的文件路径, 收到到文件 后,将接收到的文件保存到指定路径当中。服务器端运行图:

10、客户端运行图 成功发送文件后的服务器端 客户端 文件发送失败客户端的响应客户端向服务器端发送文件请求ENQ但是没有收到返回帧, 客户端显示send file failed ,而 file send failed 表明文件经过规定次数重传后文件还是发送失败。四、总结与体会1. 分组情况 张润:负责停止等待协议模拟客户端程序的编写、调试。 毛凤阳:负责停止等待协议模拟服务端程序的编写、调试。 黄晓明:负责查阅相关资料,实验报告的撰写,编写头文件。2. 总结通过本次实验及课上老师讲解, 对停止等待协议有了更深刻的了解。 并且通过 C/S 代码 的编写运行,形象地看到客户 /服务器端的运作方式,对于

11、C/S 模型有了很深刻的印象以及 进一步理解。通过代码的编写,再一次熟悉 Socket 编程原理,掌握简单的套接字编程。运行程序成功后,是在同一台电脑上进行 C与S端的连接。而且使用的是TCP协议,所 以要模拟停止等待协议发送丢包, 超时等情况比较困难。 仅仅实现了文件发送时等待应答信 号超时的情况。 编程时遇到许多困难, 从一个新手通过查阅相关的资料和以前的学习以及和 同学之间的交流进步到逐步了解。在设计过程中,组员之间相互促进,相互交流,共同进步。发送端程序/header/#include ./header/if (WSAStartup(MAKEWORD(2, 2), &wsaData)

12、!= 0)throw Exception(Windows sockets startup unsuccessful); elseprintf(Using %s (Status: %s)n,J Jprintf(with API versions %d.%d to %d.%dnn,LOBYTE, HIBYTE,LOBYTE, HIBYTE);void mksock(int type)/header/#include ./header/d to %d.%dnn,LOBYTE, HIBYTE,LOBYTE, HIBYTE);void mksock(int type)PrimaryUDP = socke

13、t(AF_INET, type, 0);if (PrimaryUDP 0)throw Exception(create socket error);void BindSock()sockaddr_in sin;= INADDR_ANY;= AF_INET;= htons(SERVER_PORT);if (bind(PrimaryUDP, (struct sockaddr*)&sin, sizeof(sin) 0) throw Exception(bind error);DWORD WINAPI ARecv(LPVOID lpParam)FILE * file = NULL;sockaddr_i

14、n remote;int sinlen = sizeof(remote);BSC buffer,bsc;= STX; = ETX; memset, 0, MAXBSCLENGTH);int iread = 0;unsigned long dwReceived = 0;bool number = true;/ 发送方的数据开始发送时的序号设为 , 为了判断是不是第一次一 段数据 , 所以这里标为while (true) iread recvfrom(PrimaryUDP,(char*)&buffer,sizeof(buffer),0,(sockaddr*)&remote,&sinlen)Jif

15、(SOCKET_ERROR = iread | != STX | != ETX)/ 数据错误 , 发送负应答 coutreceived a error dataendl;= NAK;=false;/number这时没有实际的意义sendto(PrimaryUDP,(char*)&bsc,sizeof(bsc),0,(sockaddr*)&remote,sinlen); continue;if = number)/ 重复收到数据 , 发送应答消息 coutreceived a repeat dataendl;= ACK;sendto(PrimaryUDP,(char*)&bsc,sizeof(b

16、sc),0,(sockaddr*)&remote,sinlen); continue;switchcase ENQ:number = !number;/ 准备接收下一段数据/ 文件请求coutreceived a file request message,filename:endl;/ 打开文件 if(strcmp(FileSavePath+strlen(FileSavePath)-1),)!=0) strcat(FileSavePath,);strcat(FileSavePath,;if(file = fopen(FileSavePath, ab) = NULL)coutfile open

17、failedendl;return -1;break;case SYN:number = !number;/ 文字发送中int i =0;if(i=fwrite, sizeof(char), sizeof, file) = 0)cout write failed endl;return -1;dwReceived += i;coutwrite:itreceived:sizeofendl;break;case EOT:number = !number;/ 文件发送完毕completely,savecoutfile receivedpath:FileSavePath,received size:dwReceivedendl;fclose(file);break;default:/ 数据错误 , 发送负应答= NAK;=false;sendto(PrimaryUDP,(char*)&bsc,sizeof(bsc),0,(sockaddr*)&remote,sinlen);continue;break;/ 发送应答消息= ACK;一 Jse

温馨提示

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

评论

0/150

提交评论