【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
【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器的更多相关文章
- TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)
本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...
- TCP/IP详解 卷1 第二十一章 TCP的超时与重传
21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1) ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...
- TCP/IP详解 卷一(第十七章 TCP:传输控制协议)
与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...
- TCP/IP详解 卷一(第二章 链路层)
在TCP/IP协议族中,链路层主要有三个目的: 1.为IP模块发送和接收IP数据报 2.为ARP模块发送ARP请求和接收ARP应答 3.为RARP请求和接收RARP应答 TCP/IP支持多种不同的链路 ...
- TCP/IP详解 卷一(第三章 IP:网际协议)
IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...
- TCP/IP详解 卷1 第十七章 TCP:传输控制协议
17.2 TCP的服务 TCP提供了一种面向连接的.可靠的字节流服务.两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接. TCP通过下列方式来提供可靠性: 1) 应用数据被分割成TCP ...
- TCP/IP详解 卷一(第二十章 TCP的成块数据流)
本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...
- TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)
UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示
- TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
随机推荐
- 通过Tacker将NFV引入OpenStack
14年的这个时候,我们还在OpenStack社区中为NFV是否属于OpenStack而争论不休.如今这一争议已经被解决了.OpenStack已经成为NFV讨论中的重要部分,正如下面的ETSI MANO ...
- PAT 1019 General Palindromic Number[简单]
1019 General Palindromic Number (20)(20 分) A number that will be the same when it is written forward ...
- jmeter Bean Shell的使用(一)
未经作者允许,禁止转载!!! Jmeter有哪些Bean Shell 定时器: BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器: BeanShell ...
- windows下docker的安装并使用
硬件虚拟化:硬件虚拟化是一种对计算机或操作系统的虚拟.虚拟化对用户隐藏了真实的计算机硬件,表现出另一个抽象计算平台. 打开任务管理器的性能查看是否支持虚拟化技术 下载windows docker ht ...
- js之数组排序
数组,大家都不陌生,只要是学编程的人都知道这个入门的数据结构,在js中也是有数组这个概念的,跟普通的数组一样只是定义的形式不同罢了.下面是一个数组的排序代码: <html> <hea ...
- 找回丢失的mysql服务的root用户的密码
一.关闭mysqld服务.服务名称则根据电脑上的实际服务名来决定,windows下则用以管理员身份运行cmd.exe程序,然后输入:net stop mysql的服务名称. 二.打开一个cmd窗口,以 ...
- 使用点击二分图传导计算query-document的相关性
之前的博客中已经介绍了Ranking Relevance的一些基本情况(Click Behavior,和Text Match):http://www.cnblogs.com/bentuwuying/p ...
- POJ 1836
刚开始二分写错了 wa了很久 这个二分 的好好想想 #include <iostream> #include<cstdio> #include<string.h> ...
- LINUX环境变量(二)
一.Shell变量分为本地变量和环境变量. 1.本地变量:在用户现有运行的脚本中使用 a) 定义本地变量 格式: variable-name=value b) 显示本地变量 格式: set c) 清 ...
- 编译时错误之 error C2338: tuple_element index out of bounds
part 1 编译器 vs2015 VC++. 完整的错误信息粘贴如下: d:\program files (x86)\microsoft visual studio 14.0\vc\include\ ...