哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与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网络应用的基本原理 网络应 ...
随机推荐
- Android开发之打包apk
新建一个项目之后写点代码 选择build 之后选择Generate Signed APK (生成签名的APK) 选择create new 填写信息 Generate Signed APK 生成签名的A ...
- Mac iterm2 配色以及终端大小写敏感解决方案
iterm2是mac下非常好用的一款终端.但默认的配色实在不好用,经过一翻搜索终于找到了比较满意的,以下贴出博主的解决方案 配色 首先修改 ~/.bash_profile 加入一下代码 #enable ...
- linux 常用命令。
/* Linux常用命令? 1 查看 ls 展示当前目录下的可见文件 ls -a 展示当前目录下所有的文件(包括隐藏的文件) ls -l(ll) ...
- shell脚本检查域名证书是否过期
最近公司的域名准备过期了,防止用户访问的时候出现异常,所以最近我们准备替换相关网站证书为最新的. (一般HTTPS证书有效期为1年,证书过期后或者该证书不是该域名的有效证书时,在浏览器中访问会出现如下 ...
- Element Plus 正式版发布啦!🎉🎉
今天,我们非常高兴地宣布 Element Plus 稳定版正式发布.自第一个 commit 起,经过 1 年零 7 个月的持续迭代开发,总计 2635 commits,经过 256 位贡献者所提交的 ...
- vue组件中使用watch响应数据
在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: 普通用法: <template> //视图 <input v-mode ...
- LCT 入门
这是一份 \(\rm LCT\) 入门总结. 关于 \(\rm LCT\) 的复杂度这里不会提及,只会记录 \(\rm LCT\) 的基本操作和经典例题,但神奇的 \(\rm LCT\) 虽然常数巨大 ...
- 关于diffing算法中key的使用
在vue和react中(只学了这两个),经常需要渲染元素到DOM上,而且如果不写key,有的浏览器会进行报错或者进行提示. 在我的理解里:key其实就是一个身份的标识,证明这个位置坐的就是这个人.后期 ...
- RSA公钥加密-私钥解密/私钥加密-公钥解密
package com.tebon.ams.util;import org.apache.commons.codec.binary.Base64;import org.apache.log4j.Log ...
- PHP获取日期和时间:
转载请注明来源:https://www.cnblogs.com/hookjc/ 使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i: ...