可靠数据传输协议(计算机网络)

可靠数据传输协议,即rdt(reliable data transfer protocol)。rdt有较多一步步改进的版本,有时候总是记混,傻傻分不清,所以记录总结一下。

一.rdt 1.0

也叫经完全可靠信道的可靠数据传输。

该方法考虑得很简单,认为底层信道完全可靠(无比特差错、无分组丢失、分组按序到达)

并且假定了接收方与发送方的数据传输率一致。

有限状态机(Finite-State Machine)如下:

解释:发送方rdt_send()接受上层的数据,产生一个分组发送到底层信道上;接收方rdt_rcv()从底层信道接收一个分组,从分组中取出数据,之后将数据传输到较高层。

二.rdt 2.0

也叫经具有比特差错信道的可靠数据传输

相比于rdt 1.0,新增:

①差错检测(可以使用检验和)

②接收方反馈(ACK,NAK)

③重传(接收方收到有差错的分组时,发送方将重传该分组)

有限状态机(Finite-State Machine)如下:

解释:发送方rdt_send()接受上层的数据,产生一个分组(带有检验和checksum)发送到底层信道上,就等待接收方的ACK或NAK分组,如果接收到一个NAK分组,就重传最后一个分组并等待接收方对该重传分组响应的ACK或NAK;如果接收到一个ACK分组,代表最近发送的分组被正确接收,协议返回等待来自上面调用的状态。

对于接收方,rdt_rcv()从底层信道接收一个分组,若分组受损则回送发送方一个NAK分组,若没有受损,则从分组中取出数据,之后将数据传输到较高层并回送发送方一个ACK分组。

由于发送方发出1个分组,等待接收方响应后再继续发送,所以rdt 2.0也可以被称为停等协议。

缺陷:如果接受方发送的ACK/NAK受损,首先发送方就不知道接收方发生了什么情况。如果发送方进行重传,那么就引入了冗余分组,使得接收方不知道该分组是新的还是重传的。

三.rdt 2.1

在2.0的基础上新增:

①在数据分组中添加一个新字段,让发送方对其数据分组编号,称为序列号。(也就是说接收方接收到相同序号的分组就丢弃重复的分组),以此来解决2.0的缺陷。

有限状态机(Finite-State Machine)如下:

有限状态机的直观变化:

状态数量翻倍,状态需要记住当前分组序列号。

例如发送方发送一个序列号为0的分组,进入等待ACK/NAK 0的状态,若接收到NAK或者确认消息损坏就重传分组,如果接收到ACK且确认消息未损坏,则改变序列号,从0变为1。

现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回ACK,但是ACK受损,接收方处于等待1号数据状态,发送方重复发送0号数据,接收方会丢弃0号数据,避免重复。

四.rdt 2.2

即无NAK消息协议

跟rdt2.1的功能相同,但是只使用ACK,在ACK的信息上加上了期望的序列号

实现:

1)接收方通过ACK告知最后一个被正确接收的分组

2)在ACK消息中显式地加入被确认分组的序列号

3)发送方收到重复ACK后采取与收到NAK消息相同的动作,即重传当前分组

有限状态机(Finite-State Machine)如下:

现在假设情景发送方发送0数据包给接收方,接收方接受0数据包并返回ACK0,状态变为等待来自下层的1,然而ACK0损坏,则发送方重传0数据包,此时接收方接收到之后仍然回送ACK0并丢弃该数据。

五.rdt 3.0

即经具有比特差错的丢包信道的可靠数据传输。

考虑信道即可能产生运输误差,也可能发生分组丢失(如果分组直接丢失,前面的协议就会一直等下去,明显不行)。需要引入倒计数定时器(等待一个“合理”的时间,如果没收到ACK则重传),但性能不太好。

有限状态机(Finite-State Machine)如下:

接收方仍然可以使用rdt 2.2的

这个协议相当于在rdt2.2的基础上增加了一个定时器实现超时重传。例如,发送方发送0数据包且开启定时器,若分组受损,则接收方回送ACK1,此时发送方接收到后什么都不做,超时后重传0数据包。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值