SR和GBN的区别

这篇具有很好参考价值的文章主要介绍了SR和GBN的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go-Back-N协议和Selective-Repeat协议是计算机网络在传输层和链路层用于实现可靠数据传输的两个重要协议。Internet的TCP协议在设计时借鉴了上述两个协议的基本思想。

回退N步(GBN)

回退N步(GBN)协议也称为==滑动窗口协议==,通过控制窗口的大小来控制发送方发送的速率,并且在滑动窗口这个机制的前提下,能够为数据的可靠传输做出保证

为什么要叫“回退N步”协议?

协议的名字”回退N步“来源于出现丢失和时延过长分组时发送方的行为。对于这些情况,发送方可能会重新发送对应的分组

我们知道,为了区分不同的分组,我们为这些数据分组都进行编号。

在GBN协议中,根据当前发送方传输的情况对一些特别位置进行特殊的命名:

  • 基序号(base):定义最早未确认分组的序号

  • 下一个序号(nextseqnum):定义最小的未使用序号

    下图是GBN中发送方看到的序号:

    SR和GBN的区别

如上图所示,将序号范围分成了四段:

  • 【0,base - 1】:已经发送并且被确认的分组
  • 【base,nextseqnum - 1】:已发送但未被确认的分组
  • 【nextseqnum,base + N - 1】:即将被发送的分组
  • 【base + N,---------】:现在还不能够使用的分组

上述那些已被发送但未被确认的分组以及即将发送的分组的==许可范围==就可以被看成是一个序号范围内长度为N的窗口。即为我们常说的滑动窗口,这个窗口会随着协议的运行,会在序号空间内不断的向前滑动

窗口长度可根据接收方接收和缓存报文的能力、网络中的拥塞程度或两者情况来进行设置

有利于理解的知识点:在实践中,分组的序号是承载在分组首部的一个固定长度的字段中。所以序号的大小是有限制的,如果字段长度为k,那么序号的范围就是【0,2k - 1】。所以,对于一些过长的序号就必须进行模2k 运算

下面是GBN协议中发送方和接收方的流程:

GBN发送方必须响应的三种类型的事件

  • 上层的调用:当上传调用发送数据的事件时,首先会检查发送窗口是否已满:
    • 窗口未满:产生一个分组并将其发送,并更新变量nextseqnum
    • 窗口已满:发送发只需要将数据返回给上层,隐式的指示上层该窗口已满,然后上层可能过一会再试。在实际实现中,发送方更可能会缓存这些数据,并在之后尝试发送。或者就直接使用同步机制仅当窗口不满时,上层才能够调用发送事件。
  • 收到一个ACK:在GBN协议(与SR协议不同)中,对序号为n的分组的确认采用==累积确认==的方式,这表明接收方在接收到序号为n的分组确认后,表示在序号为n以前包括n的所有分组已经正常发送到接收方
  • 超时事件:如果出现超时,发送方会重传所有已发送但未被确认的分组。(这里注意只有一个对应的超时重传计时器)

GBN接收方响应型的事件

  • 如果一个序号为n的分组被正确接收到,并且按序(即上次交付给上层的数据的序号为n - 1),则接收方为分组n发送一个ACK,并将数据部分交付给上层。其它情况所有情况(例如序号没有按序)都会丢失该分组这是和SR协议不同的地方

    思考,只要收到的分组不是按序的就会丢失效率会不会太低?

    假如现在发送了分组序号为1……n、n+1的分组,假如n+1的分组先于n的分组收到,那么根据前面所说会就会丢弃序号为n + 1的分组,这样就效率太低了✖

    对此,GBN协议的处理方式接收方可能会缓存分组n + 1,等到分组n收到并交付后,再将该分组交付到上层。然而,如果序号为n的分组丢失,那么它们就只能根据GBN的重传规则进行重传了。。

GBN协议中,发送方需要维护窗口的上下边界以及nextsequnum再该窗口的位置。

而接收方需要维护的唯一信息就是下一个按序接收的分组的序号,保存在expectedseqnum变量中

下面这张图给出了窗口长度为4个分组的GBN协议的运行情况(网上找的图):

SR和GBN的区别

可以发现:2号分组在发送的过程丢失了,在后面发送分组4和分组5的时候,接收方发现了序号没有按序,所有就丢掉了接收的报文。直到发送方重传2号分组后,才正常的接收了后面的分组。

对于GBN协议,虽然它解决了停等协议的信道利用率过低的问题,但是它还是存在一定的性能问题的。例如如下场景:

