- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
停止等待协议的编程模拟
青岛农业大学
理学与信息科学学院
计算机网络与通信课程设计报告
设 计 题 目 停止等待协议的编程模拟
学生专业班级 计本05
学生姓名(学号)
指 导 教 师
完 成 时 间 2007年10月17日
实 习(设计)地点 机房
2007年 10月 17日
停止等待协议的编程模拟
一、课程设计目的和任务
《计算机网络与通信》课程讲述计算机网络的原理,尤其是TCP/IP协议栈的原理和应用,是一门理论性、应用性、实践性都比较强的课程。《计算机网络与通信实习》是学习完《计算机网络与通信》课程后进行的一次全面的综合实习,是本专业实践性重要环节之一。
计算机网络与通信实习是从原理和实践的角度,在计算机上编程模拟实现计算机网络的基本协议。通过本实习,使我们对计算机网络的原理能有更加深刻的认识和理解,同时进一步锻炼自己的动手能力。
在这次课程设计中,我设计的的是通过编译语言,编程模拟实现数据链路层协议中的停止等协议。
二、分析与设计
1.设计任务分析:
停止等待协议是数据链路层的几个协议中最简单的协议,是具有最简单流量控制的数据链路层协议2.? 设计方案论证
当收方收到一个正确的数据帧后,便会向发方发送一个确认帧ACK,表示发送的数据正确接收。当发方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量控制。
由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。为了保证数据的正确性和完整性,接收方在收到数据后,会用一定的方法对接收到的数据进行差错检验,所以接收方很容易检测出收到的数据帧是否出现差错。当接收方发现收到的数据出现差错时,就会向发送方发送一个否认帧NAK,表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。采用这样的有效的检错机制,数据链路层可以对上面的网络层提供了可靠的传输的服务。
3.? 详细设计
停止等待协议的算法如下:为了对停止等待算法有一个完整而准确的理解,下面给出此协议的算法。
具有最简单流量控制的数据链路层协议
假定 1: 链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。
假定 2: 不管发方以多快的速率发送数据,收方总是来得及收下,并及时上交主机。
这个假定就相当于认为:接收端向主机交付数据的速率永远不会低于发送端发送数据的速率。
现在去掉上述的第二个假定。但是,仍然保留第一个假定,即主机 A 向主机 B传输数据的信道仍然是无差错的理想信道。然而现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率。
由收方控制发方的数据流,乃是计算机网络中流量控制的一个基本方法。
简单解释:收方每接受到发方一帧后,回复确认帧,让发方继续发送下一帧,并且收方将数据帧交给上层软件识别,出现错误就将帧丢掉.
在接收结点:
(1) 等待。
(2) 若收到由发送结点发过来的数据帧,
则将其放入数据链路层的接收缓存。
(3) 将接收缓存中的数据帧上交主机。
(4) 向发送结点发一信息,表示数据帧已
经上交给主机。
(5) 转到(1)
在发送结点:
(1) 从主机取一个数据帧。
(2) 将数据帧送到数据链路层的发送缓存。
(3) 将发送缓存中的数据帧发送出去。
(4) 等待。
(5) 若收到由接收结点发过来的信息(此信息的格式与内容可由双方事先商定好),则从主机取一个新的数据帧,然后转到(2)。发送端:(client.cpp)
#include stdio.h
#include winsock2.h
#include time.h
#pragma comment(lib,Ws2_32.lib)
#define SERVER_PORT 7300
struct BAG
{ char packet;};
void main(int argc, char *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int ret,i,ra,data=0;
SOCKET sClient,sListen;
struct sockaddr_in saServer;
struct BAG bag;
char *ptr = (char *)bag;
BOOL fSuccess = TRUE;
WinSock初始化:
文档评论(0)