计算机网络——19可靠数据传输的原理

可靠数据传输的原理

可靠数据传输的原理

  • rdt在应用层、传输层和数据链路层都很重要
  • 是网络Top 10问题之一

计算机网络——19可靠数据传输的原理_第1张图片

信道的不可靠特点决定了可靠数据传输协议的复杂性

可靠数据传输:问题描述

计算机网络——19可靠数据传输的原理_第2张图片

我们将

  • 渐增式的开发可靠数据传输协议的发送方和接收方
  • 只考虑单项数据传输
    • 但控制信息是双向流动的
  • 双向的数据传输问题实际上是2个单项数据传输问题的综合
  • 使用有限状态机(FSM)来描述发送方和接收方

计算机网络——19可靠数据传输的原理_第3张图片

状态:在该状态时,下一个状态只由下一个事件唯一确定

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

  • 下层的信道是完全可靠的
    • 没有比特出错
    • 没有分组丢失
  • 发送方和接收方的FSM
    • 发送方将数据发送到下层信道
    • 接收方从下层信道接收数据

计算机网络——19可靠数据传输的原理_第4张图片

Rdt2.0

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

  • 下层信道可能会出错:将分组中的比特翻转
    • 用校验和来检测比特差错
  • 问题:怎样从差错中恢复
    • 确认(ACK):接收方显式的告诉发送方分组已被正确接收
    • 否定确认(NAK):接收方显式的告诉发送方分组发生了差错
      • 发送方接收到NAK后,发送方重传分组
  • rdt2.0的新机制:采用差错控制编码进行差错检测
    • 发送方差错控制编码:缓存
    • 接收方使用编码检错
    • 接收方的反馈:控制报文(ACK、NAK):接收方 -> 发送方
    • 发送方收到反馈相应的动作

Rdt2.0:FSM描述

计算机网络——19可靠数据传输的原理_第5张图片

流程

计算机网络——19可靠数据传输的原理_第6张图片

rdt2.0的致命缺陷 -> rdt2.1

如果ACK/NAK出错

  • 发送方不知道接收方发生了什么事情
  • 发送方如何做
    • 重传可能重复
    • 不重传可能死锁
  • 需要引入新的机制
    • 序号

处理重复

  • 发送方在每个分组中加入序号
  • 如果ACK/NAK出错,发送方重传当前分组
  • 接收方丢弃(不发给上层)重复分组

停等协议
发送方发送一个分组,然后等待接收方的应答

rdt2.1

rdt2.1:发送方处理出错的ACK/NAK

计算机网络——19可靠数据传输的原理_第7张图片

rdt2.1:接收方

计算机网络——19可靠数据传输的原理_第8张图片

rdt2.1:讨论

发送方

  • 在分组中加入序列号
  • 两个序列号(0,1)就足够了
    • 一次只发送一个未经确认的分组
  • 必须检测ACK/NAK是否出错(需要EDC)
  • 状态数变成了两倍
    • 必须记住当前分组的序列号是0还是1

接收方

  • 必须检测接收到的分组是否是重复的
    • 状态会指示希望接收到的分组序号是0还是1

注意:接收方并不知道发送方是否正确收到了ACK/NAK

  • 没有安排确认的确认

rdt2.1的运行

计算机网络——19可靠数据传输的原理_第9张图片

接收方不知道他最后发送的ACK/NAK是否被正确的收到

  • 发送方不对收到的ack/nak给确认,没有所谓的确认的确认
  • 发送方发送ack,如果后面接收方收到的是:
    • 老分组p0,则ack错误
    • 下一个分组p1,则ack正确

rdt2.2

rdt2.2:无NAK的协议

  • 功能同rdt2.1,但只是用ACK(Ack只要编号)
  • 接收方对最后正确接收的分组发ACK,以代替NAK
    • 接收方必须显式的包含被正确分组的序号
  • 当收到重复的ACK时,发送方与收到NAK采取相同的动作,重传当前分组
  • 为后面的一次发送多个数据单元做一个准备
    • 一次能发送多个
    • 每一个的应答都有:ACK,NACK:麻烦
    • 使用对前一个数据单元的ACK,代替本数据单元的NAK
    • 确认信息减少一半,协议处理简单

rdt2.2的运行

计算机网络——19可靠数据传输的原理_第10张图片

计算机网络——19可靠数据传输的原理_第11张图片

rdt2.2:发送方和接收方片段

计算机网络——19可靠数据传输的原理_第12张图片

Rdt3.0

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

新的假设:下层通道可能会丢失分组(数据或ACK)

  • 会死锁
  • 机制还不够处理这种状况:
    • 校验和
    • 序列号
    • ACK
    • 重传