当窗口长度和带宽时延积都很大时,或者流水线中有很多分组时。单个分组的差错就可能会引起大量的GBN重传。


选择重传(SR)

为了解决GBN协议中出些单个分组的差错时就可能会引起大量的重传的情况。SR协议只会重传那些发送方认为在接收方出现差错的分组,避免了不必要的重传,极大的提升了效率。

除了上述的不同外,SR协议在收到失序分组时也于GBN不同:

  • SR接收方将确认一个正确接收的分组而不管其是否有序(GBN必须得有序),失序的分组将被缓存直到所有的丢失分组(即序号更小的分组)皆被收到为止,才可以将这一批分组按序交付给上层。

下面这张图显示了SR的操作:

SR和GBN的区别

由上图所示:分组2第一次发送时丢失,但是接受方接受了分组3、4、5,但是注意到此时接受方并没有交付数据给上层,直到发送方超时重传分组2后,接收方成功收到,才叫全部分组交付给上层。

了解完大致流程后,下面我们再来详细说说SR接受方和发送方的事件与动作:

SR发送方的事件与动作

  1. 从上层收到数据:与GBN相似,SR发送方首先会检查下一个用于该组的序号是否在滑动窗口内,如果在,直接打包。如果不在,要么缓存要么将数据返回给上层,过一段时间后再传输
  2. 超时:超时就会重传对于的分组。(这里主要因为是要单独传送分组,所以每个分组都拥有一个自己的逻辑定时器)
  3. 收到ACK:收到的ACK可能的位置有以下两种情况:
    1. 分组序号在窗口内,SR发送方将被确认的分组标记为已接收
    2. 分组序号等于send_base,则窗口基序号移动到最小序号的未确认分组处。如果移动过程中有序号落在了窗口内的未发送分组,则发送这些分组

SR接收方的事件与动作

  1. 序号在【rcv_base ,rcv_base + N - 1】内的分组被正确接收。说明落在接收窗口内,将会返回ACK,如果分组以前没有收到过,缓存该分组。如果序号等于接收窗口的基序号,那么会向上交付当前缓存的分组序号,然后接收窗口向前滑动。例如上图接收到分组2后,向上交付之前在缓存中的分组3、4、5
  2. 序号在【rcv_base - N,rcv_base - 1】内的分组被收到(表面这个分组已经被接收过了),那么会产生一个ACK返回。(具体原因是接收方和发送方的窗口并不总是一致的,如果不发送ACK给接收方,那么发送方的窗口可能会无法向前移动,这里很好理解我就步详细说明了)
  3. 其它情况,忽略分组

下面分别是GBN和SR协议丢失分组的情况的动图

主要观察以下两方面的区别:接收方接收到失序分组后如何处理的区别发送方超时重传的区别

  • 回退N步
    SR和GBN的区别

  • 选择重传

SR和GBN的区别

主要区别

  • GBN协议使用累积确认,其中发送方有缓冲区而接收方没有;发送方同时对封装的包进行计时。

  • SR协议的接收方对每个包都发送一个单独的ACK,发送方和接收方都有一个缓冲区,发送方为每个未封装的包维护一个计时器

1 接收缓冲区
  • 对于GBN协议,由于它丢弃了接收端窗口内所有无序的数据包,所以不需要有一个缓冲区来存储接收端窗口内的无序数据包。接收端窗口大小为1。
  • 对于SR协议,由于避免了重传许多不必要的数据包,所以接收端需要对无序的数据包进行缓冲,其中窗口大小为N。
2 实现的复杂性
  • GBN协议采用累积确认的方法。因为接收方是按顺序接收数据包的,所以任何错误到达的数据包都将被接收方丢弃。
  • SR协议避免了GBN协议以同时设置发送方窗口和接收方窗口大小相同为代价,重传到达接收方的正确数据包。所以基本上,SR协议比GBN更复杂,因为SR协议的接收者需要一个缓冲区来确认是否正确地接收了包,不管它是否有序。
3 网络效率

SR协议比GBN协议更有效。GBN协议,当窗口大小和带宽的乘积延迟很大,一个数据包在错误可能导致GBN重新发送大量的数据包,而在SR协议,许多正确的数据包的顺序在这个过程中不需要重传。

  • 用表格的形式来列举两种协议的区别:
协议 sender buffer 接受端buffer 数据分组计时 是否接收正确的乱序package 采用累积确认
GBN 同步计时
SR 独立计时

本文参考:《计算机网络 自顶向下方法》
GBR回退N步演示网站
SR选择重传演示网站
Go-back-N(GBN)协议&选择性重复(SR)协议的区别文章来源地址https://www.toymoban.com/news/detail-442943.html

