哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)
计算机网络实验代码与文件可见github:计算机网络实验整理
实验名称 可靠数据传输协议(停等协议与GBN协议)
实验目的:
本次实验的主要目的。
- 理解可靠数据传输的基本原理;掌握停等协议的工作原理;掌握基于 UDP 设计并实现一个停等协议的过程与技术。
- 理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于UDP 设计并实现一个 GBN 协议的过程与技术。
实验内容:
概述本次实验的主要内容,包含的实验项等。
1)基于 UDP 设计一个简单的停等协议,实现单向可靠数据传输(服务器到客户的数据传输)。
- 模拟引入数据包的丢失,验证所设计协议的有效性。
- 改进所设计的停等协议,支持双向数据传输;( 选作内容,加分项目,可以当堂完成或课下完成)
4)基于所设计的停等协议,实现一个 C/S 结构的文件传输应用。(选作内容,加分项目,可以当堂完成或课下完成) - 基于 UDP 设计一个简单的 GBN 协议,实现单向可靠数据传输(服务器到客户的数据传输)。
- 模拟引入数据包的丢失,验证所设计协议的有效性。
- 改进所设计的 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 客户端申请下载文件
问题讨论:
对实验过程中的思考问题进行讨论或回答。
- 由于UDP协议是无连接的传输协议,无法保证可靠的数据传输,因此如果在上层使用的时候需要上层来实现可靠的数据传输的部分。而且和TCP协议不同,UDP是一种无连接的协议,因此在传输数据之前并不需要三次挥手建立连接,尽管在本次实验中一部分代码确实使用了类似于连接的方式实现,但是需要注意的是那只是逻辑上的连接,并不存在真实的连接过程。
- SR协议的出现主要就是为了解决在使用GBN的过程中的一定量的资源浪费的情况,事实上SR协议、GBN协议、停等协议这三者在本质上的区别就是接收窗口和发送窗口大小的区别,至于其他的一些区别都是一些小的区别。
- 需要注意的是因为SR协议为每一个发送窗口的数据都设置了一个计时器,每次都重传超时的部分。在实际实现的过程中每次只需要比对发送窗口最低位是否超时,如果超时则重传,如果没有超时则表示发送窗口中没有超时的数据。
心得体会:
结合实验过程和结果给出实验的体会和收获。
通过本次实验对于基于UDP协议的可靠数据传输有了更加深刻的认识,掌握了停等协议,GBN协议以及SR协议,同时对于socket编程也有了更深入的了解。
哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)的更多相关文章
- 哈工大 计算机网络 实验四 利用 Wireshark 进行协议分析
计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 利用 Wireshark 进行协议分析 实验目的: 本次实验的主要目的. 熟悉并掌握Wireshark的基本操作,了解网络协议实 ...
- 哈工大 计算机网络 实验一 HTTP 代理服务器的设计与实现
计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 HTTP 代理服务器的设计与实现 实验目的: 熟悉并掌握 Socket 网络编程的过程与技术:深入理解 HTTP 协议, 掌握 ...
- 哈工大 计算机网络 实验三 IPv4 分组收发实验&IPv4 分组转发实验
计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 IPv4 分组收发实验&IPv4 分组转发实验 实验目的: (注:实验报告模板中的各项内容仅供参考,可依照实际实验情况进 ...
- 哈工大 计算机系统 实验二 Datalab数据表示
所有实验文件可见github 计算机系统实验整理 由于word文件没有保存,因此如需参考此实验,请直接访问github文件
- TCP学习前的准备——可靠数据传输协议
由于传输层所依赖的网络层是不可靠的,通过逐渐考虑实际情况不断引入新技术来实现可靠数据传输. 完全可信的信道 有比特差错的信道 新的协议功能: 1. 差错检测:检验和 2. 接收方反馈:序号 ...
- 计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验)
计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验) 前言:本博客包含Windows10下安装wget.Wireshark. 一些有用的 ...
- 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP
由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...
- 哈工大计算机网络Week3-传输层
目录 学习目标 传输层服务概述 传输层服务和协议 传输层 vs. 网络层 Internet传输层协议 多路复用和多路分用 多路复用/分用 分用如何工作? 无连接分用(UDP) 面向连接的分用 面向连接 ...
- 哈工大计算机网络Week1-网络应用
目录 哈工大计算机网络Week1-网络应用 2.1网络应用的体系结构 特点 应采取什么结构 C/S结构 客户机/服务器 P2P CS vs P2P 混合结构 思考题目 2.2网络应用的基本原理 网络应 ...
随机推荐
- linux下查看开放的端口
Nmap是一款针对大型网络的端口扫描工具,它也适用于单机扫描,它支持很多扫描,也同时支持性能和可靠性统计. [root@localhost ~]# yum install namp [root@loc ...
- Linux下升级py2.6到2.7
python2.6版本有很多局限性:最重要的就是,当前最新的pip版本已经不再支持python2.6:这给我们安装很多python库增加了很多不便:所以这里把我升级python2.6--2.7的过程及 ...
- uni微信小程序优化,几行代码就能省100kb的主包空间?
不是标题党,我们公司的项目确确实实是省下了100kb的主包空间,而且还是在没有牺牲任何的性能和业务的前提下实现的. 但是100kb是根据项目大小,所以你用这个插件可能省下超过100kb或者更少. 直接 ...
- ABC231H(二分图最小权边覆盖)
首先将行列分别抽象成 \(h, w\) 个点,每个格子视作连接两个点的一条边,那么问题就转化为了二分图最小权边覆盖问题. 考虑最后答案形如:若干组互不相交的匹配加上其他点连接到匹配内. 于此同时,不在 ...
- 「JOI 2015 Final」城墙
「JOI 2015 Final」城墙 复杂度默认\(m=n\) 暴力 对于点\((i,j)\),记录\(ld[i][j]=min(向下延伸的长度,向右延伸的长度)\),\(rd[i][j]=min(向 ...
- Emoji与unicode特殊字符的处理
遇到了一个很让人纠结的问题:emoji表情在使用的过程中,会莫名其妙的消失,或者变成乱码,同时数据库用utf8mb4来存储,但是也出现了问题,冷备过后,导入进库的时候,变成了不可见字符,神奇的消失了! ...
- Idea快捷键---根据自己使用情况持续更新
查看接口的实现类 -->ctrl+alt+b 查看继承关系 -->ctrl+h 快速查看上次查看代码的位置: -->ctrl+alt+方向键(注意与intel显卡快捷键的冲突,如有冲 ...
- 生成树协议(STP)的精髓知识
STP生成树协议 1.STP介绍 2.STP生成树算法 1.STP - Spanning tree protocol (生成树协议)是逻辑上断开环路,防止广播风暴的产生.当线路故障,阻塞接口 ...
- python——rsa加签名以及分段加密
借鉴 https://www.cnblogs.com/sammy1989/p/9583965.html 最近请求一个系统,对方要求加密.折腾了一天,使用pycryptodome库,最终代码如下: #! ...
- shell基础——数组
定义数组 #小括号,空格 arr=(v1 v2 v3) arr=(`ls`) 打印数组 echo ${arr[0]} #下标从0开始 echo ${arr[*]} #整个数组 echo ${arr[@ ...