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

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值