计算机网络实验代码与文件可见github:计算机网络实验整理

实验名称 可靠数据传输协议(停等协议与GBN协议)

实验目的:

本次实验的主要目的。

  1. 理解可靠数据传输的基本原理;掌握停等协议的工作原理;掌握基于 UDP 设计并实现一个停等协议的过程与技术。
  2. 理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于UDP 设计并实现一个 GBN 协议的过程与技术。

    实验内容:

    概述本次实验的主要内容,包含的实验项等。

    1)基于 UDP 设计一个简单的停等协议,实现单向可靠数据传输(服务器到客户的数据传输)。
  1. 模拟引入数据包的丢失,验证所设计协议的有效性。
  2. 改进所设计的停等协议,支持双向数据传输;( 选作内容,加分项目,可以当堂完成或课下完成)

    4)基于所设计的停等协议,实现一个 C/S 结构的文件传输应用。(选作内容,加分项目,可以当堂完成或课下完成)
  3. 基于 UDP 设计一个简单的 GBN 协议,实现单向可靠数据传输(服务器到客户的数据传输)。
  4. 模拟引入数据包的丢失,验证所设计协议的有效性。
  5. 改进所设计的 GBN 协议,支持双向数据传输;(选作内容,加分项目,可以当堂完成或课下完成)

    8)将所设计的 GBN 协议改进为 SR 协议。(选作内容,加分项目,可以当堂完成或课下完成)

    实验过程:

    以文字描述、实验结果截图等形式阐述实验过程,必要时可附相应的代码截图或以附件形式提交。

    1.停等协议的设计与实现

    1.1简单实现

    停等协议是发送双方传输数据的一种协议方式。停等协议的接收、发送双方仅需设置一个帧的缓冲存储空间和帧序号只取0或1的两个状态标志位,便可有效地实现数据重发并确保接收方接受的数据不会重复。简单来说,停等协议就是发送方发送数据,等到接收方回复ack的时候才继续发送下一段数据。

    1.2验证:

    在实验过程中在数据发送过程中引入一个随机丢包以及随机丢失ack的情况,对于简单的停等协议来说,发生丢包或者丢失ack的情况下,也就是发送方并没有接收到接收方回复的ack的情况下,接收方当等待一定时间之后将会重传当前分组,直到接收到当前分组对应的ack的时候才会继续发送下一个分组。

    1.3双向数据传输:

    当实现双向数据传输的时候,主要的方式就是在客户端和服务器端都设置了接收和发送窗口,对于停等协议来说两种窗口的大小都设置为1,当客户端向服务器端发送数据的时候启用客户端的发送窗口和服务器端的接收窗口;当客户端从服务器端下载数据的时候启用客户端的接收窗口和服务器端的发送窗口。

    1.4 C/S结构的文件传输应用:

    对于C/S结构的文件传输来说,由于上一步实现了双向数据传输,因此在文件传输应用的时候实现的是可以提供客户端上传与下载数据的应用。在实现过程中根据客户端输入的命令决定是上传还是下载,同时将这一条命令发送给服务器端,在服务器端决定是否执行这个服务,如果服务端拒绝提供服务,那么本次连接中断;如果服务器端同意提供服务,以客户端上传文件为例讲述下述过程,客户端下载文件过程类似。当服务器端允许开始服务后,客户端进入传输数据状态,而服务器端进入接受数据状态。当数据传输结束之后客户端向服务器端发送特定报文内容标志传送任务结束,则本次客户端与服务器端的服务完成。

    2.GBN协议的设计与实现

    2.1GBN协议简单实现:

    与简单停等协议相比,GBN协议事实上就是把发送窗口的长度设置为n,而接收窗口的长度仍保持为1,也就是GBN协议不接受乱序到达的数据,如果数据乱序到达,那么在接受处将会决定放弃这一部分数据;而GBN协议采用的是累积确认的方式,也就是说如果当前等待接收的数据编号为1,2,3,而收到了编号为3的ack,那么就表示这三个数据已经都正确接收了。GBN协议流程图如下所示:

