计算机网络实验rdt实验

来源:互联网 发布:java 面试题 编辑:程序博客网 时间:2024/04/29 03:58

一、    实验目的

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

二、实验原理

   可靠数据传输:提供给上层实体的服务抽象是,数据可以通过一条可靠的信道进行传输。不过由于下层协议不一定可靠,所以就有问题要处理。

   停等协议:肯定确认(positive acknowledgment)与否定确认(negative acknowledgment)。是接收方反馈信息的两种方式。

其次,是ARQ(Automatic Repeat reQuest自动重传请求)协议,简单理解为发送方发送数据,然后等待接收方反馈,然后再相应发送数据。

综合起来理解,就是发送方发送数据,然后等待接收方通过ACK或者NAK反馈,就是停等协议的大概流程。

接下里的优化有,校验和(差错处理)、序号、定时器(超时)、ACK和NAK等。

  流水线协议:为了解决上面停等协议对资源的极其浪费问题引入了一个解决方案:允许发送方发送多个分组而无需等待确认。

  滑动窗口协议:抽象理解,发送方和接收方各有一个缓存数组。发送方存放着:已发生且成功确认包序号、已发送未确认包序号 (已发送已确认包序号序号|已发送未确认包序号)*、未发送包序号;接收方存放着:已接受包序号、正在接收包序号、未接收包序号。其中,每个数组有个两个扫描指针,开头和结尾,一起向后扫描,两者形成一个窗口。故称为窗口协议。

   回退N步:回退N步,接收方则是只接受最小的未接受帧,对错序到达帧,都丢弃。

   选择重传:SR协议通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。SR这种个别的,按需的重传协议要求接收方逐个地确认正确接收方的分组。

 


 

三、实验步骤

 

 

 

 

首先对文件夹内的代码进行编译

 

 

 

 

1.      运行protocol2,运行命令为./sim 2 100 20 0 0 1,6个数字分别代表运行的协议号、运行的事件数即运行模拟的时间、超时间隔、丢包率、到达包的错误率、跟踪标志。0表示只打印汇总数据,1表示打印中间的发包记录。

其中100 20表示它将以20个tick的时间间隔运行200个协议实体进程。0%的丢包率,0%的校验和错误率,它会打印出汇总数据。

 

protocol2是一个可靠信道上的单工停等协议。其基本原理是发送方以高于接收方处理能力的速度发送数据帧,导致接收方被淹没。我们假设通信信道不会出错,并且数据流量是单工的。

发送方发送一帧,等待确认到达后才能继续发送。

 

运行结果:Simulating Protocol  2

从运行结果可以看出,共有两个进程,一个发送一个接收,分别指明了发送和接收的情况,丢包率、错误率等都和运行代码中设定好的参数一致。有效装载/发送数据的效率为100%,模拟时间为1000。

 

Total data frames sent:          总发送数据帧

      Data frames lost:                丢失数据帧

      Data frames not lost:            未丢失数据帧

      Frames retransmitted:            重传帧

      Good ack frames rec'd:           接收到好的ACK

      Bad ack frames rec'd:            接收到坏的ACK

 

      Good data frames rec'd:        接收到好的数据帧

      Bad data frames rec'd:           接收到坏的数据帧

      Payloads accepted:             有效装载

      Total ack frames sent:         总发送ACK帧

      Ack frames lost:                 丢失ACK帧

      Ack frames not lost:           未丢失ACK帧

      Timeouts:                        超时

      Ack timeouts:                    ACK超时

 

 

2.      运行protocol3,参数设定为./sim 3 200 20 10 10 1

protocol3是一个比特差错信道上的单工停等协议。数据帧可能会损坏,也可能会完全丢失。如果有一个数据帧在传输过程之中损坏,则接收方硬件在计算校验和时会检测出来,如果一个数据帧损坏之后校验和仍然是正确的,则这个协议将会失败。发送发在它发送的每一个数据帧的头部都会加上一个序号。

发送方发送一帧,等到确认到达之后才能继续发送。

其中200  20表示它将以20个tick的时间间隔运行200个协议实体进程。10%的丢包率,10%的校验和错误率,它将会打印出汇总数据。如下所示。

 

运行结果:Simulating Protocol  3

 

 

 

从运行结果可以看出,共有两个进程,一个发送一个接收,分别指明了发送和接收的情况,丢包率、错误率等都和运行代码中设定好的参数一致。有效装载/发送数据的效率为58%,模拟时间为200。

然而,其中也存在了一些不可预测的情况。有些运行多次以后每次的运行结果也是不同的。

 

 

 

3.      运行protocol4,参数设定为./sim 4 100 20 10 10 1

protocol4是一个一位滑动窗口协议。由于发送方在发出一数据帧之后必须等待前一帧的确认到来以后才能发送下一帧。

其中100 20表示它将以20个tick的时间间隔运行100个协议实体进程。20%的丢包率,10%的校验和错误率,它将会打印出汇总数据。如下所示。

 

