停止-等待、回退N和选择性重传的区别2024 年 8 月 28 日 | 阅读 10 分钟 网络中的流量控制在网络中,处理不同节点(例如计算机、打印机和无线设备)之间的数据流被称为网络流量控制。它是有效传输网络数据的关键机制。数据流是节点间传输数据时的重要问题。当接收节点无法处理数据时就会发生这种情况。传输的数据量超过了接收节点可以处理的量。这会导致数据丢失和数据帧的重新传输。 为了防止数据丢失并有效传输网络数据,流量控制会告知发送节点应该向接收节点重传多少数据。发送数据的节点在向网络发送更多数据帧之前,应等待接收节点的确认。 决定发送确认和重传数据所用机制的流量控制协议有:停止与等待、回退N帧和选择重传。 停止与等待协议- 这是最简单的协议,可确保网络中数据的可靠传输。
- 这里的停止与等待指的是协议执行的两个步骤。发送节点将数据传输到网络中。数据帧按顺序一个一个地发送。一旦数据帧在网络中传输。发送节点等待接收节点在网络中发送确认。
- 当网络中的数据链路层提供流量控制服务时,将停止与等待协议作为流量控制机制来实现。该数据链路协议使发送方能够通过无噪声信道传输数据。
- 此协议支持网络中的单向数据传输。这意味着网络中只有一个发送方或接收方。两个节点不能同时发送或接收网络中的数据。节点不能充分利用网络资源。该协议确保网络中的数据流得以维持,但它缺乏任何网络错误控制机制。
- 实现该协议的主要思想是,每当发送节点在网络中传输数据帧时,它都会等待接收方的确认。只有收到确认后,它才向网络中的另一个节点传输。如果收到确认,传输将停止。
- 使用此帧的想法是,当发送方发送帧时,它会在发送下一个帧之前等待确认。
- 在讨论回退N帧和选择重传协议之前,用户必须具备另一个重要协议的先验知识:滑动窗口协议。
滑动窗口协议滑动窗口协议是一种允许数据传输节点在网络中同时传输多个数据帧的机制。该协议管理在需要可靠且保证数据帧交付的两个节点之间共享的数据包。该协议在 TCP(传输控制协议)中实现。 在此协议中,每个数据帧都被分配一个序列号。实现此协议是为了确保已成功传输的数据不会被发送节点再次传输。这很有用,因为它提高了网络效率并避免了重复数据。序列号对于每个数据帧都是唯一的,并用于确认接收节点是否成功接收了数据帧。 网络中可以实现两种类型的滑动窗口协议 回退N自动重传请求- 在回退 N 帧 ARQ 中,N 代表发送节点窗口大小,ARQ 代表自动重传请求。让我们以一个例子来说明这个协议,其中发送方窗口大小为 3。这意味着发送节点可以在等待接收节点确认之前传输三个数据帧。
- 节点使用协议流水线(pipelining),该协议允许节点在不等待第一个帧的确认的情况下同时在网络中传输多个数据帧。假设发送方需要在网络中发送 5 个数据帧。如果实现了回退 3 帧协议,用户就可以在不等待帧 1 的确认的情况下同时发送帧 1、帧 2 和帧 3。
- 由于在此协议中传输了多个数据帧,因此发送的每个数据帧都按顺序编号。执行此步骤是为了确保每个数据帧都可以区分。这些数字称为序列号。
- 可以同时发送的帧数可能因发送节点而异。发送方窗口大小决定了这一点。我们可以说,在发送节点收到发送到接收方的第一个帧的确认之前,可以同时在网络中发送 N 个数据帧。
- 如果发送方在约定的时间内未收到接收节点的确认,则发送方将重传当前窗口中已传输并存储的所有数据帧。假设发送方已传输帧 1、帧 2 和帧 3,但未收到帧 1 的确认;则所有三个帧都将被重传。
选择重传 ARQ- 选择重传 ARQ 也称为选择重传自动重传请求。此协议在 OSI 模型的数据链路层实现。此协议使用滑动窗口方法在网络中传输数据帧。
- 如果数据帧传输中的错误很少,那么用户可以实现回退 N 帧 ARQ,但如果错误很多,那么实现选择重传 ARQ 是最佳选择。它在有限带宽下效果很好。
- 发送方和接收方节点上的窗口大小保持相等。这是通过使发送方节点的窗口大小等于接收方节点窗口来实现的。滑动窗口始终大于 1。
- 假设在网络中传输了一个损坏的帧。当这个损坏的数据帧到达接收节点时,接收节点不会直接拒绝它;相反,接收节点会向发送方发送否定确认(NAK)。收到否定确认后,发送方会立即重新发送数据帧。不会有任何超时等待来传输该数据帧。
停止与等待协议和滑动窗口协议的区别这两种协议都作为流量控制机制,并且可以在网络中实现,以确保数据从发送节点成功传输到接收节点,因为回退 N 帧和选择重传协议都是滑动窗口协议。 让我们讨论停止与等待协议和滑动窗口协议之间的区别。 比较基础 | 停止与等待协议 | 滑动窗口协议 |
---|
行为 | 请求与响应 | 同时传输 | 同时传输的数据帧数量 | 节点无法充分利用网络功能,因为一次只能传输一帧数据。 | 可以同时传输多个帧。 | 效率 | 与滑动窗口协议相比,效率较低。 | 回退 N 帧和选择重传协议都比停止与等待协议更有效。选择重传协议效率最高。 | 确认 | 发送节点在网络中传输每个数据帧后,等待接收节点的确认。 | 两种协议都可以在等待确认之前在网络中传输多个数据帧。它们维护一个确认窗口来确定在收到确认之前可以等待的帧。 | 传输类型 | 它使用半双工通信;也就是说,一次只能有一个发送方和一个接收方。两个节点不能同时传输和接收数据。 | 它使用全双工通信传输。这允许网络中的双向传输。两个节点可以同时传输和接收数据节点。 | 传播延迟 | 停止与等待协议的传播延迟较长。 | 与滑动窗口协议相比,传播延迟较短。 | 链路利用率 | 链路利用率较低。 | 链路利用率较高。 |
回退 N 帧和选择重传的区别两种滑动窗口协议在功能和工作方式上也有所不同。回退 N 帧和选择重传协议之间的区别如下: 比较基础 | 回退 N 帧 | 选择重传 |
---|
基本功能 | 重新传输发送后被怀疑损坏或丢失的帧之后的所有帧。 | 仅重新传输那些被怀疑丢失或损坏的帧。 | 带宽利用率 | 如果传输错误的可能性很高,或者传输了很多损坏的帧,那么该协议会浪费大量带宽。 | 由于网络中只重新传输错误或损坏的数据帧。它节省了网络带宽,并且比回退 N 帧协议更有效。 | 复杂度 | 与选择重传相比,该协议的实现更简单。由于其逻辑实现较少,因此复杂度较低。 | 它比回退 N 帧协议更复杂,因为在发送方和接收方节点上都应用了额外的逻辑和排序算法。此外,它还需要额外的存储空间才能高效运行。 | 窗口大小 | N-1 | <= (N+1)/2 | 排序 | 在传输的任何一端都不执行数据帧的排序。 | 数据帧的排序在接收端完成。为了确保正确请求的帧,必须维护数据帧的正确顺序。 | 存储 | 接收方在损坏的帧被重传之前,不会存储损坏的帧之后收到的帧。 | 接收方将损坏的帧之后收到的帧存储在缓冲区中,直到损坏的帧被替换。 | 搜索 | 它不执行搜索,因为如果发送方未收到当前窗口中某个帧的确认,则表示该窗口中的所有节点都已发送。传输的任何一端都不执行搜索。 | 发送方需要执行搜索操作,因为在网络中只重新传输请求的节点。 | ACK 号 | NAK 号表示网络中下一个数据帧的预期帧号。 | NAK 号表示传输过程中丢失的数据帧编号。 | 用途 | 由于其复杂度较低且存储需求较少,因此使用更广泛。 | 其实现较少。它用于带宽有限且效率重要的场合。 |
停止与等待、回退 N 帧和选择重传之间的区别下表区分了所有三种流量控制协议:停止与等待、回退 N 帧和选择重传协议。 比较基础 | 停止与等待协议 | 回退 N 帧协议 | 选择重传协议 |
---|
发送方窗口大小 | 发送方窗口大小为 1。这意味着发送方一次只能传输 1 个数据帧。 | 在回退 N 帧协议中,发送节点窗口大小为 N。 | 发送节点窗口大小大于 1。对于选择重传协议,它也为 N。 | 接收方窗口大小 | 在停止与等待协议中,接收方窗口的大小也为 1。 | 接收方窗口大小为 1。 | 为了实现选择重传,发送方和接收方窗口的大小相等。因此,在此协议中为 N。 | 最小序列号 | 由于一次只传输一个数据帧。可能的最小序列号是 2。 | 回退 N 帧协议可能的最小序列号是 N+1。此处 N 是发送方传输的数据帧数。 | 选择重传协议可能的最小序列号是 2N。此处 N 是发送方传输的数据帧数。 | 协议效率 | 它是效率最低的协议。计算效率的公式为 1/(1+2*a),其中 a 代表传播延迟与传输延迟的比率。 | 计算效率的公式为 N/(1+2*a),其中 a 代表传播延迟与传输延迟的比率,N 代表网络中传输的数据包。 | 计算效率的公式为 N/(1+2*a),其中 a 代表传播延迟与传输延迟的比率,N 代表网络中传输的数据包。 | 确认类型 | 接收节点单独确认每个成功传输的数据帧。 | 它向发送节点发送数据帧的累积确认。 | 在选择重传中,每个帧的确认是独立的。 | 支持的顺序 | 在停止与等待协议的接收节点上,不需要特定的顺序。 | 在此协议中,它只接受接收节点上的按顺序交付。 | 在选择重传 ARQ 中,接收节点仅接受网络中的乱序交付。 | 重传 | 由于发送方等待每个数据帧得到确认。因此,如果一个数据包被丢弃,它会立即被重传。因此,传输次数为 1。 | 如果发送节点未收到数据帧的确认,则它会重新传输当前窗口中的所有数据帧。因此,重传次数为 N。 | 在选择重传协议中,仅重新传输错误的数据帧。因此,重传次数为 1。 |
结论回退 N 帧和选择重传都使用滑动窗口协议,该协议使发送节点能够在网络中同时传输多个数据帧。发送节点不需要等待接收节点的确认就可以发送多个数据帧。 停止与等待协议与滑动窗口协议不同,因为该协议无法在网络中同时传输多个数据帧。它只允许发送方节点一次发送一个数据帧。发送方在网络中传输每个数据帧后等待确认。如果在给定时间内未收到数据帧,则会重新传输该帧。
|