问题描述

我们将:

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

    RDT1.0:在可靠信道上的可靠传输

  • 下层的信道是完全可靠的

    • 没有比特出错
    • 没有分组丢失

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

  • 下层信道可能会出错:将分组中的比特翻转

  • 用校验和来检测比特差错 问题:怎样从差错中恢复:
    • 确认(ACK):接收方显式地告诉发送方分组已被正确接收
    • 否定确认( NAK): 接收方显式地告诉发送方分组发生了差错
      • 发送方收到NAK后,发送方重传分组
  • rdt2.0中的新机制:采用差错控制编码进行差错检测

    • 发送方差错控制编码、缓存
    • 接收方使用编码检错
    • 接收方的反馈:控制报文(ACK,NAK):接收方 ->发送方
    • 发送方收到反馈相应的动作

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

      如果ACK/NAK出错?
  • 发送方不知道接收方发 生了什么事情!

  • 发送方如何做?
    • 重传?可能重复
    • 不重传?可能死锁(或出 错)
  • 需要引入新的机制
    • 序号
  • 处理重复:
    • 发送方在每个分组中加 入序号
    • 如果ACK/NAK出错,发 送方重传当前分组
    • 接收方丢弃(不发给上 层)重复分组
  • 停等协议:发送方发送一个分组, 然后等待接收方的应答

  • 防止超时死锁 设置超时重传机制,一般设置比正常往返多一点的时间

rdt3.0的性能

  • rdt3.0可以工作,但链路容量比较大的情况下,性能很差
  • 链路容量比较大,一次发一个PDU 的不能够充分利用链路的传输能力
  • 例:1 Gbps的链路,15 ms端-端传播延时,分组大小为1kB: Ttransmit = 8kb/pkt 109 b/sec = 8
    • U sender:利用率 – 忙于发送的时间比例
  • 每30ms发送1KB的分组 270kbps=33.75kB/s 的吞吐量(在1 Gbps 链路上)
  • 瓶颈在于:网络协议限制了物理资源的利用!
    • U sender= .008 30.008 = 0.00027 microsec L / R RTT + L / R = L (分组长度,比特) R (传输速率,bps) =

通用:滑动窗口(slide window)协议

  • 发送缓冲区
  • 形式:内存中的一个区域,落入缓冲区的分组可以发送
  •  功能:用于存放已发送,但是没有得到确认的分组
  •  必要性:需要重发时可用  发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
  •  停止等待协议=1
  •  流水线协议>1,合理的值,不能很大,链路利用率不能够超100%
  •  发送缓冲区中的分组
  •  未发送的:落入发送缓冲区的分组,可以连续发送出去;
  •  已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认 才能删除

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

  • 发送窗口

    • 有新的分组落入发送缓冲区范围,发送->前沿滑动
    •  来了老的低序号分组的确认->后沿向前滑动->新的分组可 以落入发送缓冲区的范围
  • 接收窗口
    • 收到分组,落入到接收窗口范围内,接收
    • 是低序号 ,发送确认给对方
  • 发送端上面来了分组->发送窗口滑动->接收窗口滑

GBN协议和SR协议的异同

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