运行结果:Simulating Protocol 4

 

 

从运行结果可以看出,共有两个进程,一个发送一个接收,分别指明了发送和接收的情况,丢包率、错误率等都和运行代码中设定好的参数一致。有效装载/发送数据的效率为38%,模拟时间为100。

Rdt3.0属于流水线可靠数据传输协议,它在运行过程中可能会出现以下四种情况:

(a)无丢包操作

 

 

 

 

 

 

 

(b)分组丢失

从收发包记录Tick7-Tick10可以看出这时发生了分组丢失情况。

 

(c)ACK丢失

 

 

从收发包记录可知正常的ACK确认应该是Tick57-Tick71 情况,但是Tick73-Tick80发生了ACK丢失。

 

(d)过早超时

 

 

从收发包记录可知正常的payload记录,所以Tick42-Tick50记录中payload=3中有错误记录,可知发生了过早超时重传的记录。

所以protocol4应该是rdt3.0协议。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.      运行protocol5 参数设定:./sim 5 180 20 10 10 1

protocol5是一个回退N步协议。回退N步协议属于流水线协议的一种。流水作业是发送端允许发送多个分组,等待应答。必须增加顺序号的位数,在发送和接收端增加缓存。

两种常用的流水线协议包括回退N步 (go-Back-N),选择重传(Select Retransmit)。

在回退N步协议中,允许发送方发送多个数组(当有多个分组可用时)而不需要等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数N。

下图显示了发送方看到的GBN协议的序号范围。如果我们将基序号(base)定义为最早的未确认分组的序号,将下一个序号(nextseqnum)定义为最小的未使用序号(即下一个代发分组的序号),则可将序号范围分割成4段。在[0,base-1]段内的序号对应于已经发送并被确认的分组。[base,nextseqnum-1]已经发送但是没有确认的分组。[nextseqnum,base+N-1]能用于那些要被立即发送的分组,如果有数据来自上层的话。最后,大于或等于base+N的序号是不能使用的,直到当前流水线中未被确认的分组(特别是序号为base的分组)得到确认为止。

如图所示,那些已经被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围长度为N的窗口。随着协议的运行,该窗口在序号空间向前滑动。因此,N常被成为窗口长度(window size),GBN协议也常被称为滑动窗口协议(sliding-window protocol)。

其中180 20表示它将以20个tick的时间间隔运行180个协议实体进程,20%的丢包率,10的校验和错误率,它会打印出汇总数据。如下所示。

 

运行结果如下:Simulating Protocol 5

 

 

从运行结果可以看出,当发生发送方分组丢失、接收方确认丢失等情况时,发送方会选择重新发送seq0-6共7个分组,根据此特性可以判断为回退N步协议。

协议5为流水线协议,适合运行在网络状况较好的情况下,丢包率和出错率较小的时候,重传几率较小,传输速率较快。而如果网络状况不佳,会出现大量重传,协议5会丢弃大量无序的且正确的分组,会带来更多的重传。所以可以看出有效装载/发送数据的效率为37%,与其他的协议相比较就非常低,模拟时间为1000。

回退N步的滑动窗口协议与前几个协议也有不同之处,它是以滑动窗口的形式发送帧,所以不会发生帧的重复等情况。

 

 

 

 

 

 

 

5.      运行protocol6 参数设定:./sim 6 180 20 10 10 1

Protocol6是一个选择重传协议,发送方和接收方各自维持一个窗口,其中180 20表示它将以20个tick的时间间隔运行180个协议实体进程。20%的丢包率,10%的校验和错误了,它会打印出汇总数据。如下所示。

 

 

 

运行结果如下:Simulating Protocol 6

 

从运行结果可以看出,选择重传与回退n步都属于流水线协议,而与回退n步不同的是选择重传不会讲之前发送的分组全部重传,而是仅重传那些错误的分组。有效装载/发送数据的效率为56%,模拟时间为180。

 

 

 

 

 

 

 

 

四、练习

Exercises

1)  For one or more selected protocols, make a study ofprotocol performance, measured in payloads delivered per second, as a functionof the checksum error rate, lost packet rate, and timeout interval.  For example, provide graphs showingpayloads/sec as a function of timeout interval, for various error rates. Whatcan you conclude?

答:

实验中选择运行的是p5.c文件,即回退N步协议。运行图如下:

运行协议5,1000个时间片,超时时间间隔为20个时间片,无丢包,无数据出错,显示发送和接收如图(之前的图)。

 

 

 

测试多组实验,如下面所示。

测试有效负载和超时时间间隔的关系,运行协议5,1000个时间片,结果如下表所示:(由于运行的几组都是1000个时间片,所以可以直接根据payloads来比较)

超时时间间隔

Total data frames sent

Payloads accepted

10

1

1

20

262

136

30

219

176

40

187

179

50

