计算机网络 运输层 可靠数据传输原理


在这里插入图片描述
可靠数据传输的技术:检验和、序号、定时器、肯定和否定确认分组

1.构造可靠传输协议

1.1 经完全可靠信道的可靠数据传输:rdt1.0

假设信道完全可靠,什么也不做。

1.2 自动重传请求协议:rdt2.0

肯定确认与否定确认。

1.2.1 ARQ协议

基于重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)。
1.差错检测:检验和字段shi7接收方检测到何时出现了比特差错。
2.接收方反馈:例如肯定确认和否定确认。
3.重传:接收方接收到有差错的分组时,发送方将重传该分组文。

1.2.2 停等协议

rdt2.0这种协议被称作停等协议。
发送方等待ACK或NAK时,不能发送一块新数据,除非发送方确信接收方已正确接收该分组。

1.2.3 rdt2.0的缺陷

没考虑ACK或NAK分组受损的可能性

1.3 停等、序号、冗余ACK:rdt2.1

让发送方对分组进行编号,接收方检查序号即可确定收到的分组是否一次重传。
对于停等协议,1比特序号就够了。
收到失序分组,发送肯定确认。收到受损分组,发送否定确认。

1.4 没有NAK、接收方必须包括分组序号:rdt2.2

rdt2.2没有NAK。
与rdt2.1的区别是,接收方此时必须包括由一个ACK报文所确认的分组序号。
(序号是0或1)
发送方接收到对同一个分组的两个ACK(接收冗余ACK后),就知道接收方没有正确接收到跟在被确认两次的分组后面的分组。

1.5 定时器、重传:rdt3.0

这是一个在可能出错和丢包的信道上可靠数据的协议。
目的:让发送方负责检测和丢包工作。
定时器:为了实现基于时间的重传机制,需要一个倒计数定时器。在一个给定的时间量过期后,可中断发送方。
因此发送方需要做到:
①每次发送一个分组(包括第一次分组和重传分组)时,便启动一个定时器。
②响应定时器中断(采取适当的动作)。
③终止定时器。
在这里插入图片描述
因为分组序号在0和1之间交替,因此rdt3.0有时被称为比特交替协议。

2.流水线可靠数据传输协议

流水线技术,不同于停等。
在这里插入图片描述

  • 必须增加序号范围。因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中的未确认报文。
  • 协议的发送方和接收方两端也许不得不缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。
  • 所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线的差错恢复有两种基本方法是:回退N步(GBN)、选择重传(SR)。

3.回退N步

在 回退N步(GBN/滑动窗口)协议中,允许发送方发送多个分组(当有多个分组可用时),而不需等待确认,但它也受限在流水线中未确认的分组数不能超过某个最大允许数N。
使用技术:使用序号、累计确认、检验和、超时重传。
在这里插入图片描述
base:最早未被确认的分组的序号
nextseqnum:最小的未被使用的序号(下一个待发分组的序号)
N:窗口长度
[0,base-1]:已经发送并被确认的分组
[base,nextseqnum-1]:已经发送但未被确认的分组
[nextseqnum,base+N-1]:那些要被立即发送的分组
[base+N,∞]:不能被使用的序号
在这里插入图片描述

发送方

发送方必须响应三种事件。

  • 上层的调用。上层调用rdt_send()时,如果窗口未满,则产生一个分组并将其发送,并相应地更新变量。
  • 收到一个ACK。采取累计确认,表明接收方已正确接收到序号为n的以前且包括n在内的所有分组。
  • 超时事件。如果出现超时,发送方重传所有已发送但还未被确认过的分组。如果收到一个ACK,但还有已发送但未被确认的分组,则定时器被重新启动。如果没有已发送但未被确认的分组,停止该定时器。
    在这里插入图片描述

接收方

丢弃失序分组。
优点:接收方缓存简单,即接收方不需要缓存任何失序分组。接收方需要维护的唯一信息就是下一个按需接收的分组的序号。

4.选择重传

选择重传的目的:避免重传大量不必要的分组

接收方将确认一个正确接收的分组而不管其是否按序。失序的分组将被缓存知道所有丢失分组(即序号更小的分组)皆被收到为止。这时才可以将一批分组按序交付给上层。
在这里插入图片描述
在这里插入图片描述

SR发送方的事件与动作

1.从上层收到数据。当从上层接收到数据后,SR发送方检查下一个可用于该分组的序号。如果序号位于发送方的窗口内,则将数据打包并发送;否则就像在GBN中一样,要么将数据缓存,要么将其返回给上层以便以后传输。
2.超时。定时器再次用来防止丢失分组。然而,现在每个分组必须拥有其自己的逻辑定时器,因为超时发送后只能发送一个分组。
3.收到ACK。如果收到ACK,倘若该分组序号在窗口内,则SR发送方将那个被确认的分组标记为已接收。如果该分组的序号等于send_base,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且有序号落在窗口内的未发送分组,则发送这些分组。

SR接收方的事件与动作

1.序号在[rcv_base,rcv_base+N-1]内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择ACK被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收窗口的基序号,则该分组以及以前缓存的序号连续的(起始于rcv_base的)分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组。
2.序号在[rcv_base-N,rcv_base-1]内的分组被正确收到。在此情况下,必须产生一个ACK,即使该分组是接收方以前已确认过的分组。
3.其他情况。忽略该分组。

窗口大小

对SR协议而言,窗口长度必须小于或等于序号空间大小的一半。

其他

要确保一个序号不被重新使用,直到发送方“确信”任何先前发送的序号为x的分组都不再在网络中为止。
通过假定一个分组在网络中的“存活”时间不会超过某个固定最大时间量来做到这一点。在高速网络的TCP扩展中,最长的分组寿命被设定为大约3分钟。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值