停止等待协议 实验指导

更新时间:2023-10-17 03:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

停止等待协议

1. 实验目的 1 2. 协议介绍 1

2.1 停止等待协议的简单介绍(STOP AND WAIT): 1 2.2 帧的结构: 1

2.3 停等协议中相关事件的介绍 2 3. 实验内容和步骤 3 3.1步骤: 3 3.2基本内容: 4 3.3扩展内容: 4 4. 实验要求 4 5. 程序说明 5

5.1主要的数据结构介绍: 5 5.2 主要函数介绍: 6 5.3 重点和难点介绍: 7 6. 参考资料 9

1. 实验目的

了解winsock编程的基本流程? 掌握停止等待协议的基本原理?

? 理解数据链路层的主要功能(数据出错控制,数据重复控制,数据丢失控制等等) 分析简单的协议数据单元? 掌握停止等待协议的运行机制? ? 了解停止等待协议的定量分析 2. 协议介绍

2.1 停止等待协议的简单介绍(stop and wait):

停止等待协议是数据链路层的几个协议中最简单的协议,是数据链路层各种协议的基础。此实验是基于winsock编程,是在VC++6.0的MFC界面下和控制台下实现的。它采用客户机/服务器(C/S)模型,即发送数据的一端为客户端,接收数据的一端为服务器端。停止等待协议就是通过双方的收发数据而达到相互通信的目的。

当收方收到一个正确的数据帧后,便会向发方发送一个确认帧ACK,表示发送的数据正确接收。当发方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量控制。

由于通信线路质量各方面的影响,数据帧从发送方到接收方传输的过程中可能会出现差错。为了保证数据的正确性和完整性,接收方在收到数据后,会用一定的方法对接收到的数据进

行差错检验,所以接收方很容易检测出收到的数据帧是否出现差错。当接收方发现收到的数据出现差错时,就会向发送方发送一个否认帧NAK,表示对方发送的数据错误。发送方会根据接收方发来的信息做出相应的操作。采用这样的有效的检错机制,数据链路层可以对上面的网络层提供了可靠的传输的服务。

2.2 帧的结构:

帧的类型 帧的序号 帧的确认号 数据信息(可变) 校验位

帧的结构

帧的类型(frame_kind):?

分为数据帧(data_frame),确认帧(ack_frame)和否认帧(nak_frame)三种。 发送方向接收方发送数据,是以帧为单位的,就称为数据帧。它的数据信息是可变的,但最佳的帧长为1500个字节。

接收方接收数据后,会对收到的数据帧进行差错校验,当数据正确时,就会向发送方发送一个确认帧,以表示发送方发送的数据正确接收了,反之,就会向发送方发送一个否认帧,并把这个出错的数据帧丢弃。 帧的序号(seq):?

由于采用的是单工通信,帧的结构中用的控制域也很少,这个域会随着帧类型的不同而不同:

对数据帧来说:序号(seq)表示的是发送端发送的帧的序号。

对确认帧来说:序号(seq)表示的是接收方希望接收到的帧的序号,它表示seq以前的各帧都已经正确接收,希望收到序号为seq的帧。

对否认帧来说:序号(seq)也是表示接收方希望收到的数据帧的序号,表示接收方已经收到序号为seq的帧,但是这个帧出现错误,希望发送方重新发送该数据帧。

停止等待协议采用的是单工通信,接收端向发送端发送的确认帧和否认帧中没有数据信息,它们的数据域为空。由于是单工通信,发送方只发送数据,所以发送方帧的“帧的确认号”中并没有包含任何的确认信息。

2.3 停等协议中相关事件的介绍

帧丢失:?

有时,链路上的干扰很严重,或者由于其他的一些原因,接收方收不到发送方发送过来的数据帧,这种情况称为数据帧丢失。发生数据帧丢失时,接收方自然不会向发送方发送任何应答帧。如果发送方要等收到收方的应答信息后再发送下一个数据帧,那么双方将永远等下去,

这样就出现了死锁现象。

为了解决这个问题,可在发送方发送完一个数据帧后,就启动一个超时定时器。若到了超时定时器所设置的重发时间tout仍收不到收方的任何应答帧,发送方的计时器发生超时,则发送方就重传前面所发送的这一数据帧。如果在重传时间tout内收到确认信息,则将超时定时器清零并停止计时。tout一般的时间设置为略大于“从发完数据帧到收到确认帧所需的平均时间”。 帧重复:

若丢失的是应答帧,则超时重发将会使接收方收到两个同样的数据帧。由于接收方无法识别重复的数据帧,因而在接收方收到的数据中出现了一种接收序号差错,称为重复帧。 要解决这个问题,必须使每一个数据帧带上不同的发送序号。若接收方收到序号相同的数据帧,就表明出现了重复帧。这时接收方应当丢弃这个重复帧。应该注意到,虽然接收方收到了重复的帧,但它还必须向发送方发送一个确认帧,因为接收方这时已经知道发送方还没有收到上一次接收方向发送方发过去的确认帧。

