tcp的拥塞控制为什么需要,因为如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。
为了避免这个现象我们引入了一个滑动窗口,每当接收方的与发送方发送数据的时候我们就告诉发送方剩余缓存中空间的大小,以便于发送方的发送控制,但这个有时候出现一种死锁的问题,接收方的窗口为0,通知发送方没有空余的缓存,然后一段时间后又开始出现了多余的缓存,接收方通知发送方,但是通知的这个消息丢失了,发送方一直未等待到接收方的需要发送的通知就一直等待下去,而接受方误以为发送方接收到了通知就会等待发送方发送数据,但是发送方实际没有接收到数据就不会发送,接收方就一直等待下去,出现了死锁现象。
如何来解决这个死锁现象,引入一个持续计数器,当某一方收到对方的0窗口通知,就会启动持续计时器,若时间到期了,就会发送一个0窗口探测报文段(包含有1字节的数据),对面会在确认这个探测报文段的时候给出现在的窗口值,如果窗口依然是0,那么收到这个报文段的一方就会重新设置持续计时器。如果不是0,那么就可以开始传输数据了。