计算机实验三——Rdt协议对比

article/2025/10/9 8:31:03

计算机实验三:Rdt协议对比

  • 一、实验目的
  • 二、实验原理
    • 1.Rdt1.0:在可靠信道上进行数据传输
    • 2.Rdt2.0:有差错检测的传输信道
    • 3.Rdt2.1:解决Rdt2.0中ACK/NAK丢失的问题
    • 4.流水线协议——解决低效问题
  • 三、实验步骤及分析
    • (一)实验前准备
    • (二)实验步骤
      • 1.在某个协议中,分别测试有效负载和超时时间间隔、丢包率、校验和错误率的关系,并得出结论。
      • 2.详细比较协议5和协议6在每秒有效载荷和重传次数方面的性能
      • 3.pick_event()函数具有内置的事件优先级,对于协议5,更改这些优先级,你能得到什么结论?
      • 4.调查重传帧的数量与超时时间关系
      • 5.当两个进程在时钟上被阻塞时,更改模拟器以更快地提前时间。
      • 6.在目前的模拟器中,数据包的传递基本上是即时的。
  • 四、实验总结

simulator代码链接:https://pan.baidu.com/s/1fPzYqNrkmbba-vwu3bbO8w?pwd=cxg3
提取码:cxg3

一、实验目的

熟悉并掌握各种不同rdt协议的运行环境和协议性能。

二、实验原理

1.Rdt1.0:在可靠信道上进行数据传输

所依赖的信道非常可靠:不可能有位错,不会丢失数据;
分别为发送方和接收方建立FSMs:发送方将数据送入所依赖的信道,接收方从所依赖的信道读出数据。

2.Rdt2.0:有差错检测的传输信道

问题:如何从错误中恢复
正向确认 (ACKs):由接收方发送报文向发送方进行确认
负向确认 (NAKs):由接收方发送报文向发送方进行否认,说明分组有错
发送方在收到NAK后进行分组重传,依靠错误检测;接收方的反馈:控制信息 (ACK,NAK)。

3.Rdt2.1:解决Rdt2.0中ACK/NAK丢失的问题

Rdt2.0 的缺点——ACK/NAK 报文丢失
发送方将不会知道接收端发生了什么,假如进行重传:可能发生数据重复。
发送方,管理丢失的 ACK/NAK,接收方,管理丢失的 ACK/NAK;接收方丢弃重复的分组(不向上递交),如果ACK/NAK丢失,发送方则重传正确的分组,发送方给每个分组加上序号。

4.流水线协议——解决低效问题

流水作业:发送端允许发送多个分组,等待应答。必须增加顺序号的位数,在发送和接收端增加缓存。两种常用的流水线协议:回退N重传 (go-Back-N),选择重传(Select Retransmit)。

  • GBN:Go-Back-N
    发送方:使用尺寸为N的“滑动窗口”w,可以同时及发送w个报文。
    “回退n”协议的基本特点:发送方连续发送许多数据帧,接收方只接收一帧,即只能顺序接收,发送方发送的帧需要不同的编号来区分,发送方要有较大的发送缓冲区来保留可能重发的帧。
    优点:连续发送提高了信道利用率,误码率较低时,连续ARQ优于停等协议。
    缺点:要回退n帧重传,导致某些已正确接收帧的重传,因此降低了发送效率。

  • SR:Selective Repeat
    发送方仅对未收到应答的分组进行重发,发送方对每个未确认分组设置计时器;发送方的窗口,N个连续的seq,同样对已发送的分组,未确认分组进行限制;接收方逐个对所有正确收到的分组进行应答,对失序到达分组进行缓存。
    优点:避免重传已正确传送的帧,提高了信道利用率。
    缺点:在接收端需要占用一定容量的缓存,控制较复杂。

三、实验步骤及分析

(一)实验前准备

