RDT(Reliable Data Trasfer Protocol )可靠传输协议
本站字数:108k 本文字数:1.6k 预计阅读时长:5min 访问次数:次在TCP/IP网络协议簇中,IP层以及IP层以下的协议,都没有保证协议传输的可靠性,也就是不丢包、没有比特错误、不重复、不丢失,那么如何保证协议传输的可靠性是一个有趣的话题。
可靠的数据传输协议(Reliable Data Trasfer Protocol ),即数据可以通过一条可靠信道进行数据传输。由于可靠数据传输协议的下层协议也许是不可靠的,因此实现这种协议也是相当困难的。
因为下层的协议也许是不可靠的,因此底层信道是有可能损坏比特或者丢失整个分组的。RDT的可靠性,主要体现在,交付到上层的分组(Packet)是完整的,是没有分组丢失的。
尝试构造一个可靠数据传输协议
1. 经完全可靠信道的可靠数据传输:RDT 1.0
最简单的情况就是,底层信道是完全可靠的。以下就是发送者和接收者的状态图。
上面的状态图也许有些难以理解,下面用时序图来演示一下具体的流程。
接收者全盘接受来自发送者的全部分组,因为底层的信贷是可靠的,因此也不会存在数据错误,丢包的问题,而且假定收发速率是一致的。
2. 经具有比特差错信道的可靠数据传输:RDT 2.0
第一个版本属于是理想状态下的RDT,实际情况会复杂得多。基于比特差错信道,就会出现数据错误的问题,需要引进新的技术来解决这些问题:
- 差错检测:增加额外的校验数据,例如校验和
- 接收方的确认:肯定确认(Positive Acknowledgement, ACK)和否定确认(Negtive Acknowledgem,ent, NAK)
- 重传:接收方反馈错误的时候,发送方可以通过重传的方式保证数据的正确,基于这样的重传机制的可靠数据传输协议叫做自动重传请求(Automatic Repeat reQuest,ARQ)协议。
首先来看发送方和接收方的状态图
其实简单而言,这种可靠协议是通过反馈方校验返回决定是否重传的协议,可以简单来看看它是怎么工作的。
上面这种就是正常的操作了,发送方发送消息,接收方确认消息。当然了因为是出现比特错误的不可靠的信道,因此是可能出现NAK的情况的。
如果细心的话,可以发现,在第二次重传的时候,等了一段时间才收到接收者的ACK确认。中间发送者没有任何的动作,这也就意味着,除非发送者确信接收方已经正确接收到分组,否则不会有任何的动作。对于RDT2.0这种协议称之为停等(stop-and-wait)协议。
上面这种协议,其实已经可以适应具有比特错误的情景了。但是事情真的这么简单吗?
因为信道存在比特差错,那么ACK和NAK的确认信息也是可能存在比特差错的。这也就意味着,发送方和接收方都必须进行一定的比特校验,否则错误的确认信息,发送方就只能“停等”了。
3. 经具有比特差错信道的可靠数据传输:RDT 2.1
修复ACK或者NAK信息受损的问题。
为了解决这个问题,最简单的办法就是使用标序号(sequence number)和冗余分组的方法。
首先来看发送方和接收方的状态图:
上面的状态图虽然复杂,但是实际上是对称的,也就是0和1序号的状态,发生各种情况的动作。实际上可以简单理解有三种情况。
- 正常通信
- 接收方数据错误
- 发送方数据错误
首先,来看正常通信的例子。
上面就是一个正常通信的例子,在完成了序号为0的数据的传输以后,发送者和接收者的状态全都发生的转变。
然后,再来看第二种情况:接收方数据错误
这种情况下,接受方出现的错误,其实和之前的2.0版本工作是一样的。
最后!也是最重要的情况,接收方的确认信息错误,也就是RDT2.1版本想要去解决的问题。
最后的两种错误情况,简单而言,不管是接受方回复NAK还是回复的信息含糊不清,发送方全部重传处理。接收方发现自己要的信息并不是发送方的信息,回复ACK。
发送方接收到对同一个分组的两个ACK(即接收冗余ACK(duplicate ACK))后,就知道接收方没有正确接受到跟现在被确认两次的分组后面的分组。因此可以对rdt2.1进行改进,出现rdt2.2版本。
4. 经具有比特差错信道的可靠数据传输:RDT 2.2
取消了NAK的使用,而是使用ACK附带序号来实现
对于RDT2.1的三种情况:
- 正常通信
- 接收方数据错误
- 发送方数据错误
5. 经具有比特差错的丢号信道的可靠数据传输:RDT3.0
引入丢包的概念,使用定时器来进行重发
信道可能造成比特差错的同时,也有可能会造成,数据分组的丢失。如果真的数据发生了丢失,rdt2.2可以解决吗?显然不行,rdt2.2协议出现这种情况就会卡死,无法进入下一步,因此,为了解决这种问题,接受方和发送方都应该使用定时器来进行重发。
发送方需要做到:
- 每次发送一个分组时,启动一个计时器
- 响应定时器中断
- 终止定时器
下面是信息发送者的状态图:
因为分组序号在0和1之间,因此rdt3.0协议有时被称为比特交替协议(alternating-bit protocol)。
rdt3.0一共会出现四种情况:
- 无丢包操作
- 分组丢失
- 丢失ACK
- 过早超时