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