1.打开虚拟机ubuntu,并将实验文件simulator复制到ubuntu中。
2.了解simulator模拟的几种rdt协议。simulator中有p2.c—p6.c 五个文件是描述协议的:
p2.c是可靠信道的停等协议,设置有限的buffer和有限的处理速度;
p3.c在比特差错会丢包信道上单工停等协议;
p4.c是一位的滑动窗口协议;
p5.c是GBN协议;
p6.c是SR协议。
3.阅览文件README了解实验要求。
Simulator可以通过make命令编译,运行协议,完成 sinulator 文件夹中的 exercises 文件中的作业。
4.编译时需要输入的指令

sim protocol events timeout pct_loss pct_cksum debug_flags

这六个参数分别是:协议、时间片、超时间隔、丢包率、检验和错误率、错误标记
例如:输入: ./sim 5 1000 20 0 0 0 (运行协议5,时间片设置为1000,超时间隔为20,无丢包、无检验码错误)
5.实验需要回答的问题:
在exercises中共6个问题,下面围绕这六个问题进行实验。

(二)实验步骤

1.在某个协议中,分别测试有效负载和超时时间间隔、丢包率、校验和错误率的关系,并得出结论。

在这里插入图片描述
(1)编译:

cd simulator (打开simulator文件), make (编译)。

在这里插入图片描述
(2)运行过程:

./sim  protocol  events  timeout  pct_loss  pct_cksum  debug_flags

输入: ./sim 5 1000 20 0 0 0 (运行协议5,时间片设置为1000,超时间隔为20,无丢包、无检验码错误),得到下图:
在这里插入图片描述
图中,process1有两段信息(发送信息、接收信息);process 0同理;特别注意,这是一个双向传输,所以,process1的发送信息对应process0的接收信息,process0的发送信息对应process1的接收信息。

(3)首先测试有效负载和超时时间间隔的关系,运行协议5,1000个时间片,无丢包,无校验和错误
结果如下表所示:

timeoutPayloads acceptedTotal data frames sentEfficiency
1076301%
2010223748%
3019621790%
4019520297%
5017918099%
6018718899%
7018618999%
8018418599%

(注:实验选取了process0的Payloads accepted和process 1的Total data frames sent)
结论:由表中的测试数据可以看出,有效负载在超时时间间隔为30的时候最大,为196。因为时间间隔小于30的时候,重传的比较多,导致有效少,当时间间隔大于30的时候,虽然没有重传,但是时间间隔大,发送一个数据后等待的时间过长,导致发送的总的数据减少;但是显然,超时时间间隔越大,其Efficiency(Payloads accepted/ Total data frames sent)也越大,因为此时重传比较少,发送的数据几乎都能接受到。

(4)测试有效负载和丢包率的关系,运行协议5,1000个时间片,超时时间间隔为50,无校验和错误
结果如下表:

Lost packet ratePayloads acceptedTotal data frames sentEfficiency
1010217955%
206517036%
304117923%
402615916%
501515110%
60121528%
7081495%

结论:丢包率越高,收到的有效负载就越少,数据重传越多,超时状况也越多,传输效率越低。
部分截图(10%丢包率)如下:
在这里插入图片描述
(5)测试有效负载与校验和错误率的关系,运行协议5,1000个时间片,超时间隔为50,无丢包,
结果如下表所示:

Lost packet ratePayloads acceptedTotal data frames sentEfficiency
109817557%
205416637%
305616828%
403515421%
501715011%
60101485%

结论:较验和错误率越高,收到的有效负载越少,传输效率越低。
部分截图如下:
在这里插入图片描述

2.详细比较协议5和协议6在每秒有效载荷和重传次数方面的性能

在这里插入图片描述
协议5为回退N步,协议6为选择重传
运行:

./sim 5 1000 50 0 0 0和./sim 6 1000 50 0 0 0
协议Protocols 5Protocols 6
Total data frames sent193167
Payloads accepted193167
Frames retransmitted00
Efficiency99%99%
运行:./sim 5 1000 50 10 10 0和./sim 6 1000 50 10 10 0
协议Protocols 5Protocols 6
Total data frames sent175125
Payloads accepted8888
Frames retransmitted8424
Efficiency41%67%

