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

目录

 

 

 

一、引言

二、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 的历经版本及实现


1. Rdt 1.0  协议

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

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

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

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解释图如下:

 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解释图分别如下:

                                                       发送方

                                                 接收方

4. Rdt  2.2

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

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

  • 具体FSM解释图如下:

5. Rdt 3.0

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

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

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

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

 

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

    First:  没有任何丢失

Second: 丢包

Third:丢失ACK

Fourth: Timeout 

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可靠数据传输协议(Reliable Data Transfer Protocol, RDT)是一种在网络通信中确保数据准确无误地从发送方传递到接收方的机制。它们主要用于实时应用和需要高数据完整性的场景,如电子邮件、文件传输、视频会议等。常见的RDT协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)在TCP/IP协议栈中的扩展。 **优点:** 1. **数据完整性**:RDT协议提供了错误检测和纠正机制,如校验和或序列号,确保数据在传输过程中不丢失、不重复或损坏。 2. **顺序保证**:接收端能按照发送顺序接收数据,这对于需要按特定顺序处理信息的应用非常重要。 3. **重传机制**:如果数据包丢失,RDT协议通常会自动请求重新发送,提高数据传输的可靠性。 4. **连接管理**:建立连接后进行数据传输,断开连接时清理资源,简化了应用程序的复杂性。 **缺点:** 1. **效率**:为了提供可靠性,RDT协议增加了额外的控制信息和确认机制,可能导致带宽利用率降低和较高的延迟。 2. **开销**:额外的控制信息和确认过程会增加网络流量和处理器负载。 3. **复杂性**:实现复杂,对于简单的应用场景可能会引入不必要的复杂性。 4. **实时性**:虽然尽力而为,但仍然可能受到网络拥塞等因素影响,无法保证实时性,尤其是在网络条件较差时。 **相关问题:** 1. RDT协议如何处理网络丢包? 2. UDP协议是否支持可靠数据传输? 3. TCP和UDP在哪些场景下各有优势?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值