196

196

60

187

187

70

190

190

80

192

192

90

190

190

结论:由表中的测试数据可以看出,有效负载在超时时间间隔为50的时候最大,为196。因为时间间隔小于50的时候,重传的比较多,导致有效的少,当时间间隔大于50的时候,虽然没有重传,但是时间间隔多大,发送一个数据后等待的时间过长,导致发送的总的数据减少。

测试有效负载和校验和错误率的关系,运行协议5,1000个时间片,设置超时间隔为50,无丢包,结果如下表所示:(由于运行的几组都是1000个时间片,所以可以直接根据payloads来比较)

The checksum error rate

Total data frames sent

Payloads accepted

10

182

95

20

172

68

30

166

40

40

161

28

50

149

10

60

146

8

结论:由表中数据可以看出,校验和错误率越高,收到的有效的负载越少。

测试有效负载和校验和丢包率的关系,运行协议5,1000个时间片,设置超时间隔为50,无校验和错误,结果如下表所示:(由于运行的几组都是1000个时间片,所以可以直接根据payloads来比较)

Lost packet rate

Total data frames sent

Payloads accepted

10

187

100

20

176

71

30

174

50

40

164

24

50

155

15

60

150

10

结论:从表中数据可以看出,丢包率越高,收到的有效的负载就越少。

 

2)  Compare the performance of protocols 5 and 6 indetail with respect to payloads/sec and number of retransmissions for a widevariety of parameters. Under which circumstances is protocol 5 better? protocol6?

Answers:

运行:./sim5 1000 50 0 0 0和./sim6 1000 50 0 0 0

./sim 5 1000 50 0 0 0

./sim 6 1000 50 0 0 0

Total data frames sent

Payloads accepted

Total data frames sent

Payloads accepted

196

196

165

165

 

运行:./sim5 1000 50 10 10 0和./sim6 1000 50 10 10 0

./sim 5 1000 50 10 10 0

./sim 6 1000 50 10 10 0

Total data frames sent

Payloads accepted

Total data frames sent

Payloads accepted

179

74

137

97

结论:网络状况越差,协议6的影响相对小,即协议6的性能好,当网络都处于理想状况时,即都没有丢包和错误时,两个协议的性能差不多,但整体协议6的性能更好。

原因:协议5为流水线协议,适合运行在网络状况较好的情况下,丢包率和出错率较小的时候,重传几率较小,传输速率较快。而如果网络状况不佳,会出现大量重传,协议5会丢弃大量无序的且正确的分组,会带来更多的重传。而协议6只需重传丢失的分组,在网络状况较差时,效果会非常显著。

 

3)  The function pick_event() has built-in prioritiesfor events. For example,for protocol 5, frame arrivals go before timeouts.  Experiment with changing these priorities (byreordering the statements in pick_event().What conclusions can you draw?

答:在worker.c文件中改变代码来改变顺序

当顺序为数据到达,校验和检验,上层数据准备好,超时处理时:

设置超时间隔为50,结果见下表:

The checksum error rate

Lost packet rate

Total data frames sent

Payloads accepted

10

0

190

86

10

10

188

69

20

10

161

39

20

20

155

34

当顺序为上层数据准备好,数据到达,校验和检验,超时处理时:

设置超时间隔为50,结果见下表:

The checksum error rate

Lost packet rate

Total data frames sent

Payloads accepted

10

0

191

96

10

10

175

76

20

10

174

60

20

20

179

52

当顺序为超时处理时,数据到达,校验和检验,上层数据准备好:

设置超时间隔为50,结果见下表:

The checksum error rate

Lost packet rate

Total data frames sent

Payloads accepted

10

0

175

85

10

10

164

73

20

10

164

47

20

20

156

37

通过上面三个的对比,可以看出在相同的条件下,当设置为上层数据准备好,数据到达,校验和检验,超时处理时,收到的有效负载最大。

 

4)  Investigate the number of retransmitted frames as afunction of the timeout interval for various parameters?  Can you determine what the optimum setting shouldbe?

答:设置丢包率为0,检验和错误率为0,运行得到如下数据:

超时时间间隔

Total data frames sent

Payloads accepted

retransmitted frames

10

1

1

623

20

262

136

56

30

219

176

28

40

187

179

7

50

196

196

0

60

187

187

0

70

190

190

0

80

192

192

0

90

190

190

0

结论:从表中数据可以看出,当设置超时间隔为50时,重传帧最少,并且收到的有效负载最多。

 

五、实验总结

通过本次实验我熟悉并掌握了不同版本的rdt协议的特点,并总结比较了不同版本rdt协议的差异和类似之处。在刚开始做实验时,按照实验指导书在虚拟机上安装RedHatLinux操作系统时出现了很多问题,其中VMwareTool一直安装不成功,之后选择将simulator压缩包复制到虚拟机中Ubuntu系统下才能够完成实验,最终将问题解决了。