结论:当网络都处于理想状况时,即都没有丢包和校验和错误时,两个协议的性能差不多;而当网络状况越差,协议6的重传、有效负载比协议5小,所以协议6的性能较好。
原因:协议5为回退N步,接收方不存储无序的分组,即使分组是正确的,如果其前一分组未到达,则将其丢弃,如此会增加重传的可能;而协议6为选择重传,即接收方会接收并缓存无序的分组,直到其前面的分组到达再一起上传给上层,如此可减少重传的可能。所以协议5适合运行在网络状况较好的情况下,丢包率和出错率较小的时候,重传几率较小,传输速率较快。而如果网络状况不佳,会出现大量重传,协议5会丢弃大量无序的且正确的分组,会带来更多的重传。而协议6只需重传丢失的分组,在网络状况较差时,效果会非常显著。

3.pick_event()函数具有内置的事件优先级,对于协议5,更改这些优先级,你能得到什么结论?

在这里插入图片描述
问题说明:在函数pick_event中,改变协议5中几个事件(数据到达、超时处理、网络层准备等)的处理顺序,可以得出什么结论。
pick_event函数说明:
在这里插入图片描述
进行测试的顺序非常重要,因为它将某些事件优先于其他事件。例如,对于协议3和4,帧将在导致超时之前发送。
仅考虑协议5,因此只需要写case 5的各种顺序case即可。
(注:每次顺序做调整后,重新进行编译再运行)

(1)顺序1:网络层准备、数据到达、校验和检验、超时处理
在这里插入图片描述

得表格如下:
在这里插入图片描述
(2)顺序2:网络层准备、超时处理、数据到达、校验和检验
在这里插入图片描述
得表格如下:
在这里插入图片描述
(3)顺序3:超时处理、网络层准备、数据到达、校验和检验
在这里插入图片描述
得表格如下:
在这里插入图片描述
上述的超时时间间隔、时间片均相同。
结论:通过上面三个表格的对比,可以看出在相同的条件下,当顺序为网络层准备、数据到达、校验和检验、超时处理时,得到的有效负载最大、重传次数最少。

4.调查重传帧的数量与超时时间关系

在这里插入图片描述
题意:观察超时间隔变化和数据重传数量的关系,并得出最佳设置值。
测试超时时间间隔和重传的关系,运行协议5,1000个时间片,无丢包,无校验和错误
得表格如下:

timeoutPayloads acceptedTotal data frames sentretransmitted frames
107630623
20137275133
3018820921
401881900
501851860
601821830

结论:从表格中可以看出,当设置超时间隔为大于40左右时,重传数据降为0,而当设置超时间隔为50时,efficiency达到99%-100%。

5.当两个进程在时钟上被阻塞时,更改模拟器以更快地提前时间。

在这里插入图片描述
题意:目前,模拟器的时间是一滴答一滴答地前进。如果两个进程都在远程超时时被阻塞,那么这个进程就会变慢。当两个进程在时钟上被阻塞时,更改模拟器以更快地提前终止。
在这里插入图片描述
在sim.c中可以看到如上代码,表示simulation程序的主要循环过程;
Last_tick就是sim的第二个参数时间片总长。
在这里插入图片描述
①这里随机生成一个数和1做与运算(即选择一个进程来进行运行,模拟进程的调度);
② 修改tick,模拟器的时间前进,这里看到每次将tick更新为加delta,在common.h中发现delta定义为10。
③根据反馈的信息word,如果是NOTHING说明需要让当前进程hanging时间加上delta,如果改值大于阈值DEAD_LOAD,那么说明该进程死锁;

解决方式:
第一步,在common.h中添加一个标志,用于标识是否两个进程都死锁。
在这里插入图片描述
第二步,当判断两个进程都死锁,那么将该标志置位。
初始化:
在这里插入图片描述
置位:
在这里插入图片描述
第三步,在worker.c中对于超时检测增加判断条件,即该标志检查。
在这里插入图片描述
如果死锁的标记被修改为1,发生死锁,等同于超时,重新发送消息,解除当前的死锁情况。
注意:不能忘记将该标志重置为0。

6.在目前的模拟器中,数据包的传递基本上是即时的。