图2.1 GBN流程图

2.2验证:

GBN验证方法和上述停等协议中基本一致,可见上述验证过程叙述。

2.3双向数据传输:

GBN双向数据传输方法和上述停等协议中基本一致,可见上述验证过程叙述。

2.4改进为SR协议:

为了解决GBN只能顺序接收数据的情况,在SR协议中,对于发送方来说:从上层收到数据后, SR发送方检查下一个可用于该帧的序号.如果序号位于发送窗口内,则发送该数据帧.否则要么将数据缓存,要么返回给上层之后再传输;同时当发送方接收到某个ACK的时候,将这个被确认的帧标记为已接收.如果该帧序号是窗口的下界,则窗口向前移动到最小序号的未被确认帧处.如果窗口移动了且有序号在窗口内的未发送帧,则发送这些帧。而对于超时事件来说,SR协议只重传超时的帧,并不重传所有超时帧之前的帧。

而对于SR接收方,只要是接收窗口内的帧都可以接收,SR接收方将确认一个正确接收的帧而不管其是否按序,失序的帧将被缓存,并返回给发送方一个该帧的确认帧,直到所有帧(序号更小的帧)都被收到为止,这时将一批帧顺序交付上层,然后向前移动滑动窗口。详细内容可见MOOC讲解截图如下:

图2.2 SR协议图

最终设计的基于SR协议的文件传输应用流程如下:

图2.3 文件传输应用流程图

实验结果:

采用演示截图、文字说明等方式,给出本次实验的实验结果。

1.GBN:

由于停等协议就是GBN协议中发送窗口长度设置为1,因此停等协议与GBN协议验证过程类似,统一演示如下:

获取服务器端时间:

图1.1 获取服务器端时间

模拟丢包:

图1.2 模拟丢包

在实现模拟丢包的过程中,设置的模拟丢包率和ack丢包率都是0.2,由上面的运行截图中可以看出,由于客户端发送的标号为2的ack报文丢失,因此在服务器端标号为2的数据发生超时之后要重传标号为2后面的所有数据,这样在一定的程度上就造成了资源的浪费,因此引入了SR协议。

2.SR文件传输:

在SR实现的文件传输服务中提供了客户端上传与下载文件的功能,演示结果如下:

图2.1 初始状态

图2.2 客户端申请上传文件

图2.3 客户端申请下载文件

问题讨论:

对实验过程中的思考问题进行讨论或回答。

  1. 由于UDP协议是无连接的传输协议,无法保证可靠的数据传输,因此如果在上层使用的时候需要上层来实现可靠的数据传输的部分。而且和TCP协议不同,UDP是一种无连接的协议,因此在传输数据之前并不需要三次挥手建立连接,尽管在本次实验中一部分代码确实使用了类似于连接的方式实现,但是需要注意的是那只是逻辑上的连接,并不存在真实的连接过程。
  2. SR协议的出现主要就是为了解决在使用GBN的过程中的一定量的资源浪费的情况,事实上SR协议、GBN协议、停等协议这三者在本质上的区别就是接收窗口和发送窗口大小的区别,至于其他的一些区别都是一些小的区别。
  3. 需要注意的是因为SR协议为每一个发送窗口的数据都设置了一个计时器,每次都重传超时的部分。在实际实现的过程中每次只需要比对发送窗口最低位是否超时,如果超时则重传,如果没有超时则表示发送窗口中没有超时的数据。

    心得体会:

    结合实验过程和结果给出实验的体会和收获。

    通过本次实验对于基于UDP协议的可靠数据传输有了更加深刻的认识,掌握了停等协议,GBN协议以及SR协议,同时对于socket编程也有了更深入的了解。

哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)的更多相关文章

  1. 哈工大 计算机网络 实验四 利用 Wireshark 进行协议分析

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 利用 Wireshark 进行协议分析 实验目的: 本次实验的主要目的. 熟悉并掌握Wireshark的基本操作,了解网络协议实 ...

  2. 哈工大 计算机网络 实验一 HTTP 代理服务器的设计与实现

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 HTTP 代理服务器的设计与实现 实验目的: 熟悉并掌握 Socket 网络编程的过程与技术:深入理解 HTTP 协议, 掌握 ...

  3. 哈工大 计算机网络 实验三 IPv4 分组收发实验&IPv4 分组转发实验

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 IPv4 分组收发实验&IPv4 分组转发实验 实验目的: (注:实验报告模板中的各项内容仅供参考,可依照实际实验情况进 ...

  4. 哈工大 计算机系统 实验二 Datalab数据表示

    所有实验文件可见github 计算机系统实验整理 由于word文件没有保存,因此如需参考此实验,请直接访问github文件

  5. TCP学习前的准备——可靠数据传输协议

    由于传输层所依赖的网络层是不可靠的,通过逐渐考虑实际情况不断引入新技术来实现可靠数据传输. 完全可信的信道 有比特差错的信道 新的协议功能: 1.    差错检测:检验和 2.    接收方反馈:序号 ...

  6. 计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验)

    计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验) 前言:本博客包含Windows10下安装wget.Wireshark. 一些有用的 ...

  7. 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP

    由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...

  8. 哈工大计算机网络Week3-传输层

    目录 学习目标 传输层服务概述 传输层服务和协议 传输层 vs. 网络层 Internet传输层协议 多路复用和多路分用 多路复用/分用 分用如何工作? 无连接分用(UDP) 面向连接的分用 面向连接 ...

  9. 哈工大计算机网络Week1-网络应用

    目录 哈工大计算机网络Week1-网络应用 2.1网络应用的体系结构 特点 应采取什么结构 C/S结构 客户机/服务器 P2P CS vs P2P 混合结构 思考题目 2.2网络应用的基本原理 网络应 ...

随机推荐

  1. 集合框架-Map集合特点及常用方法

    1 package cn.itcast.p6.map.demo; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import ...

  2. logger命令

    logger是一个shell命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件()写入一行信息. -i 在记录上显示pid进程号 -t 给日志记录打标签 1.直接 ...

  3. 使用 MVVM Toolkit Source Generators

    关于 MVVM Toolkit 最近 .NET Community Toolkit 发布了 8.0.0 preview1,它包含了从 Windows Community Toolkit 迁移过来的以下 ...

  4. python02day

    回顾 1.编译型和解释型 编译型:一次性编译成二进制,再执行 执行效率高,但不能跨平台,开发效率低 代表语言:C 解释型:逐行解释成二进制,再执行 可以跨平台,开发效率高,但执行效率低 代表语言:py ...

  5. <input type="file"> 标签详解

    详见:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#attr-multiple 使用 type=" ...

  6. NSMutableDictionary基本概念

    1.NSMutableDictionary 基本概念 什么是NSMutableDictionary NSMutableDictionary是NSDictionary的子类 NSDictionary是不 ...

  7. express源码分析之Router

    express作为nodejs平台下非常流行的web框架,相信大家都对其已经很熟悉了,对于express的使用这里不再多说,如有需要可以移步到www.expressjs.com自行查看express的 ...

  8. 如何按规定的格式向mysql中导入数据

    1.首先我们拿到数据,数据必须按照一定的格式书写的.如用|区分字段,换行区分row 12107 | 心情1 | 今天的心情很不好啊. 12108 | 天气 | 今天天气还行. 12109 | 臭美 | ...

  9. shell脚本命令

    http://man.linuxde.net/shell-script   从键盘或文件中获取标准输入:read命令 文件的描述符和重定向 数组.关联数组和别名的使用 函数的定义.执行.传参和递归函数 ...

  10. 7、前端--jQuery简介、基本选择器、基本筛选器、属性选择器、表单选择器、筛选器方法、节点操作、绑定事件

    jQuery简介 宗旨:Write less, do more. 内部封装了js代码 是编程更加简单并且兼容所有的主流浏览器 版本:1.x 2.x 3.x # 可以使用3.x最新版 是第三方的类库:使 ...