TCP定时器 之 保活定时器】的更多相关文章

一.坚持定时器   1.坚持定时器的由来         TCP通过让接收方指明希望从发送方接受的窗口大小来进行流量控制.设置窗口大小为0可以组织发送方传送数据,直至窗口变为非0为止.         如果接收方向发送方通告了一个为0的接口,然后又向发送方通告了窗口更新,恰好这个确认丢失了,那么接收方等待接收数据,发送方等待允许他继续发送数据的窗口更新,就会形成死锁.为了防止这种死锁,发送方使用一个坚持定时器来周期性地向接收方查询,以便发现窗口是否增大.这些从发送方发出的报文段称为窗口探查.  …
主要内容:保活定时器的实现,TCP_USER_TIMEOUT选项的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 原理 HTTP有Keepalive功能,TCP也有Keepalive功能,虽然都叫Keepalive,但是它们的目的却是不一样的. 为了说明这一点,先来看下长连接和短连接的定义. 连接的"长短"是什么? 短连接:建立一条连接,传输一个请求,马上关闭连接. 长连接:建立一条连接,传输一个请求,过会儿,又传输若干个请求,最后…
在用户进程启用了保活定时器的情况下,如果连接超过空闲时间没有数据交互,则保活定时器超时,向对端发送保活探测包,若(1)收到回复则说明对端工作正常,重置定时器等下下次达到空闲时间:(2) 收到其他回复,则确定对端已重启,关闭连接:(3) 超过探测次数仍未得到回复,则认为对端主机已经崩溃,关闭连接: 启动定时器: 用户进程可以通过socket的SO_KEEPALIVE选项来开启或关闭保活定时器探测,TCP最终会调用tcp_set_keepalive来实现保活定期的开启与关闭: int sock_se…
本章介绍保活定时器. 在 TCP 的三握四挥 章节中,我们介绍了 处在 TIME_WAIT 的 2MSL定时器:在 TCP的超时与重传 章节中,我们介绍了 重传定时器:在上一章节中,我们介绍了 防止死锁现象的 坚持定时器. 那么在本章节,我们将介绍 争议颇多的 保活定时器. 保活定时器 一个比较让人惊讶的事实是:可以没有任何数据通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,那么在两个TCP模块之间不交换任何信息. 两个应用进程 -客户进程 和 服务器进程 都没有使用应用级的…
上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用于当希望收到另一端的确认. 该定时器是用来决定超时和重传的. 由于网络环境的易变性,该定时器时间长度肯定不是固定值:该定时器时间长度的设置依据是RTT(Round Trip Time),根据网络环境的变化,TCP会根据这些变化并相应地改变超时时间. 坚持定时器(persist)使窗口大小信息保持不断…
前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间的确定,这里涉及到一大堆的算法,书上有说,我这里不细谈了).每发送一个报文段就会启动重传定时器,假设在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位,又一次计算:假设在规定时间内收到了对该报文段的确认,则撤销该报文段的重传定时器. 坚持定时器 上篇文章中已经提到了,主要是…
TCP一共有四个主要的定时器,前面已经讲到了一个--超时定时器--是TCP里面最复杂的一个,另外的三个是: 坚持定时器 保活定时器 2MSL定时器 其中坚持定时器用于防止通告窗口为0以后双方互相等待死锁的情况:而保活定时器则用于处理半开放连接 1.坚持定时器 坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询.…
可能有这样的备用现实TCP连接:流通过. 也就是说.假设TCP连接的两方都没有向对方发送数据.则在两个TCP模块之间不交换不论什么信息,这意味着我们能够启动一个客户与server建立连接,然后长时间不使用,而连接依旧保持.中间的路由器能够崩溃和重新启动,电话线能够被挂断再连接,但仅仅要两端的主机没有被重新启动.则连接依旧保持建立. 然而,很多时候一个server希望知道客户主机是否崩溃并关机或者崩溃又又一次启动.很多实现提供的保活定时器能够提供这样的能力.保活并非TCP规范中的一部分. 保活定时…
引言 可以没有任何数据流过一个空闲的 TCP 连接. 这意味着我们可以启动一个客户与服务器建 立一个连接,然后离去数小时.数天.数个星期或者数月,而连接依然保持.中间路由器可以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保持建立. 然而,很多时候一个服务器希望知道客户主机是否崩溃并关机或崩溃又重新启动.许多实现提供的保活定时器可以提供这种能力.然而保活并不是 TCP 规的一部分. Host Requirements RFC提供了3个不使用保活定 时器的理由: 在出…
http://blog.csdn.net/zhangskd/article/details/44177475 TCP的Keepalive,目的在于看看对方有没有发生异常,如果有异常就及时关闭连接. 当传输双方不主动关闭连接时,就算双方没有交换任何数据,连接也是一直有效的. 如果这个时候对端.中间网络出现异常而导致连接不可用,本端如何得知这一信息呢? 答案就是保活定时器.它每隔一段时间会超时,超时后会检查连接是否空闲太久了,如果空闲的时间超过 了设置时间,就会发送探测报文.然后通过对端是否响应.响…