在这里插入图片描述
题意:更改数据包的即时传递,以便交付时间是可变的,用户可以设置。差异如何影响协议性能?
(1)思路:
考虑到可以使得交付时间随用户设置而变化,增加一个输入变量,修改delta,就需要在common.h中将delta由原来的常量修改为变量,同时在sim.c中,将delta设为输入的最后一个变量。
然而,由于deadblock的值是关于delta的函数:
在这里插入图片描述
在这里插入图片描述
因此,我们直接修改delta相当于同时修改了两个值,那么在我们的结果中这个修改的delta将无法产生任何改变,需要取消掉这个关系;

(2)解决方案:
第一步,我们应该首先将deadlock和delta的关系取消掉,即将timeout_interval的delta为一个定值,这里改为默认的10:
在这里插入图片描述
第二步,将delta设置为变量,这样可以保证用户可以修改:
在这里插入图片描述
第三步,将delta作为最后一个参数,如果没有则默认为10:
Main函数中初始化DELTA:
在这里插入图片描述
修改两处,第一处表示参数个数必须大于等于7个,如果是八个则代表用户输入了DELTA来进行改变。
在这里插入图片描述

四、实验总结

这次实验是要验证rdt协议的一些性质和影响因素,重新复习了一下几种协议,包括他们的优缺点和特性等等。
实验过程中前面几题都比较简单,五六题相对来说更难一点,要阅读源码还要修改源码,尤其是最后一题真的是改的懵懵懂懂,参考了一下网上的答案之后加入了自己的想法。总体来说通过实验的方式模拟实现了几种协议的表现状况,给了我们数据化的具体表示,更能比较出它们的区别。


http://chatgpt.dhexx.cn/article/0gqTSkea.shtml

相关文章

可靠传输协议——Rdt演变历程

这次为分享一下有关于rdt的发展历程以及rdt协议演变,从rdt1.0-rdt2.0-rdt2.1-rdt2.2-rdt3.0的经历,使rdt一步步进行完善。 我们知道,TCP发送的报文段是交给IP层传送的。TCP下面的网络所提供的是不可靠的传输。因此,TCP要采用措施才…

可靠数据传输(rdt)的原理

可靠数据传输(rdt)的原理 rdt在应用层、传输层和数据链路层都很重要【不出错、不重复、不丢失】是网络TOP 10问题之一 【sending process:发送方进程;receiver process:接收方进程。要实现可靠数据传输,发…

【学习】可靠数据传输协议 RDT

转载自:https://blog.csdn.net/qq_38505990/article/details/80603007 计网刚开始学的时候完全没听懂 查了好多博文 这篇写得最清楚 仅供学习参考 在计算机网络中,可靠的数据传输,是一个较为重要的问题,最近在看书(Com…

rdt(可靠运输协议)理解

逐步解决可靠运输 在这里我们介绍rdt(Reliable Data Transfer)协议,即可靠数据传输协议的逐步完善。 假如底层通道完全可靠(rdt1.0) 我们首先考虑最简单的情况,即底层通道完全可靠,不会发生错误,此时将协议定为rdt1.0。此时发送方和接受方的状态如下。rdt1.0发送方 发…

Rdt2.1 和 Rdt2.2的详细解释

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

rdt(可靠数据传输)

构造可靠数据传输 rdt(reliable data transfer protocol,可靠数据传输协议) 什么是可靠? 不错、不丢、不乱 1.rdt1.0:可靠信道上的可靠数据传输 最简单的情况即为底层信道是完全可靠的,则该协议非常简…

16、可靠数据传输(rdt)的原理

一、可靠的数据传输(rdt) 1、什么是可靠数据传输:不出错、不冲突、不失序、不丢失 2、如何实现可靠数据传输? 需要借助于下层提供的协议,但是如果下层提供服务不可靠呢?本层的协议机制,协议实体…

Rdt协议(可靠运输协议)

提示:文章写完后 文章目录 前言一、可靠数据传输原理二、Rdt协议1.Rdt 1.0(可靠信道)2.Rdt 2.0(ARQ重传)3.Rdt 2.1(序列号)4.Rdt 2.2(无NAK)5.Rdt 3.0(定时器) 总结 前言 提示:以下是本篇文章正文内容 一、可靠数据传输原理 可靠指数据在传输过程中不错…

