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

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

rdt 2.0是一种基于计算机网络的实验,它是可靠数据传输(rdt协议的第二个版本。该实验旨在模拟计算机网络中数据的可靠传输过程,并通过实现rdt 2.0协议来演示数据传输的可靠性。 rdt 2.0的主要特点之一是具有更强的错误检测和纠正机制。它通过在数据包中引入冗余的校验和和序列号来确保数据的正确性。发送端在发送每个数据包之前生成并附加一个校验和,接收端在接收到数据包后进行校验来检测并纠正传输过程中可能出现的错误。通过这种方式,rdt 2.0可以提供更可靠的数据传输。 此外,rdt 2.0还具有流控制和拥塞控制机制。流控制机制用于控制发送方和接收方之间的数据流量,以避免因发送速度过快而导致接收方处理不过来的情况。拥塞控制机制则用于监测网络的拥塞情况,并根据网络的负载情况来调整发送方的发送速率,以保证整体的网络性能。 在实验中,研究人员需要实现rdt 2.0协议的发送端和接收端,并进行一系列的测试来验证协议的正确性和可靠性。测试中可以模拟网络中可能出现的错误,如丢包、乱序等,以检查rdt 2.0协议对这些错误的处理能力。 总之,rdt 2.0是一种可靠数据传输协议,通过引入错误检测和纠正机制、流控制和拥塞控制机制,以及进行一系列的实验来验证协议的正确性和可靠性。这个实验可以帮助我们更好地理解和研究计算机网络中的数据传输过程。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值