版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、v1.0可编辑可修改福建农林大学计算机与信息学院课程设计报告11课程名称:计算机网络课程设计题目:停止等待协议的实现名:系:业:计算机计算机科学与技术级:口,号:指导教师:称:2011 年 6 月 10 日福建农林大学计算机与信息学院课程设计报告结果评定评语:成绩:指导教师签字:评定日期:1、课程设计的目的和任务2、 课程设计的要求3、课程设计的分析与设计设计任务分析 设计方案论证 详纟田设计 3、系统实施 4、总结与体会 5、参考文献 附录:源代码 45579911停止等待协议的实现1、课程设计的目的和任务计算机网络课程讲述计算机网络的原理,尤其是TCP/IP协议栈的原理和应用,是一门理论性
2、、应用性、实践性都比较强的课程。而此次的课程设计是在学习完计算机网络课程后进行的一次全面的综合能力的检验。计算机网络的课程设计是从原理和实践的角度,在计算机上编程模拟实现计算机 网络的基本协议。通过本次课程设计,使我们对计算机网络的原理能有更加深刻的认 识和理解,同时进一步锻炼自己的动手能力。在这次课程设计中,我设计的的是通过编译语言,编程模拟实现数据链路层协议 中的停止等协议。2、课程设计的要求通过双方的收发数据而达到相互通信的目的。3、课程设计的分析与设计设计任务分析停止等待协议是数据链路层的几个协议中最简单的协议,是具有最简单流量控win sock制的数据链路层协议,是数据链路层各种协议
3、的基础。此课程设计是基于 编程,是在VC+勺MFC界面下和控制台下实现的。它采用客户机/服务器(C/S)模 型,即发送数据的一端为客户端,接收数据的一端为服务器端。停止等待协议就是通 过双方的收发数据而达到相互通信的目的。本课程设计通过编程模拟实现停止等待协议, 随机的发送数据,通过服务器的的 接受结果和客户端的接受结果显示理解停止等待协议的原理,掌握其应用。设计方案论证当收方收到一个正确的数据帧后,便会向发方发送一个确认帧ACK表示发送的数据正确接收。当发方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方 对发送方的流量控制。由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过
4、程中可能会 出现差错。为了保证数据的正确性和完整性, 接收方在收到数据后,会用一定的方法 对接收到的数据进行差错检验,所以接收方很容易检测出收到的数据帧是否出现差错。当接收方发现收到的数据出现差错时,就会向发送方发送一个否认帧NAK表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。 采用这样的 有效的检错机制,数据链路层可以对上面的网络层提供了可靠的传输的服务。详细设计停止等待协议的算法如下:为了对停止等待算法有一个完整而准确的理解, 下面 给出此协议的算法。具有最简单流量控制的数据链路层协议假定1:链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。假定2 :不管
5、发方以多快的速率发送数据,收方总是来得及收下,并及时上交 主机。这个假定就相当于认为:接收端向主机交付数据的速率永远不会低于发送端发送 数据的速率。现在去掉上述的第二个假定。但是,仍然保留第一个假定,即主机A向主机B传输数据的信道仍然是无差错的理想信道。 然而现在不能保证接收端向主机交付数据 的速率永远不低于发送端发送数据的速率。由收方控制发方的数据流,乃是计算机网络中流量控制的一个基本方法。简单解释:收方每接受到发方一帧后,回复确认帧,让发方继续发送下一帧,并且 收方将数据帧交给上层软件识别,出现错误就将帧丢掉.在接收结点:等待。(2) 若收到由发送结点发过来的数据帧,则将其放入数据链路层的
6、接收缓存。(3) 将接收缓存中的数据帧上交主机。(4) 向发送结点发一信息,表示数据帧已经上交给主机。转到在发送结点:(1)从主机取一个数据帧。将数据帧送到数据链路层的发送缓存。将发送缓存中的数据帧发送出去。等待。若收到由接收结点发过来的信息(此信息的格式与内容可由双方事先商定好),则从主机取一个新的数据帧,然后转到(2) 0因此,在设计编程模拟实现停止等待协议时,因具体考虑有关帧的一些知识。帧的结构:帧的类型帧的序号帧的确认号数据信息(可变)校验位帧的结构帧的类型(frame_kind )分为数据帧(data_frame ),确认帧(ack_frame )和 否认帧(nak_frame)三种
7、。发送方向接收方发送数据,是以帧为单位的,就称为数据帧。它的数据信息是可 变的,但最佳的帧长为1500个字节。接收方接收数据后,会对收到的数据帧进行差错校验,当数据正确时,就会向发 送方发送一个确认帧,以表示发送方发送的数据正确接收了, 反之,就会向发送方发 送一个否认帧,并把这个出错的数据帧丢弃。帧的序号(seq):由于采用的是单工通信,帧的结构中用的控制域也很少,这个域会随着帧类型的 不同而不同:对数据帧来说:序号(seq)表示的是发送端发送的帧的序号。它表示seq对确认帧来说:序号(seq)表示的是接收方希望接收到的帧的序号,以前的各帧都已经正确接收,希望收到序号为seq的帧。对否认帧来
8、说:序号(seq)也是表示接收方希望收到的数据帧的序号,表示接 收方已经收到序号为seq的帧,但是这个帧出现错误,希望发送方重新发送该数据帧。停止等待协议采用的是单工通信, 接收端向发送端发送的确认帧和否认帧中没有 数据信息,它们的数据域为空。由于是单工通信,发送方只发送数据,所以发送方帧 的“帧的确认号”中并没有包含任何的确认信息。3、系统实施此次课程设计通过C+编程基本上模拟实现了数据链路层中的停止等待协议,但是程序中存在一定的不足,没有能够完全的体现停止等待协议的的工作原理。在此课 程设计中,数据的发送是随机生成的。运行结果截图如下所示:服务器端的运行截图:叭''C Da
9、currients and Settings Admin istrator 面©建玄件夹',谢£口卅斗.目回Uaitinsr for client connecting* tips : Ctrl-c t:D quit f客户端的运行截图:结果如下所示:客户端:武"CDocuments and 3ettingsAdministratorV 面料建文件Visual+*.pacFet racket packet £end<) paclte t paclfet pAclct packet senil< > racket98 lias b
10、een sent* 5? lias been sent! 160 lias been succcssed甲liaslias las liassentiIBl162163164been been been beensent? sentT senti sentsuGcessed165 tiAS beensent?Press an key to continue.服务器端:曲 T:Documents and Sctt1ngs Adniniratar4laitin9 fo护 client connectinsrt bips r Cti*l+c to quitTAccepted client: 127.
11、0,0,1:373 recuO A success"?i*ecu<> b successdf i*e c u ( >c successd!Fight pftchutfrecw<> d rec> e recw(> f recw<> gsuccessdf successdT successdT succ essd?packet!recwO h £uccefisdfPpess arty kgy to continue4、总结与体会经过这几天的课程设计,通过查阅相关的资料和以前的学习以及和同学之间的交 流最终能够较成功的实现该课
12、程设计。停止等待协议是数据链路层的一个重要协议, 也是计算机网络中的一个重要协议。 在进行课程设计时我遇到了不少的困难, 通过同 学的帮助和查阅相关的资料,最终解决了问题,模拟实现了停止等待协议。在设计过程中,刚开始时,没有能够实现客户端和服务器的连接, 最终导致客户 端发送数据的失败,从而导致服务器端的接收失败。经过查阅相关的资料,找到了错 误的所在,并实现了停止等待协议的功能。 此外,此次课程设计中的一个难点就是客 户端发送数据采用的是随机函数rand()产生随机发送的数据。5、参考文献谢希仁计算机网络电子工业出版社v1.0可编辑可修改13附录:源代码发送端:()#in elude <
13、;> #in elude <> #in elude <> #p ragma eomme nt(lib,"") #define SERVER_PORT 7300 / 侦听端口客户端向服务器传送的结构:struct BAG char p acket;void main (i nt argc, char *argv)WORD wVersio nRequested;WSADATA wsaData;int ret,i,ra,data=0;地址信息SOCKET sClie nt,sListe n;struct sockaddr_i n saServer;/
14、struct BAG bag;char *ptr = (char *)&bag;BOOL fSuccess = TRUE;Win Sock初始化:wVersio nRequested = MAKEWORD(2, 2);/ 希望使用的 Win Sock DLL 的版本ret = WSAStartu p( wVersio nRequested, &wsaData );if (ret != 0)prin tf("WSAStartu p() failed!n");return;确认 Win Sock DLL支持版本:if (LOBYTE != 2 | HIBYTE(
15、 ) != 2 )WSAClea nup();prin tf("I nvalid Win sock vers ion!n");return;创建socket,使用TCP协议:sClie nt = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);sListen = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);if(sClie nt = INVALID_SOCKET)WSAClea nup();prin tf("socket() failed!n");return;构建服务器
16、地址信息:=AF_INET;/地址家族=htons(SERVER_PORT);/转化为网络字节序连接服务器:ret = conn ect(sClie nt, (struct sockaddr *)&saServer, sizeof(saServer);if (ret = SOCKET_ERROR)prin tf("c onn ect() successed!n");closesocket(sClie nt);/ 关闭套接字WSACIea nup();return;按照预定协议,客户端将发送一个数字:for(i=97;iv=104;i+)ra = ran d()%11
17、;if(ra%5 = 1) data+=i;else data=i;=data;ret = sen d(sClie nt, (char *)&bag, sizeof(bag), 0);ret = recv(sListe n, ptr, sizeof(bag), 0);if!=i)prin tf("se nd()successed!n");con ti nue;else if=i)prin tf(" packet %d has bee n sen t!n",i+1);closesocket(sClie nt);WSAClea nup ();接受端(
18、):#in clude <> #in clude <>v1.0可编辑可修改#in elude <> #in elude <> #p ragma eomme nt(lib,"") #define SERVER_PORT 7300 / 侦听端口客户端向服务器传送的结构:struct BAGchar p acket;void mai n()WORD wVersio nRequested;WSADATA wsaData;int ret, nLeft,le ngth;地址信息SOCKET sListe n, sServer; /侦听套接
19、字,连接套接字struct sockaddr_i n saServer, saClie nt;/struct BAG bag;char *p tr,* pp;Win Sock初始化:wVersio nRequested = MAKEWORD(2, 2);/ 希望使用的 Win Sock DLL 的版本ret = WSAStartu p( wVersio nRequested, &wsaData);if (ret != 0)prin tf("WSAStartu p() failed!n");return;确认 Win Sock DLL支持版本:if (LOBYTE !
20、= 2 | HIBYTE( ) != 2 )#v1.0可编辑可修改WSACIea nup();prin tf("l nvalid Win sock versio n!n");return;创建Socket,使用TCP协议:sListen = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);if(sListen = INVALID_SOCKET)WSAClea nup();prin tf("socket() failed!n");return;构建本地地址信息:=AF_INET;/地址家族=htons(SERVER_
21、PORT);/转化为网络字节序=htonl(INADDR_ANY);/ 使用 INADDR_AN指示任意地址绑定:ret = bind(sListen,(struct sockaddr *)&saServer, sizeof(saServer);if (ret = SOCKET_ERROR)prin tf("bi nd() failed! code:%dn", WSAGetLastError();closesocket(sListe n);/关闭套接字WSAClea nup();return;侦听连接请求:15v1.0可编辑可修改ret = liste n( sLi
22、ste n, 5);if (ret = SOCKET_ERROR)prin tf("liste n() failed! code:%dn", WSAGetLastError();closesocket(sListe n);/关闭套接字WSAClea nup();return;prin tf("Waiti ng for clie nt conn ecti ng!n");prin tf("ti ps : Ctrl+c to quit!n");阻塞等待接受客户端连接:len gth = sizeof(saClie nt);sServer = acce pt(sListe n, (struct sockaddr *)&saClie nt, & le ngth);if(sServe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度航空器检测与维修服务合同3篇
- 2025版合同部内部岗位职责调整与协作机制合同3篇
- 2025版建筑工程质量检测与施工验收规范合同3篇
- 2025版建筑工程施工合同履约保证金合同9篇
- 二零二五年废弃化学品回收处理技术合同3篇
- 二零二五年中小学食堂设备采购合同2篇
- 2025版虫草产品进出口代理服务合同范本2篇
- 2025版木工智能家居系统安装施工合同2篇
- 2025版新能源汽车充电桩基本建设贷款合同3篇
- 「人才挖掘与培养」2025年度「放心签」猎头服务合同2篇
- 辽宁省部分高中2023-2024学年高二上学期期末考试 物理 含解析
- 2024年《档案工作实务》考试复习题库400题(含答案)
- 设计质量工程师(DQE)的角色认知及工作职责
- 2024项目经理讲安全课
- 烤肠销售合同范例
- 环保验收课件教学课件
- DB11T 1678-2019 城市轨道交通广告设施设置规范
- 苏教版(2024新版)七年级上册生物期末学情评估模拟试卷(含答案)
- 职业技术学院《药用植物学》课程标准
- NBT-电力用直流电源系统验收规范编制说明
- 计算机及外部设备装配调试员理论考试复习题库(含答案)
评论
0/150
提交评论