一、坚持定时器解决的问题
只是一个窗口探查的工具
当窗口显示为0的时候启用
发送端不断往接收端发送数据,但是是快的发送和慢的接收文,导致接收方接收窗口很快就满了,发送方收到接收方通告窗口大小为0(第8个报文)。随着接收方应用程序不断地提取数据,接收方的接收窗口增大,可以再接收报文了。于是接收方向发送方发送了第9个报文,告诉发送方我的接收窗口为4096,现在又可以接收数据了。
在TCP协议中,只会对数据包进行超时重传,但对ACK包并没有任何保证。所以接收方发送的第9个报文,可能会丢包,导致发送方一直收不到该报文。这样的话,就导致了双方互相等待(你等我,我等你):发送方一直以为接收方的通告窗口为0(因为其最后收到的接收方的通告窗口大小为0);而接收方由于回复了窗口大小不为0了,但仍未收到数据,就认为发送端没有数据需要发送了。
如何解决这个问题呢?
这就需要坚持定时器,发送端在接收到接收端通告窗口大小为0的报文后,会启动一个定时器,即坚持定时器,在一定时间内未收到接收端通告窗口大小的报文,发送方将主动发送一个查询报文,向接收端查询通告窗口大小,接收端收到该报文后,回复窗口大小的报文(如第9个报文)。