计算机网络学习笔记(6) - 可靠数据传输原理 GBN协议 SR协议


一、概述

可靠数据传输可以说是网络传输中要解决的最重要的问题。简单来看,下层不可靠,而上层要提供可靠的服务,因此必然是一个复杂的问题。在此处,仅讨论单向数据传输(半双工),因为在一定程度上,双向数据传输(全双工)可以被看做是两个单向数据传输。此外需要注意的是,此处讨论的理论适合于一般的计算机网络,而不只是针对运输层,所以约定后续采用通用术语“分组”。

二、构造可靠数据传输

底层信道的不可靠性,决定了上层协议的复杂性”。以下讨论是逐步地使的下层信道由可靠转变为不可靠,那么上层协议就是在逐步地完善,一定程度上来说也也在逐步变复杂。后一个版本的协议是在前一个版本上增加新的特性(不断进化),新的特性也是在应对新的问题。rdt : reliable data transfer.

1. rdt 1.0

  • 应对的情况(问题):底层信道完全可靠。
  • 策略:发送方将数据发送到下层信道,接收方从下层信道接收数据,接收方不需要提供任何反馈信息给发送方。注意,此处假定接收方接收数据的速率和发送方发送数据的速度一样快。

2. rdt 2.0

  • 应对的情况(问题):底层信道传输的分组中的比特可能受损。
  • 策略:1、差错检测,通过差错检测技术(例如奇偶校验、循环冗余检测、UDP中的检验和等)检测分组是否出现了差错。差错检测技术要求有额外的比特从发送方发送到接收方,这些比特被汇集在rdt 2.0数据分组的分组检验和字段中。2、接收方反馈,接收方通过发送反馈信息 ACK(肯定确认,positive acknowledgment ) 或 NAK(否定确认,negative acknowledgment) 给发送方,以告诉发送方分组是否被正确接收。3、发送方重传,当接收方收到有差错的分组时,发送方将重传该分组。

停等协议:在 rdt 2.0 中,发送方直到确认接收方已经正确接收当前分组后,才会发送下一个分组,这种协议被称为停止等待,简称停等协议

3. rdt 2.1

  • 应对的情况(问题):ACK或NAK分组受损,ACK和NAK通过差错检测后发现受损(ACK和NAK也需要校验),即发送方无法正确收到接收方的反馈信息,从而无法判断接收方是否正确收到了分组。
  • 策略发送方在数据分组中添加序号字段。具体地,当发送方收到含糊不清地ACK或NAK时,只需重传当前分组即可,由发送方对数据分组进行编号,即所谓的序号字段。此时接收方可以通过检查序号就知道此次收到的分组是否为重传,从而决定接收分组还是丢弃分组。对于停等协议,一比特序号足够,即分组序号在0和1之间交替,区分新分组和旧分组。

4. rdt 2.2

  • 应对的情况(问题):发送方需要对接收方的信号判断是NAK还是ACK。
  • 策略:反馈信号只有ACK,但要对ACK进行编号。所谓的无NAK,即NAK free。用对前一个分组的正向确认来代替对当前分组的反向确认。但是这里**遗留一个问题,假如说需要对第一个分组(0号分组)进行反向确认呢?**例如当前接收方需要给发送方的反馈是NAK 0,但是这里不用NAK 0,而用ACK 1,此时ACK 1 表示是对0号分组的反向确认,当发送方收到ACK 1 后依然明白0号分组出错了,然后重放0号分组。

5. rdt 3.0

  • 应对的情况(问题):下层信道可能会丢失分组,例如路由器可能会丢弃分组。
  • 策略:超时重传机制。发送方在发送完分组后启动一个超时定时器,在定时器倒数结束后,发送方重放分组。超时重传可能会导致接收方收到冗余分组,但由于分组中有序号字段,使得接收方可以判断当前分组是否为冗余分组。需要注意超时定时器的设置非常重要,若设置不合理则可能导致传输效率降低

至此,通过差错检测、接收方反馈(肯定和否定确认分组)、发送方数据分组中添加序号字段、发送方超时重传技术后,得到了可靠的数据传输协议。

三、流水线可靠传输协议

rdt 3.0是一种停等协议,对信道的利用率非常低,问题的核心在于每次只能发送一个未经确认的分组。因此引入流水线技术,流水线技术带来以下影响:

  • 增加序号范围,因为同时存在多个未经确认的分组在传输中。
  • 发送方和接收方需要缓存多个分组,例如发送方必须缓存那些已发送但未确认的分组以用于检错重发,接收方为了应对接收方接收的速率和上层应用收取分组速率不一致的问题。
  • 需要处理丢失、损坏和延时过大的分组。

解决流水线的差错恢复有两种基本方法:回退N步(Go-Back-N, GBN) 和 选择重传(Selective Repeat, SR)。在GBN协议和SR协议前,首先需要了解所谓的Slide Window协议,即滑动窗口协议,发送窗口和接收窗口大小不同的情况分别构成了以下三种协议,具体的:

  • 停等协议:发送窗口 = 1;接收窗口 = 1
  • GBN协议:发送窗口 > 1;接收窗口 = 1
  • SR协议: 发送窗口 > 1; 接收窗口 > 1

此外,几个概念:

  • 发送缓冲区:发送方用于缓存那些已发送但未被确认的分组的一块存储空间,存储分组的目的在于检错重发,超时重发。发送缓冲区的大小决定一次最多可以发送多少个未经确认的分组。
  • 发送窗口:发送缓冲区的一个子集(部分或全部),即发送缓冲区中已经被已发送但未被确认的分组占用的空间,发送窗口的大小小于等于发送缓冲区的值。
  • 接收窗口接收窗口 = 接收缓存冲区,接收窗口用于控制哪些分组可以接收。只有分组序号落在接收窗口内才可以接收,若序号落在窗口之外,则丢弃。

1. 回退N步 GBN

  • 接收窗口 = 1,则接收端只能顺序接收。例如发送方发送了0号、1号、2号、3号共4个分组,假如说1号分组未成功,则需要返回1号分组(Go-Back),并重发1号分组及之后的分组。
  • 发送端只需设置一个对 最老的、已发送但未经确认分组 的定时器,若定时器超时,则重发所有未经确认地分组。
  • GBN 协议采取累计确认,例如ACK = 3,则说明 0号、1号、2号、3号分组均已被接收方正确收到。

2. 选择重传 SR

  • 接收窗口 > 1,接收端可以乱序接收。例如发送方发送了0号、1号、2号、3号共4个分组,假如说1号分组未成功,则只需要选择性地重传1号分组。
  • 发送端需要为每一个分组设置一个定时器,哪个分组超时,重传哪个分组。
  • 非累积确认,接收方对每个正确接收的分组,分别发送一个对应的ACK。

3. GBN 和 SR 对比

GBN:

  • 优点:简单且所需资源少,接收方仅需一个缓冲单元。
  • 缺点:一但出错,回退N步代价较大。
  • 适用性:适用于低出错率的链路,即出错罕见。

SR:

  • 优点:出错时,选择重传代价较小。
  • 缺点:复杂且所需资源多,接收方需要更多的缓冲区空间
  • 适用性:适用于链路容量大的(延迟大、带宽大)、出错并不罕见的链路,避免 GBN 的一点出错回退N步造成的较大代价。

本文为个人学习笔记,如有错漏之处,敬请指正!

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值