📜  停止等待协议,它的问题和解决方案

📅  最后修改于: 2021-09-28 10:14:35             🧑  作者: Mango

它是最简单的流量控制方法,发送方将发送数据包,然后等待接收方确认已收到数据包,然后发送下一个数据包。

停止等待协议很容易实现。

发送所需的总时间是,

Ttotal = Tt(data) + Tp + Tq + Tprocess + Tt(ack) + Tp     

( since, Tq and Tprocess = 0)

Ttotal = Tt(data) + 2Tp + Tt(ack)
Ttotal = Tt(data) + 2Tp   

(when Tt(ack) is negligible) 
Efficiency 
= useful time / total cycle time 
= Tt / (Tt+2Tp)
= 1 / (1+2a)    [a = Tp/Tt] 

注意:停止和等待距离越短越好。因此它是一个很好的局域网协议。停止并等待有利于更大的数据包。

如果中间的数据包丢失怎么办?

  1. 根据发送方的说法,接收方很忙,但实际上数据丢失了。
  2. 接收方会假设,发送方没有发送数据包。
  3. 两者都会互相等待,然后就会陷入僵局。

需要超时定时器:
应用计时器,接收器将等待数据的超时计时器,然后确认数据已丢失。

如果数据包丢失了怎么办?
超时定时器到期后,发送方将假设数据丢失但实际上确认丢失。假设它会再次发送数据包,但根据接收器,它是一个新的数据包,因此会产生重复数据包问题。

为消除重复包问题,将序列号添加到数据包中。因此使用数据包编号可以轻松确定重复数据包。

如果接收确认有延迟怎么办?

根据发送方,数据包 1 的确认被延迟,数据包 2 已丢失。但接收方假设收到的确认是数据包 2。这个问题称为丢失数据包问题。
如果确认也有数字,则可以解决丢包问题。