TCP保活定时器

TCP有Keepalive功能,它和HTTP的Keepalive功能目的不一样。TCP服务器希望知道客户端是否崩溃、重新启动或者中间路由不通。保活定时器就提供这种功能。

在进一步介绍TCP的保活定时器前,先了解一个概念:长连接和短连接。(TCP是长连接)

长连接:建立一个连接,多个请求复用这个连接,最后再关闭连接。

短连接:建立一个连接,传输一个请求,然后关闭连接。

当服务器发送探测报文时,客户端可能处于4种不同的情况:仍然正常运行、已经崩溃、已经崩溃并重启了、

由于中间链路问题不可达。在不同的情况下,服务器会得到不一样的反馈。

(1) 客户主机依然正常运行,并且从服务器端可达

客户端的TCP响应正常,从而服务器端知道对方是正常的。保活定时器会在两小时(7200s)以后继续触发。

(2) 客户主机已经崩溃,并且关闭或者正在重新启动

客户端的TCP没有响应,服务器没有收到对探测包的响应,此后每隔75s发送探测报文,一共发送9次。

socket函数会返回-1,errno设置为ETIMEDOUT,表示连接超时。

(3) 客户主机已经崩溃,并且重新启动了

客户端的TCP发送RST,服务器端收到后关闭此连接。

socket函数会返回-1,errno设置为ECONNRESET,表示连接被对端复位了。

(4) 客户主机依然正常运行,但是从服务器不可达

双方的反应和第二种是一样的,因为服务器不能区分对端异常与中间链路异常。

socket函数会返回-1,errno设置为EHOSTUNREACH,表示对端不可达。

时间: 2024-11-05 20:36:55

TCP保活定时器的相关文章

TCP 的保活定时器

引言 可以没有任何数据流过一个空闲的 TCP 连接. 这意味着我们可以启动一个客户与服务器建 立一个连接,然后离去数小时.数天.数个星期或者数月,而连接依然保持.中间路由器可以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保持建立. 然而,很多时候一个服务器希望知道客户主机是否崩溃并关机或崩溃又重新启动.许多实现提供的保活定时器可以提供这种能力.然而保活并不是 TCP 规的一部分. Host Requirements RFC提供了3个不使用保活定 时器的理由: 在出

TCP/IP具体解释学习笔记--TCP的坚持和保活定时器

TCP的坚持定时器 1.基本概念 TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0.那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那么假设接收方发送的这个ACK中途丢失了呢(这样的可能性是有的)?此时发送方收不到信息,就默认窗体大小还为0,那它就继续堵塞在那,这样就造成了死锁. 那么怎样解决此类问题呢,解决方式就是我此片博文的题目.TCP的坚持定时器.为了防止上述死锁的发生.TCP的发送方使用了一个坚持定时器.来周期性的向接收方

TCP/IP详解学习笔记--TCP的坚持和保活定时器

TCP的坚持定时器 1.基本概念 TCP的接收方指名希望从发送方接收的数据字节(窗口大小)来进行流量控制,如果窗口大小为0,那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗口大小的ACK为止,那么如果接收方发送的这个ACK中途丢失了呢(这种可能性是有的)?此时发送方收不到信息,就默认窗口大小还为0,那它就继续阻塞在那,这样就造成了死锁.那么如何解决此类问题呢,解决方案就是我此片博文的题目,TCP的坚持定时器.为了防止上述死锁的发生,TCP的发送方使用了一个坚持定时器,来周期性的向接收方查询

《TCP/IP详细解释》札记(23章)-TCP该保活定时器

可能有这样的备用现实TCP连接:流通过. 也就是说.假设TCP连接的两方都没有向对方发送数据.则在两个TCP模块之间不交换不论什么信息,这意味着我们能够启动一个客户与server建立连接,然后长时间不使用,而连接依旧保持.中间的路由器能够崩溃和重新启动,电话线能够被挂断再连接,但仅仅要两端的主机没有被重新启动.则连接依旧保持建立. 然而,很多时候一个server希望知道客户主机是否崩溃并关机或者崩溃又又一次启动.很多实现提供的保活定时器能够提供这样的能力.保活并非TCP规范中的一部分. 保活定时

《TCP/IP详解》读书笔记(23章)-TCP的保活定时器

可能存在这么一种空闲TCP连接:没有任何数据流通过.也就是说,如果TCP连接的双方都没有向对方发送数据,则在两个TCP模块之间不交换任何信息,这意味着我们可以启动一个客户与服务器建立连接,然后长时间不使用,而连接依然保持.中间的路由器可以崩溃和重启,电话线可以被挂断再连接,但只要两端的主机没有被重启,则连接依然保持建立. 然而,许多时候一个服务器希望知道客户主机是否崩溃并关机或者崩溃又重新启动,许多实现提供的保活定时器可以提供这种能力.保活并不是TCP规范中的一部分. 保活定时器工作原理: 如果

TCP的定时器系列 — 零窗口探测定时器

主要内容:零窗口探测定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 出现以下情况时,TCP接收方的接收缓冲区将被塞满数据: 发送方的发送速度大于接收方的接收速度. 接收方的应用程序未能及时从接收缓冲区中读取数据. 当接收方的接收缓冲区满了以后,会把响应报文中的通告窗口字段置为0,从而阻止发送方的继续发送, 这就是TCP的流控制.当接收方的应用程序读取了接收缓冲区中的数据以后,接收方会发送一个ACK,通过 通告窗口字段告诉发送方自己又可

TCP 保活功能 KEEPALIVE

转载:http://www.vants.org/?post=162 TCP保活(TCP keepalive) 作者:易隐者 发布于:2012-10-15 11:30 Monday 分类:网络分析 TCP保活的缘起 双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据交互的时间段内,交互双方都有可能出现掉电.死机.异常重启等各种意外,当这些意外发生之后,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一

【转载】TCP保活(TCP keepalive)

下图是我遇到tcp keepalive的例子: 以下为转载: TCP保活的缘起 双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据交互的时间段内,交互双方都有可能出现掉电.死机.异常重启等各种意外,当这些意外发生之后,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,为了解决这个问题,在传输层可以利用TCP的保活报文来

TCP的定时器

TCP为每条连接建立七个定时器,依次为:连接建立定时器.重传定时器.延时ACK定时器.持续定时器.保活定时器.FIN_WAIT_2定时器和TIME_WAIT定时器.实际上,为了提高效率,内核中只使用了四个定时器来完成七个定时器的功能. TCP定时器的实现涉及以下文件: net/ipv4/tcp_timer.c TCP的定时器 net/ipv4/inet_connection_sock.c 基于连接的传输控制块实现 net/ipv4/tcp_output.c TCP的输出 net/ipv4/tcp