Reliable Data Transfer (RDT) 可靠数据传输协议(1)

reliable data transfer protocol 在传输层和网络层都有很重要的应用,用来保证信息传输的准确性

reliable data transfer示意图

在本文中只考虑单向数据传输(sender发送数据到receiver),但控制信息将在两个方向上流动(互相传递信息例如ACK等)
使用有限状态机(FSM)指定发送方、接收方

Q:什么是finite state machines (FSM)?
A:FSM(Finite State Machine),有限状态机,其在任意时刻都处于有限状态集合中的某一状态。下面的针对sender以及receiver的状态分析图就是FSM

RDT 1.0:

RDT 1.0协议是在理想情况下
- no bit errors
- no loss of packets
RDT 1.0
sender发送数据包给receiver接收

RDT 2.0:

毕竟不能只考虑理想情况,RDT2.0考虑了bits error的情况

RDT 2.0相比于RDT 1.0 增加了checksum(ACK确认字符和NAK否认字符)

Acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK
Negative acknowledgements (NAKs): receiver explicitly
tells sender that pkt had errors

在这里插入图片描述
在这里插入图片描述
这里面提到了Stop and wait protocols 就是说等sender给receiver发送了一个数据包以后,需要等待reciever反过来发送给ACK或者NAK。只有收到的receiver的信息以后sender才会继续发送给第二个数据包或者重新发送上一个数据包。

没有错误的情况:
在这里插入图片描述

  1. sender发送数据给receiver
  2. receiver接收数据并且返回ACK,证明数据无误
  3. sender经过等待,接收到reciever返回的ACK,继续发送下一个数据包

有错误的情况:
在这里插入图片描述

  1. sender发送数据给receiver
  2. receiver接收数据并且返回NAK,证明数据有误
  3. sender经过等待,接收到reciever返回的NAK,将当前数据包重新发送

RDT 2.1:

因为对于RDT 2.0来说,receiver就算接收到了ACK或者NAK,也不知道是哪个数据包(retransmission的数据包 or 当前的数据包)
因此RDT2.1引入了一个 sequence number(0 or 1)
发送方添加序列号到每个pkt,接收方检查这个序列号,以确定是否收到的包是一个重传,接收方丢弃(不交付)重复的pkt

过程如下:
sender:

在这里插入图片描述
receiver:
在这里插入图片描述
假设接收端收到了正确的分组并向发送端发出了确认信息,但是当发送端接收到错误的接收端的确认信息(即不是ACK也不是NAK)时候,发送端不知道接收端是否得到正确的分组,发送端会在当前状态(1或0)下重新发送分组,而此时接收端已经进入下一个状态(0或1),发送端与接收端当前处于不同的状态,当前接受端的状态是期望得到下一个分组,而发送端发送的是上一个分组,这时候接收端就会通过两端不同的状态明白发送端发送的是上一个分组,跟着会丢弃这个分组,并且发送ACK给发送端, 让发送端进入下一个状态。

Q:只是引入2个sequence number(0 & 1)够不够?
A:RDT 2.1属于等停协议,就是说要按顺序传送分组,上一个分组确认传达后才会开始下一个分组。

RDT 2.2:

RDT 2.2跟RDT 2.1不同的地方在于RDT 2.2只是使用一个ACK而不使用NAK
E.g. 如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包。

在这里插入图片描述

RDT 3.0:

rdt3.0在rdt2.2的基础之上在处理了数据包丢失的情况中增加了 Countdown Timer的机制,如果在(RTT+Processing time at receiver)时间段内,发送方没有接收到反馈信息,那么发送方默认数据包已经丢失了,会自动重传。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Reference:

[1]JamesF.Kurose, and KeithW.Ross. 计算机网络:自顶向下方法. 机械工业出版社, 2009.
[2]https://www.zhihu.com/question/366259154/answer/983403348

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可靠数据传输协议(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在哪些场景下各有优势?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值