大家都知道,任何一个编号系统的序号所占用的比特数是有限的。因此,经过一段时间,发送序号就会重复。序号占用的比特数越少,数据传输的额外开销就越少。对于停等协议,由于每发送一个数据帧就停止等待,因此用一个比特来编号就够了,也就是说序号轮流使用0和1。 帧出错:?

数据在传输的过程中,不可能保证100%的正确传输,而错误的数据帧对于接收方来说是没有什么意义的。为了避免收到错误的数据帧,接收方在收到数据帧后,就会采用一定的机制对收到的数据帧进行校验,当校验数据正确时,会向高层传送该帧,反之,则丢弃该帧,从而对上面的网络层提供了传输的服务。 3. 实验内容和步骤 3.1步骤: 启动程序?

打开“数据链路层实验”文件? 找到停止等待协议文件?

双击此文件中的两个可执行的程序(server.exe,client.exe)?

运行应用程序? 服务器端:

? 在服务器信息-服务器IP中输入运行这个程序的计算机的IP地址; 在端口PORT 中输入端口号,也可以使用默认的端口号4000;? ? 点击“建立服务器” 按钮,使其处于监听状态,直到有连接请求;

客户端:

? 在输入服务器信息-输入服务器IP中输入想连接的服务器的IP地址; 在输入端口PORT中输入和服务器相同的端口号;? ? 点击“连接到服务器” 按钮,使其和服务器进行连接; 点击“设置链路参数”按钮,对链路中的每个参数进行设置? 其中,链路的参数主要有:

输入数据的出错率和丢失率主要是为了模拟现实的网络线路状态的,这两个参数的值确定后,输入数据的正确率也就定下来了;

传输数据的超时时间,是发送端发送完一个数据帧到收到应答帧所需的时间;

重传次数是当通信线路质量不是很好时,发送端在重传一定的次数后,就不在进行重传,而是终止发送数据;

? 点击“开始发送数据”按钮,在弹出的框中输入要传送的数据,然后单击“确定”,则表示从网络层取到一个包,在数据链路层中,把这个数据包封装成帧,发送到接收方,重复这一步可以不断的从网络层取到要发送数据

如果不想再往接收端发送数据,则点击“END” 按钮,退出应用程序? 关闭服务器端的应用程序?

注意:一般的客户机/服务器的运行机制是这样的:服务器端先打开,然后等待客户端的请求,当客户端发送完数据后,会和服务器端主动断开连接,但客户端和服务器断开的时候,需要向服务器端发送一个特殊的数据帧,以此向服务器端说明客户端的数据已发送完毕,这时服务器端也会向客户端发送一个特殊的响应帧,来说明服务器端已做好了和这一客户端断开的准备。

本实验采用的是这样的一个机制来实现客户端和服务器端断开连接的:它采用了停止等待协议中帧的结构中的一些变量来交互断开的信息。当客户端不再向服务器端发送数据的时候,便向服务器端发送一个具有两位数,且内容都是“1”的数据信息,然后封装成帧,发送到接收端。当接收端收到这个特殊的帧后,会把向客户端发送确认帧中的校验位中的值置为“111”,表示接收端已经知道客户端要和它断开连接。当客户端收到接收端发送来的这个确认帧后,便和服务器端断开连接,则点击“END” 按钮,退出应用程序。 3.2基本内容:

通过对链路参数进行不同的设置,仔细观察不同的设置对程序的运行有什么影响?? ? 每发送一个数据帧后,分别观察客户端和服务器端的运行结果,体会停止等待协议采用什么样的机制来发送和接收数据信息的?

? 根据对链路参数不同的设置,记录停止等待协议中发送端数据帧丢失复、帧错误、超时重传次数等各种情形的发生,以加深协议中数据出错控制,数据重复控制,数据丢失控制及协议对这些情况的处理的理解。

3.3扩展内容:

通过阅读源程序,画出服务器端和客户端的程序流程图?

? 对源程序进行阅读分析,了解程序实现的具体的细节,掌握服务器和客户端传送数据的机制

重点分析等待事件的实现和模拟链路参数的实现? 4. 实验要求 基本要求

? 记录实验的基本数据,包括选用的计算机的IP地址、连接的端口号、发送端的参数的设置,超时时间的设置,服务器和客户机双方发送的和接收到的数据

? 记录实验中对数据丢失率,数据出错率等链路参数的设置和相应的实验的结果 根据接收端收到十六进制的数据帧的信息,把它转换成发送端发送的原始的数据?

根据你的机器是发送端还是接收端,填写下面的表格1和表格2: 数据表格 1 发送端: 协议名称

服务器IP 端口号(PORT)

参数设置 出错率 丢失率 超时时间 重传次数

发送数据

接收信息

数据表格2 接收端:

本文来源:https://www.bwwdw.com/article/8v2f.html

Top