到了这里,关于SR和GBN的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • raft 协议和 zab 协议区别

    采用 quorum 来确定整个系统的一致性,这个 quorum 一般实现是集群中半数以上的服务器。 zookeeper 里还提供了带权重的 quorum 实现。 都由 leader 来发起写操作。 都采用心跳检测存活性。 leader election 都采用先到先得的投票方式。 zab 用的是 epoch 和 count 的组合来唯一表示一个值, 而

    2024年02月04日
    浏览(48)
  • C++——Vector:push_back和emplace_back的区别,测试写入1GB大数据时的性能差距

    emplace_back是C++11引入的STL容器成员函数。emplace操作只执行构造而不执行拷贝构造。 如何理解上面这句话?先来看一个场景。 test类显式写出了三个构造函数,分别是无参构造、单参数构造、拷贝构造。因为C++中单参数的构造函数支持隐式类型转换,因此可以拿一个整型构造一

    2024年02月10日
    浏览(28)
  • TCP协议和UDP协议的区别

    目录 一、简介UDP和TCP来源 OSI七层结构 TCP/IP协议模型 二、TCP协议: 1、TCP的功能: 2、UDP的代码实现: 3、TCP协议的组成:         4、TCP的连接管理:TCP的三次握手(建立连接)和四次挥手(释放连接) TCP的三次握手: TCP三次握手的原因: TCP的三次握手状态的改变 5、重

    2024年02月02日
    浏览(31)
  • http 协议和 https 协议的区别么?

    HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本的协议,它是计算机之间传输数据的标准通信协议。 而HTTPS(Hypertext Transfer Protocol Secure)是基于HTTP协议的加密扩展协议。 以下是HTTP协议和HTTPS协议的区别: 1.安全性 HTTP协议传输的数据是明文的,容易被攻击者截获

    2024年02月12日
    浏览(49)
  • HTTPS协议和SOCKS5协议的区别

            HTTPS协议和SOCKS5协议是两种不同的网络协议,它们在传输数据的方式、安全性和使用场景等方面都有所不同。下面将介绍HTTPS协议与SOCKS5协议的区别。 传输数据的方式 HTTPS协议是一种基于HTTP协议的安全协议,它使用SSL/TLS协议对数据进行加密和解密。在传输数据时,客

    2024年02月09日
    浏览(35)
  • HTTP 协议和 TCP/IP 协议之间有什么区别?

    HTTP(超文本传输协议)和TCP/IP(传输控制协议/互联网协议)是两种在互联网通信中广泛使用的协议,它们之间的区别和联系对许多人来说可能还不是很清晰,今天我们就带大家来一起了解一下HTTP和TCP/IP协议这2者之间的主要区别和功能。 我们来看看HTTP协议。HTTP是一种应用层

    2024年01月20日
    浏览(40)
  • 7层网络协议和4层网络协议有什么区别和联系?

    层网络协议和4层网络协议是指网络通信模型中的不同层次。 网络协议是一种规则,用于控制网络设备之间的通信。通常,网络协议被划分为不同的层次,每一层负责处理特定的通信任务。 在网络协议层次模型中,有两种常见的模型:7层网络协议模型和4层网络协议模型。

    2023年04月09日
    浏览(33)
  • Vue2路由:手动配置使用路由&路由嵌套、路由动态传参(:参数,query、props)、编程式导航(back、go)、导航守卫

    过了一遍vue2的router,整理一下小结 目录 一、前端路由的概念与原理 1.1 什么是路由 1.2 路由的工作方式 二、vue-router的基本使用 2.1 安装、配置、使用router 2.2 redirect重定向 三、嵌套路由 3.1 声明子路由的规则 3.2 默认子路由 四、动态路由 4.1 动态路由的概念 4.2 动态路由取参方

    2024年02月05日
    浏览(33)
  • 网络设备中VRRP协议和Linux服务器中keepalived的两个区别

    VRRP全称是Virtual Router Redundancy Protocol,即虚拟路由冗余协议。它的主要目的是在一个网络中提供冗余的路由。当一个三层网络设备或服务器出现故障时,VRRP可以确保网络仍能正常工作。VRRP通过在这些设备之间使用IP组播或单播通信来实现冗余。它可以确保在网络中有多个物理

    2024年02月02日
    浏览(31)
  • 一文看懂可靠传输协议之GBN协议

    先看一下sw协议缺点: 再看GBN协议 接下来: 发送窗口: 注意发送窗口的大小为1时,就是sw协议 接受窗口的值为1

    2024年02月10日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包