TCP的坚持定时器
1.基本概念
TCP的接收方指名希望从发送方接收的数据字节(窗口大小)来进行流量控制,如果窗口大小为0,那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗口大小的ACK为止,那么如果接收方发送的这个ACK中途丢失了呢(这种可能性是有的)?此时发送方收不到信息,就默认窗口大小还为0,那它就继续阻塞在那,这样就造成了死锁。那么如何解决此类问题呢,解决方案就是我此片博文的题目,TCP的坚持定时器。为了防止上述死锁的发生,TCP的发送方使用了一个坚持定时器,来周期性的向接收方查询,以便发现窗口是否已增大
2.糊涂窗口综合症
如果大家以前了解过TCP的话,那么相信大家也听说过糊涂窗口综合症吧。它的大致意思是这样的,就是当接收方窗口大小变为0时,发送方就会阻塞,上文中有提到,当接收方窗口大小刚空出来一个很小的空间然后就去通知发送方,发送方同样也会发一个很小的数据,然后导致接收方窗口变为0,等接收方稍微在腾出来点空间。。。。如此往复,每次发送方和接收方都只能弄到很少的数据,严重降低了传输效率,这就是所谓的糊涂窗口综合症
我们可以使用如下方法来解决此类问题
(1)接收方不通告小窗口。除非窗口比MSS大或者比接收方缓存的一般空间小才通告发送方
(2)发送方避免糊涂窗口的措施是只有以下条件才发送数据
.可以发送一个满长度的报文段
.可以发送至少是接收方缓存区一半的报文段(主要针对小缓存区的主机)
.能够发送手头所有数据,并不希望收到ACK(此算法可能禁止了Nagle算法)
TCP的保活定时器
当TCP的俩端建立连接后,而不发送任何数据,那么只要这俩个主机不崩,无论经过多长时间,中间路由是否坏掉,电话线是否断掉,此连接会依然存在
这种现象表明俩个应用都没有自己去检测非活动状态的定时器
保活功能定时器
当TCP连接的俩端临时出现故障时,保活功能就会产生一个很好的连接终止效果
保活功能主要是为服务器程序提供的,服务器需要知道客户机是否已经崩溃