方法:发送方等待ACK一段合理的时间

  • 发送端超时重传:如果到时没有收到ACK -> 重传
  • 问题:如果分组(或ACK)只是被延时了:
    • 重传将会导致数据重复,但利用序列号已经可以处理这个问题
    • 接收方必须指明被正确接收的序列号
  • 需要一个倒数计时器

链路层的timeout时间确定的 (比较集中)
传输层timeout时间是适应式的 (不太集中)

rdt3.0的运行

计算机网络——19可靠数据传输的原理_第13张图片

计算机网络——19可靠数据传输的原理_第14张图片

  • 过早超时(延迟的ACK)也能够正常工作;但是效率较低,一半的分组和确认是重复的
  • 设置一个合理的超时时间也是比较重要的

rdt3.0的性能

rdt3.0可以工作,但链路容量比较大的情况下,性能很差

  • 链路容量比较大,一次发一个PDU 的不能够充分利用链路的传输能力

计算机网络——19可靠数据传输的原理_第15张图片

U s e n d e r U_{sender} Usender:利用率 – 忙于发送的时间比例
每30ms发送1KB的分组 -> 270kbps=33.75kB/s 的吞吐量(在1 Gbps 链路上)
瓶颈在于:网络协议限制了物理资源的利用

rdt3.0 停-等操作

计算机网络——19可靠数据传输的原理_第16张图片

流水线协议

流水线:提高链路利用率

计算机网络——19可靠数据传输的原理_第17张图片

流水线协议

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

  • 必须增加序号的范围:用多个bit表示分组的序号(用n位表示序号,那么序号的空间为2n)
  • 在发送方/接收方要有缓冲区
    • 发送方缓冲的作用:未得到确认,可能需要重传(以便于检错重发和超时重发);
    • 接收方缓存的作用:上层用户取用数据的速率≠接收到的数据速率;接收到的数据可能乱序,排序交付(可靠)

计算机网络——19可靠数据传输的原理_第18张图片

两种通用的流水线协议:回退N步(GBN)选择重传(SR)

通用:滑动窗口协议

  • 发送缓冲区
    • 形式:内存中的一个区域,落入缓冲区的分组可以发送
    • 功能:用于存放已发送,但是没有得到确认的分组
    • 必要性:需要重发时可用
  • 发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
    • 停止等待协议=1
    • 流水线协议>1,合理的值,不能很大,链路利用率不能够超100%
  • 发送缓冲区中的分组
    • 已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认才能删除
发送窗口
  • 发送窗口:发送缓冲区内容的一个范围
    • 那些已发送但是未经确认分组的序号构成的空间
  • 发送窗口的最大值<=发送缓冲区的值
  • 一开始:没有发送任何一个分组
    • 后沿=前沿
    • 之间为发送窗口的尺寸=0
  • 每发送一个分组,前沿前移一个单位

在这里插入图片描述

发送窗口的移动 -> 前沿移动

  • 发送窗口前沿移动的极限:不能够超过发送缓冲区的大小

计算机网络——19可靠数据传输的原理_第19张图片

发送窗口滑动过程-相对表示方法

  • 采用相对移动方式表示,分组不动
  • 可缓冲范围移动,代表一段可以发送的权力

计算机网络——19可靠数据传输的原理_第20张图片

发送窗口的移动 -> 后沿移动
发送窗口后沿移动

  • 条件:收到老分组的确认
  • 结果:发送缓冲区罩住新的分组,来了分组可以发送
  • 移动的极限:不能够超过前沿

计算机网络——19可靠数据传输的原理_第21张图片

计算机网络——19可靠数据传输的原理_第22张图片

接收窗口

接收窗口 (receiving window) = 接收缓冲区

  • 接收窗口用于控制哪些分组可以接收;
    • 只有收到的分组序号落入接收窗口内才允许接收
    • 若序号在接收窗口之外,则丢弃;
  • 接收窗口尺寸Wr=1,则只能顺序接收;
  • 接收窗口尺寸Wr>1 ,则可以乱序接收
    • 但提交给上层的分组,要按序

例子: W r W_r Wr=1,在0的位置;只有0号分组可以接收;向前滑动一个,罩在1的位置,如果来了第2号分组,则丢弃。

计算机网络——19可靠数据传输的原理_第23张图片

接收窗口的滑动和发送确认

  • 滑动:
    • 低序号的分组到来,接收窗口移动;
    • 高序号分组乱序到,缓存但不交付(因为要实现rdt,不允许失序),不滑动
  • 发送确认:
    • 接收窗口尺寸=1 ; 发送连续收到的最大的分组确认(累计确认)
    • 接收窗口尺寸>1 ; 收到分组,发送那个分组的确认(非累计确认,比如发送ACK3表示收到3分组,但是并不代表2分组就收到了)

