可靠数据传输协议-Rdt协议

时间:2024-04-14 16:26:35

目录

 

 

 

一、引言

二、Rdt存在意义及原理

三、Rdt 的历经版本及实现

1. Rdt 1.0  协议

2. Rdt 2.0 协议

 3. Rdt 2.1

4. Rdt  2.2

5. Rdt 3.0

常用的Rdt 3.0的实例情况有以下几种:


 

 

一、引言

  1. 该文章来源于教材的思路。
  2. 使用FSM状态机描述发送方和接收方服务响应状态。
  3. 在阅读本文之前,最好了解计算机网络体系结构各层之间的交流方式。
  4. 红色为重点,蓝色为细节

二、Rdt存在意义及原理

  • 可靠数据传输rdt原理: 现实中很多信道是不可靠的,很可能会发生丢包(由缓存溢出)等错误,所以我们需要使用技术手段来是传输变得可靠
  •     可靠的含义:不错,不丢,不乱(重复分组)
  •     Rdt 协议:对应用层,传输层,链路层都很重要。例如在传输层使用了UDP协议,而网络应用需要可靠传输,则需要使用可靠传输协议。
  •     Rdt 被列为网络十大问题之一。
  • 基本FSM结构

可靠数据传输协议-Rdt协议

三、Rdt 的历经版本及实现


1. Rdt 1.0  协议

  • 特点:发送方与接收方都只有一个状态
  • 考虑条件:底层信道完全可靠条件下:(理想条件,实际不存在),具体解释如下:

    不会发生错误
    不会丢弃分组
    发送方与接收方的FSM 独立

  •  发送方:一个状态,等待上层调用
                    若上层调用,则产生rdt_send事件,创建packet活动,调用信道上的udt_send(),发送分组,可确定百分百发送,然后回到之前状态,继续等待调用
  • 接收方:一个状态,等待下层调用
                   当传入一个分组,rdt_rcv接收,extract提取,交付给上层deliver_data
  • 具体的FSM解释图如下:

可靠数据传输协议-Rdt协议

2. Rdt 2.0 协议

PS:该协议也叫做ARQ协议 Automatic Repeat reQuest

  • 特点: 等待上层调用,等待ACK或NAK控制信息
  • 考虑条件:基于Rdt 1.0的不可行性,底层信道可能反转分组中的位,解决方法如下:

    Frist :       利用校验和检测位错误
    Second:   如何从错误中恢复(引入的新机制):
                    确认机制ACK:接收方显式告知发送方分组已正确接收
                    NAK:接收方显式告知发送方分组有错, 发送方接收到NAK后,重传分组

  • 发送方:若上层调用,则产生rdt_send事件,创建packet活动并加入校验盒,调用信道上的udt_send(),发送分组。同时进入等待ACK/NAK状态,若为NAK,则重传分组,继续等待ACK/NAK,一直处于该状态,直到传回ACK才进入等待调用状态。
  • 接收方:当传入一个分组,rdt_rcv接收并且进行判断,如果没有错误extract提取,交付给上层deliver_data并返回ACK,如果发生错误,则直接返回NAK,并处于等待接收状态
  • 具体的FSM解释图如下:

可靠数据传输协议-Rdt协议

 3. Rdt 2.1

  • 特点:发送方和接收方都有四个状态,比Rdt 2.0中多了两个***状态
  • 考虑条件:基于 rdt_2.0的缺陷: 如果ACK/NAK消息发生错误/被破坏,就会进入死锁。 解决方式如下:

可以使用重传来解决问题,但是重传会导致重复分组问题,所以要解决重复分组问题: 
    发送方给每个分组增加***
    同样使用停-等协议

  • 发送方:等待上层调用,***为0,若调用,若上层调用,则产生rdt_send事件,创建packet活动(此处加入***)并加入校验盒,调用信道上的udt_send(),发送分组。同时进入等待ACK/NAK状态,若为NAK,则重传分组,继续等待ACK/NAK,一直处于该状态。若 传回ACK,则进入等待调用状态,并改变***为1。
  • 接收方:当传入一个分组,rdt_rcv接收并且进行判断,如果分组没有错误,并且期望收到分组***与当前***相同,则extract提取,交付给上层deliver_data并返回ACK,如果发生错误,则直接返回NAK,并处于等待接收状态;
    若接收分组没错,***不匹配,则必须发一个ACK,表示正确接收。
     
  • 发送方和接收方FSM解释图分别如下:

                                                       发送方

可靠数据传输协议-Rdt协议

                                                 接收方

可靠数据传输协议-Rdt协议

4. Rdt  2.2

  • 特点:基于Rdt 2.1 ,使用无NAK消息机制
  • 并无多余考虑条件
  • 与Rdt 2.1不同之处如下:

无NAK消息协议:
    只需要在ACK消息中显示的加入被确认分组的***,
    接收方通过ACK告知最后一个被正确接收的分组
    发送方收到重复ACK后,采取重传当前分组

  • 具体FSM解释图如下:

可靠数据传输协议-Rdt协议

5. Rdt 3.0

  •  特点:多了一个时钟设置
  • 考虑条件:之前所有Rdt 协议只假设了信道可能发生的一种错误,bit error:位的错误。不会丢失分组,现在假设信道既可能丢失分组,又可能发生错误。具体解决方法如下:

First:        发送方等待合理的时间,若timeout,没收到ACK,也没收到NAK,则重传。

Second:     但此时会导致一个问题:分组或ACK只是延迟了,则会引起重复问题,则需要加入***
 

  • 发送方和接收方:在Rdt 2.0的基础上增加一个时钟,其它没有任何变化。给出发送方的FSM解释图:

 可靠数据传输协议-Rdt协议

  • 常用的Rdt 3.0的实例情况有以下几种:

    First:  没有任何丢失

可靠数据传输协议-Rdt协议

Second: 丢包

可靠数据传输协议-Rdt协议

Third:丢失ACK

可靠数据传输协议-Rdt协议

Fourth: Timeout 

可靠数据传输协议-Rdt协议