本章介绍保活定时器。
在 TCP 的三握四挥 章节中,我们介绍了 处在 TIME_WAIT 的 2MSL定时器;在 TCP的超时与重传 章节中,我们介绍了 重传定时器;在上一章节中,我们介绍了 防止死锁现象的 坚持定时器。
那么在本章节,我们将介绍 争议颇多的 保活定时器。

保活定时器

一个比较让人惊讶的事实是:可以没有任何数据通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,那么在两个TCP模块之间不交换任何信息。
两个应用进程 -客户进程 和 服务器进程 都没有使用应用级的定时器来检测 非活动状态:这种非活动状态 可以导致应用程序中的任何一个 终止其活动。

许多时候,一个服务器希望知道客户主机是否 崩溃并关机,或者 崩溃又重新启动。许多实现提供的保活定时器可以提供这个能力。

但是,保活定时器并不是TCP规范中的一部分,它有如下三个缺点:

  • (1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
  • (2)它们耗费不必要的带宽。
  • (3)在按分组计费的情况下,会在互联网花掉更多的钱。

在连接两个端系统的网络出现临时故障的时候,保活选项会引起一个实际上很好的连接终止。比如,一个中间路由器崩溃并重新启动时,发送保活探查,那么TCP会认为客户的主机已经崩溃,但是实际上并不是这样。
保活功能主要是为应用程序提供的。服务器应用程序可能会代表客户绑定一些资源,因此希望知道客户主机什么时候关闭或者已经崩溃。

在之前的章节里面,我们介绍了 半开放连接 会引起复位,但是那是来自正在发送数据的客户端,如果客户消失了,服务器会永远等待客户的数据:保活定时器 就是试图在服务器端检测到这种半开放的连接。

具体描述

保活选项的一端 为服务器端,另外一端为客户端。一般都是服务器设置这个功能。

如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个 探查报文段,客户主机必须处于以下4个阶段之一:
(1)客户主机依然正常运行,并从服务器可达。TCP响应正常,服务器就将保活定时器复位。如果进行了交换数据,那么就在交换数据结束之后进行复位。
(2)客户主机崩溃,并且关闭 或者 正在重新启动。客户的TCP没有响应,服务器收不到对该探查的响应,在 75s 之后超时,总共发送 10个探查,每个间隔75s,如果没有收到任何一个响应,它就认为客户主机已经关闭 并且 终止这个连接。
(3)客户主机已经崩溃,并已经重新启动。服务器收到探查,但是是一个复位,使得服务器终止这个连接。
(4)客户主机正常运行,但是从服务器不可达。这与状态2相同,因为TCP不能识别状态4和状态2的区别,它所能发现的就是 没有收到探查。

在第一种情况下,服务器的进程没有感觉到保活探查的发生,TCP负责一切,这个过程对所有的应用程序都是透明的。在后面三种情况下,服务器将收到来自TCP的差错报告:比如 连接超时,连接被对方复位等等。

小结:保活定时器的优点与缺点

优点:
(1)激活应用程序中的保活选项 通常比 编写应用程序探查报文 更简单。
(2)通过探查可以使服务器知道客户主机是否崩溃又重新启动。
(3)探查报文 比 应用程序探查报文 耗费更少的带宽。

缺点:
(1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
(2)它们耗费不必要的带宽。
(3)在按分组计费的情况下,会在互联网花掉更多的钱。

2016/8/20

【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器的更多相关文章

  1. TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)

    本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...

  2. TCP/IP详解 卷1 第二十一章 TCP的超时与重传

    21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...

  3. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  4. TCP/IP详解 卷一(第二章 链路层)

    在TCP/IP协议族中,链路层主要有三个目的: 1.为IP模块发送和接收IP数据报 2.为ARP模块发送ARP请求和接收ARP应答 3.为RARP请求和接收RARP应答 TCP/IP支持多种不同的链路 ...

  5. TCP/IP详解 卷一(第三章 IP:网际协议)

    IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...

  6. TCP/IP详解 卷1 第十七章 TCP:传输控制协议

    17.2 TCP的服务 TCP提供了一种面向连接的.可靠的字节流服务.两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接. TCP通过下列方式来提供可靠性: 1)  应用数据被分割成TCP ...

  7. TCP/IP详解 卷一(第二十章 TCP的成块数据流)

    本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...

  8. TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

    UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

  9. TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)

    ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...

  10. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...

随机推荐

  1. 解决FileInputStream读取文本时 最后端会多出字符问题

    使用 read(byte[]) 方法读取文本的时候,要用 String str = new String(byte[],int offset,int len) 来将数组中的元素转换为String字符串 ...

  2. PHPExcel使用-使用PHPExcel导出文件

    导出步骤: 1. 新建一个excel表格 ------------> 实例化PHPExcel类 2. 创建sheet(内置表)-------------> ( 1>. createS ...

  3. echarts2简单笔记

    1.代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. zw版【转发·台湾nvp系列Delphi例程】HALCON Roberts1

    zw版[转发·台湾nvp系列Delphi例程]HALCON Roberts1 procedure TForm1.Button1Click(Sender: TObject);var img, img1: ...

  5. 【转】eclipse反编译插件

    原文地址:http://bbs.csdn.net/topics/390263414 离线安装包下载地址一:http://feeling.sourceforge.net/downloads/org.sf ...

  6. 定位性能问题的18个linux命令

    1.TopTop命令是一个性能监控程序,它按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果.这条命令显示了CPU的使用率.内存使用率.交换内存使用大小.高速缓存使用大小. ...

  7. 生成word附件和word域动态赋值

    生成word文档和word域动态赋值,很多时候需要生成这样的word文档供下载和打印,先制作一个包含了域的 word的模板附件,放在服务器端或者字节流存入数据库,以供需要的时候代码可以获取到,如: 其 ...

  8. linux基础命令---tmpwatch

    tmpwatch 删除最近一段时间没有访问的文件,时间以小时为单位,节省磁盘空间.tmpwatch递归删除给定时间未被访问的文件.通常,它用于清理用于临时保存空间(如/tmp)的目录.当更改目录时,t ...

  9. 用crontab执行shell把top命令按日期追加到文件

    用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...

  10. Docker 的 Web 管理工具 DockerFly

    Dockerfly是基于 Docker1.12+ (Docker API 1.24+) 开发出Docker 管理工具,提供里最基本的基于 Docker 的管理功能,目的是能够方便广大Docker初学者 ...