- Go-Back-N Protocol
- 正常情况
- 发送存在丢包
在GBN (回退N重传协议) 协议下,发送方可以同时发送多个报文段,这些报文段都有一个特定的序号,接收方必须按照序号顺序接收这些报文。如果发送方发送了一批报文,但是其中有部分报文在传输过程中丢失,那么接收方将只会收到一些连续而又正确的数据包,而接收不到中间失踪的数据包。当发送超时时,发送方就会重发所有未确认数据包(即还没有收到对应的 ACK 确认报文),而这也就意味着发送方可能会重新发送之前已经发送过的数据包,即使它们已经被确认了。因此,GBN协议存在着浪费带宽的风险,并且丢包率高时会导致发送方的性能下降。
- 丢失一个ACK
在GBN (回退N重传协议) 协议下,接收方需要发送一个 ACK (确认) 消息来确认正确接收到的数据包。如果接收方在某个时间点丢失了一个 ACK 消息,那么发送方将不会收到应有的 ACK 消息,并且发送方也不会得知已经丢失了一个 ACK。随着时间的推移,发送方会认为该数据包未被有效接收,因此会将该数据包及其之后的所有未确认数据包重发。这样就可能导致网络拥塞和资源浪费,同时降低传输效率。
为了避免这种情况发生,接收方可以定时发送 SACK (选择性确认) 消息,用来告知发送方哪些数据包已经成功接收。当发送方收到 SACK 后,就会只重发未收到确认的数据包,而不是全部数据包,从而提高网络吞吐量。除此之外,还可以通过调整超时时间的大小、优化网络性能等方法来进一步提高数据传输的效率。
- Selective Repeat Protocol
- 正常情况
- 发送存在丢包
在选择重传协议下,当发送方在传输过程中发生数据包丢失时,接收方会通过发送请求缺失的数据包的消息来通知发送方重新发送。发送方只需要重新发送丢失的数据包即可,由于不需要重传所有数据包,因此选择重传协议比回退 N 帧协议的性能和效率更高。
- 丢失一个ACK
在选择重传协议下,如果接收方丢失一个ACK确认消息,发送方会在超时计时器到期后重新发送对应的数据包。如果多个ACK确认消息丢失,发送方可能会进行多次重传,这会使网络拥塞和性能下降。