计算机网络——19可靠数据传输的原理_第24张图片

计算机网络——19可靠数据传输的原理_第25张图片

正常情况下2个窗口的互动

计算机网络——19可靠数据传输的原理_第26张图片

GBN协议

异常状态下GBN的2窗口互动

  • 发送窗口
    • 新分组落入发送缓冲区范围,发送->前沿滑动
    • 超时重发机制让发送端将发送窗口中的所有分组发送出去(就是将所有已发送但是未确认的分组都发送出去)
    • 来了老分组的重复确认→后沿不向前滑动→新的分组无法落入发送缓冲区的范围团(此时如果发送缓冲区有新的分组可以发送)
  • 接收窗口
    • 收到乱序分组,没有落入到接收窗口范界内,抛弃(假如现在接收窗口罩到了2,表明收到了1,但是收到了3,即收到乱序分组,则会抛弃3)
    • (重复)发送老分组的确认,累计确认(已经收到了1,此时会发送ACK1)

计算机网络——19可靠数据传输的原理_第27张图片

GBN协议和SR协议的异同

  • 相同之处
    • 发送窗口>1
    • 一次能够可发送多个 未经确认的分组
  • 不同之处
    • GBN :接收窗口尺寸=1
      • 接收端:只能顺序接收
      • 发送端:从表现来看,一旦一个 分组没有发成功,如:0,1,2,3,4 ; 假如1未成功,234都发送出去 了,要返回1再发送;GB1(go back 1)
  • SR: 接收窗口尺寸>1
    • 接收端:可以乱序接收
    • 发送端:发送0,1,2,3,4,一旦1 未成功,2,3,4,已发送,无需重发,选择性发送1

GBN:发送方拓展的FSM

计算机网络——19可靠数据传输的原理_第28张图片

GBN:接收方拓展的FSM

计算机网络——19可靠数据传输的原理_第29张图片

  • 只发送ACK:对顺序接收的最高序号的分组
    • 可能会产生重复的ACK
    • 只需记住expectedseqnum;接收窗口=1
      • 只一个变量就可表示接收窗口
  • 对乱序的分组:
    • 丢弃(不缓存)→ 在接收方不被缓存
    • 对顺序接收的最高序号的分组进行确认-累计确认

在这里插入图片描述

计算机网络——19可靠数据传输的原理_第30张图片

选择重传SR

  • 接收方对每个正确接收的分组,分别发送ACKn(非累积确认)
    • 接收窗口>1
      • 可以缓存乱序的分组
    • 最终将分组按顺序交付给上层
  • 发送方只对那些没有收到ACK的分组进行重发-选择性重发
    • 发送方为每个未确认的分组设定一个定时器
  • 发送窗口的最大值(发送缓冲区)限制发送未确认分组的个数

发送方:

  • 从上层接受数据
    • 如果下一个可用于该分组的序号可在发送窗口中,则发送
  • timeout(n)
    • 重新发送分组n,重新设定定时器
  • ACK(n) in [sendbase,sendbase+N]:
    • 将分组n标记为已接收
    • 如n为最小未确认的分组序号,将base移到下一个未确认序号

接收方:

  • 分组n [rcvbase, rcvbase+N-1]
    • 发送ACK(n)
    • 乱序:缓存
    • 有序:该分组及以前缓存的序号连续的分组交付给上层,然后将窗口移到下一个仍未被接收的分组
  • 分组n [rcvbase-N, rcvbase-1]
    • ACK(n)
  • 其它
    • 忽略该分组

计算机网络——19可靠数据传输的原理_第31张图片

对比GBN和SR

GBN SR
优点 简单,所需资源少(接收方一个 缓存单元) 出错时,重传一个代价小
缺点 一旦出错,回退N步代价大 复杂,所需要资源多(接收方多个 缓存单元)

适用范围

  • 出错率低:比较适合GBN,出错非常罕见,没有必 要用复杂的SR,为罕见的事件做日常的准备和复杂处理
  • 链路容量大(延迟大、带宽大、出错率也就比较大):比较适合SR而不 是GBN,一点出错代价太大

窗口的最大尺寸

假设用n bit表示序号,则发送窗口的最大尺寸如下(超过这个尺寸会出问题)

  • GBN: 2 n − 1 2^n -1 2n1
  • SR: 2 n − 1 2^n-1 2n1

例如:n=2; 序列号:0, 1, 2, 3

  • GBN =3
  • SR=2

SR的例子:

计算机网络——19可靠数据传输的原理_第32张图片

接收方看不到二者的区别
旦出错,回退N步代价大|复杂,所需要资源多(接收方多个 缓存单元)|

你可能感兴趣的:(计算机网络,计算机网络)