可靠数据传输

ce342ad1ce180b98af68f01ddb7749cb.png

可靠数据传输是指:数据可以通过一条可靠信道来传输。传输的数据不会受到损失或者丢失,而且所有数据都是按照其发送顺序进行交付。

我们都知道IP层是不可靠传输的,而TCP是可靠传输的,但是TCP是传输层的协议,这就要求设计一个合理的协议机制,当底层丢失的时候,需要如何处理。下面一步步构造可靠数据传输协议。称之为rdt协议。

在rdt1.0中,我们先考虑一个最简单的情况,即底层信道是完全可靠的。

正如我们日常生活中一样,数据错误的时候需要重新发送,在rdt2.0中采用的是自动重传协议(ARQ),一旦出现错误,那么可靠数据传输协议就会自动重传数据。当然,我们需要确定什么时候需要重传,如何告诉发送方,重传。因此,rdt2.0相比于1.0版本而言,增加了一下机制:

1.差错检测2.接收方反馈3.重传

差错检测可以使用检验和,接收方反馈的情况无非就是“肯定确认”(ACK)和“否定确认”(NAK)。当发送方接收到接收方反馈回来的NAK消息时,发送方重传该分组。

如果反馈的是ACK,那么说明数据无误,进入等待上层数据状态;如果反馈消息是NAK,那么重发分组,并且继续等待接收方的反馈消息,直到等到ACK消息,才进入等待上层数据状态。需要注意,在这种情形下,不能在等待ACK和NAK的时候从上层获取数据。称之为“停等”协议。

那么在rdt3.0中存在的新问题就是如何解决丢失的数据的重传问题,其他的问题在rdt2.0中就已经解决了。

我们的解决方案是“发送方在一个合理的时间内等待ACK”。如果一旦超出这个时间还没有收到ACK,那么发送方就重传;

已经有一个可靠数据传输的基本协议——rdt3.0了。这个协议的致命问题是“效率太低了”。如果想让rdt3.0能够使用,我们就必须解决“停等”这个问题。直观的方式就是“允许发送方一次性发送多个分组”。这样就能大大提高物理链路的利用率。

GBN协议(回退N步),它允许发送多个分组而不需要等待确认。但它受限制于窗口的大小N。

GBN协议也常被成为滑动窗口协议。在GBN协议中,发送方首先检查窗口大小是否是满的,如果没有满,那么就产生一个分组并将其发送,并且同时更新变量。如果窗口已经满了,那么发送方给上层指出已满。然后上层会等一会再来试。发送方收到ACK应答的方式是“累计确认”。这表明接收方已经正确接受到序列为N的以前的所有分组。当超时事件发生的时候,GBN协议是“回退N步”来进行处理的。它将已经确认收到之后所有已发送但未确认的分组重传。这样能够保证分组的顺序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值