zoukankan      html  css  js  c++  java
  • 【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器

    本章介绍保活定时器。
    在 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

  • 相关阅读:
    data filter 去掉HTML文件中的所有标记
    data filter 去掉HTML文件中的所有标记
    C++ 上溢和下溢(overflow underflow)
    C++ 上溢和下溢(overflow underflow)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    二进制、十进制、N进制 ○| ̄|_
    二进制、十进制、N进制 ○| ̄|_
    JAVA合法标识符
    JAVA合法标识符
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5787051.html
Copyright © 2011-2022 走看看