【流水线:提高链路利用率,GBN,SR】

流水线:提高链路利用率

在这里插入图片描述

  • 增加n,能提高链路利用率
  • 但当达到某个n,其u=100%时,无法再通过增加n,提高利用率
  • 瓶颈转移了 ->链路带宽

流水线协议

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

  • 必须增加序号的范围:用多个bit表示分组的序号
  • 在发送方/接收方要有缓冲区
    • 发送方缓存:未得到确认,可能需要重传;
    • 接收方缓存:上层用户取用数据的速率不等于接收数据的速率;接收到的数据可能乱序,排序交付(可靠)
  • 两种通用的流水线协议:回退N步(GBN)和选择重传(SR)

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

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

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

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

①绿色部分表示发送缓冲区
在这里插入图片描述

滑动窗口(slide window)协议

  • 发送窗口:发送缓冲区内容的一个范围
    • 那些已发送但是未确认分组的序号构成的空间
  • 发送窗口的最大值<=发送缓冲区的值
  • 一开始:没有发送任何一个分组
    • 后沿=前沿
    • 之间为发送窗口的尺寸=0
  • 每发送一个分组,前沿前移一个单位
    在这里插入图片描述
    最开始的时候前沿=后沿

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

  • 发送窗口前沿移动的极限:不能够超过发送缓冲区
    在这里插入图片描述

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

  • 发送窗口后沿移动
    • 条件:收到老分组的确认
    • 结果:发送缓冲区罩住新的分组,来了分组可以发送
    • 移动的极限:不能够超过前沿
      在这里插入图片描述
      红色部分是发送过后得到确认的,发送缓冲区就会向后移动
      在这里插入图片描述
      (1)刚开始发送窗口的前沿和后沿是在一起,这里的的发送缓冲区是占5个
      在这里插入图片描述
      (2)再发送0,1,2,3,4,等待接收端确认
      在这里插入图片描述
      (3)收到0-1的确认
      在这里插入图片描述
      (4)将0,1发送窗口的前沿后移
      在这里插入图片描述
      (5)将发送窗口的后沿后移,缓存区大小不变

就我自己的理解,发送缓存区始终存放的是发送还没有得到确认的分组,得到确认的分组就已将传给了接收方。

滑动窗口(slide window)协议-接收窗口

  • 接收窗口(receiving window)= 接收缓冲区
  • 接收窗口用于控制哪些分组可以接收;
    • 只有收到的分组序号落入接收窗口内才允许被接收
    • 若序号在接收窗口之外,则丢弃;
    • 接收窗口尺寸Wr=1,则只能顺序接收;
    • 接收窗口尺寸Wr>1,则可以乱序接收
      • 但是提交给上层的分组,要按序
        -
  • 接收窗口的滑动和发送确认
    • 滑动:
      • 低序号的分组的到来,接收窗口移动;
      • 高序号分组乱序到,缓存但不交付(因为要实现rdt,不允许失序),不滑动
    • 发送确认:
      • 接收窗口尺寸=1,发送连续收到的最大的分组确认(累计确认)
      • 接收窗口尺寸>1,收到分组,发送那个分组的确认(非累计确认)
        在这里插入图片描述
        在这里插入图片描述

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

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

异常情况下GBN的2窗口互动

  • 发送窗口
    • 新分组落入发送缓冲区范围,发送->前沿滑动
    • 超时重发机制让发送端将发送窗口中的所有分组发送出去
    • 来了老分组的重复确认->后沿不向前滑动->新的分组无法落入发送缓冲区的范围(此时如果缓冲区有新的分组可以发送)
  • 接收窗口
    • 收到乱序分组,没有落入到窗口范围内,抛弃
    • (重复)发送老分组的确认,累计确认

异常情况下SR的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

流水线协议:总结

Go-back-N:

  • 发送端最多在流水线中有N个未确认的分组
  • 接收端只是发送累计型确认cumulative ack
    • 接收端如果发现gap,不确认新到来的分组
  • 发送端拥有对最老的未确认分组的定时器
    • 只需设置一个定时器
    • 当定时器到来时,重传所有未确认的分组
      Selective Repeat:
  • 发送端最多在流水线中有N个未确认的分组
  • 接收方对每个到来的分组单独确认individual ack(非累计确认)
  • 发送方为每一个未确认的分组保持一个定时器
    • 当超时定时器到时,只是重发到时的未确认的分组

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

选择重传

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值