📜  停止和等待、GoBackN 和选择性重复之间的区别(1)

📅  最后修改于: 2023-12-03 15:36:43.961000             🧑  作者: Mango

停止和等待、GoBackN 和选择性重复之间的区别

在计算机网络中,停止和等待、GoBackN 和选择性重复是三种流行的可靠传输协议,它们有各自的优缺点和适用场景。

停止和等待

Stop-and-wait

停止和等待协议是最简单的协议之一。每次发送一个数据包后,发送方会等待接收方的确认信号,才会发送下一个数据包。接收方在接收到数据包后,需要发送确认信号才能正确接收下一个数据包。这种交替进行的操作是间隔性的。

优点:
  • 实现简单;
  • 基于校验和并且有确认信号,能够做到可靠。
缺点:
  • 通信效率低,需要等待确认信号才能继续发送下一个数据包,浪费时间;
  • 需要维护一个发送缓存区和接收缓存区,增加了空间复杂度;
  • 可能导致死锁问题:发送方等待接收方确认信号时,若接收方因为某些原因无法发送信号,发送方就会一直等待,导致死锁。
Go-Back-N

Go-Back-N

Go-Back-N协议与停止和等待协议类似,但是它能够同时发送一定数量的数据包。发送方发送的每个数据包都有一个序号,并维护一个窗口,无需等待接收方的确认信号即可继续发送后续的数据包。接收方收到数据包时,会发送确认序列号,用来告诉发送方它已接收到数据包。如果发送方在规定时间内没有收到接收方的确认信号,则重新发送之前所有数据包,而接收方则必须将这些重复的数据包全部丢弃。

优点:
  • 发送方无需等待确认信号就能够继续发送数据包,提高了通信效率;
  • 窗口大小的灵活控制提高了数据传输的稳定性,通过合理设置窗口大小来控制流量;
  • 实现上比停止和等待协议稍微复杂,但仍较为简单。
缺点:
  • 无法支持乱序到达的数据包,如果接收方先收到了序号较大的数据包,而在此之前序号较小的数据包未到达,则接收方也无法处理序号较大的数据包,会造成资源的浪费;
  • 窗口大小的变化对于数据传输的影响很大,如果窗口大小不恰当,会影响网络性能。
选择性重复

Selective Repeat

选择性重复协议与Go-Back-N协议类似,但是在接收方,它可以处理无序接收到的数据包。发送方发送的每个数据包都有一个序号,并维护一个窗口,窗口内的数据包可以重复发送。接收方收到数据包后,如果数据包的序号是发送方期望的序号,则将数据包交付上层,如果不是,则将数据包保存在接收方的缓存区中。接收方在接收到重复的数据包时,只需要丢弃即可。在发送方,一旦超时,只需要重新发送丢失的数据包即可。

优点:
  • 可以支持乱序接收的数据包;
  • 发送方可以重发缺失的数据包,提高了可靠性;
  • 实现上比Go-Back-N协议稍微复杂。
缺点:
  • 处理复杂问题导致了可靠性降低;
  • 发送方维护了一个发送窗口和接收方维护的缓存区,耗费了更多的内存。
总结
  • 停止和等待协议实现简单,可靠,但效率低下;
  • Go-Back-N协议可以提高通信效率,控制网络流量,但无法处理乱序的数据包;
  • 选择性重复协议可以处理乱序接收的数据包,可靠性略低,实现和维护要比前两个协议复杂。