RDT 协议 (可靠数据传输协议)

RDT (reliable data transfer)协议详解 零、文档目录 .名词解释 背景介绍 rdt协议的实现 总结 疑问解析 参考文献 一、名词解释 rdt协议(reliable data transfer)可靠数据传输协议 二、背景介绍 计算机网络通过对网络进行…

rdt 可靠数据传输协议

计算机网络的设计基本方案是复杂化,多功能化应用层,运输层的协议设计,从而使得网络层,链路层,物理层变得相对简单,网络搭建的物质条件变得简单。由于网络层较为简单,采用了无连接的协议&#xf…

前端开发学习之一------前端开发是什么以及我们要学什么

1.web前端开发工程师是做什么的 简单地说,就是要与网站打交道 2.成为一名web前端工程师需要具备的条件 ①兴趣 ②敲代码(实践、需要去练习) 3.Web前端开发工程师需要学习什么(重点:HTML,CSS,JavaScript硬性指标) ①软件(代码的辅助工具) 浏览器:浏览器有非常多,(…

前端学习.

前端学习 基础学习路线网页简介1.html2.网页 常用的浏览器Web标准HTML标签(上)HTML语法规范HTML基本结构标签网页开发工具HTML常用标签HTML中的注释和特殊字符 HTML标签(下)表格标签表格总结 列表标签列表总结 表单标签综合案例直…

我的前端学习经历

我最近在开发一个NFT相关的Saas,部分截图如下: 这是我一段时间前,朋友圈发的图,现在Saas在页面上有点变化,但懒得再截图了。客观而言,布局还可以,这一套的技术栈是:React TailwindC…

前端学习路线

这里写目录标题 1、产品经理。2、UI设计师。3、项目经理。4、最终用户。 一、基础二、JS1.JS变量2.JS运算符3.JS数组4.JS流程语句5.JS字符串函数6.JS函数基础7.JS基础DOM操作8.JS正则表达式9.JS数据类型 三、后端语言四、学习方法建议 前端开发工程师 不仅要掌握基本的Web前端开…

WEB前端开发学习5大网站,你用过几个?

“工欲善其事,必先利其器”,学习WEB前端开发也是一样。 一、前端视频教程-51自学网 我要自学网是由佛山市丰智胜教育咨询服务有限公司倾力打造的在线实用技能学习平台。该平台成立于2007年6月7日,是一家专业从事软件视频教程开发的教育服务机构。开发团队由奋战在教学第一线…

前端开发工程师学习路线图(收藏版)

在网上看到很多类似“前端现在是不是饱和了,是不是不好找工作了呀?”这类问题,就这类问题也和小伙伴进行了探讨,大家一致认为——不是前端饱和了,而是现在前端的工作在不断独立,门槛越来越高,再…

什么是前端开发及学习路线

一、什么是前端开发 前端开发是创建Web页面或app等前端界面呈现给用户的过程,在这个过程中需要学习并使用,HTML、CSS、JavaScript以及衍生出的各种技术、框架;其中最基础也最核心的就是:HTML、CSS、JavaScript,俗称“…

前端开发学习及工具网站(持续更新)

前端开发学习及工具网站 该文章主要是记录前端开发中好的学习网站或者工具网站 大部分实用网站来源抖音鱼皮大佬分享,这里分享给大家 1、w3cschool(编程狮) 这个网站适合0基础学前端的同学,内容简单易懂,在闯关中进行学习,能够刺…

前端开发免费学习资源分享

知乎上很多同学在问什么前端培训,怎么入行啥的 我这里给大家先总结一下,老师会给大家分享一些基础的学习资料如果你入不了门,就不要去搞啥前端了, 没有用的,一点基础没有去培训你也听不懂 黑马程序员pink老师前端入…

送给大家一套完整的web前端开发学习路线

本文来源:千锋web前端开发 近几年IT业可谓是发展火热,而且新生了很多的职业。在这众多的新生职业中备受瞩目的当属web前端工程师了,web前端在IT行业真正受到重视的时间不超过五年,但是web前端的发展前景却是非常的可观&#xff0…