可靠数据传输协议rdt

2026-02-18 00:42:19

可靠数据传输协议(rdt)rdt在应用层、传输层和数据链路层都很重要,信道的不可靠特点决定了可靠数据传输协议( rdt )的复杂性。

Rdt1.0: 在可靠信道上的可靠数据传输

本层只需要直接将数据进行上下传输:

发送方将数据发送到下层信道

接收方从下层信道接收数据

Rdt2.0:具有比特差错的信道

本层需要采用差错控制编码进行差错检测。

发送方差错控制编码、缓存(以备检错重传 )

接收方使用编码检错

接收方的反馈:控制报文(ACK,NAK):接收方–>发送方

发送方收到反馈相应的动作

出错重传

改进一:为了防止ACK/NAK的信息丢失出错,引入了序号的新机制:

发送方:

必须检测ACK/NAK是否出错

在分组中加入序列号,因为 一次只发送一个未经确认的分组,两个序列号(0,1)就足够了

接收方:

必须检测接收到的分组是否是重复的

改进二:为了节省空间带宽,省去了NAK,只适用ACK;上一个ACK表示NAK。

Rdt3.0:具有比特差错和分组丢失的信道

首先基于Rdt2.0上解决了比特差错的问题,但是有可能分组会丢失,如果分组丢失,这样不但接收方等待发送方的数据,而且发送方等待接收方的ACK确认,造成了死锁。

解决方案:引入超时重传机制:如果到时没有收到ACK->重传(同样用序号保证数据不重复)

自此Rdt3.0依靠各种机制已经能够提供可靠的数据传输,但是由于需要等待确定导致性能不太理想。

性能优化:

利用流水线协议(两种通用的流水线协议:回退N步(GBN)**和选择重传(SR)**),提高链路的利用率。

允许发送方在未得到对方确认的情况下一次发送多个分组

必须增加序号的范围:用多个bit表示分组的序号

在发送方/接收方要有缓冲区

具体实现:

回退N步:

发送端最多在流水线中有N个未确认的分组

发送端拥有对最老的未确认分组的定时器

接收端只是发送累计型确认(按顺序依次接收,发送累计确认)

选择重传:

如果下一个可用于该分组的序号可在发送窗口中,则发送,并且每个分组有自己的定时器(只有收到该序号的ACK才会清除)。

接收端发送相应的ACK(n);该分组及以前缓存的序号连续的分组交付给上层,然后将窗口移到下一个仍未被接收的分组。

总结:

滑动窗口(slide window)协议:

一种缓冲区的具体协议,分为发送方缓冲区和接收方缓冲区(窗口即是缓冲区内容的一个范围,根据某种条件滑动),根据大小不同可以把传输协议分为:

停止等待协议:发送方缓存区(SW)为1,接收方缓存区(RW)为1

回退N步协议:发送方缓存区(SW)> 1,接收方缓存区(RW)为1

选择重传协议:发送方缓存区(SW)> 1,接收方缓存区(RW)> 1

TIG、MIG 和 MAG 焊接有什么区别?
王者荣耀 停止运营公告