[计算机网络]-TCP-保活机制

引言

保活机制 是一种在不影响数据流内容的情况下探测对方的方式。它是由一个 保活计时器 实现的。当计时器被触发,连接一端将发送一个 保活探测 (简称保活) 报文,另一端接收报文的同时会发送一个 ACK 作为响应

保活机制并不是 TCP 规范中的一部分,对此主机需求RFC 1122给出了三个理由:

  1. 在出现短暂的网络错误的时候,保活机制会使一个好的连接断开 (接收保活报文的一端可能只是因为一时的故障没有响应,故障可能很快会恢复,但另一端并不知情,他只知道自己发送的保活报文没有收到回应,那么就错误地认为对方不在工作了,于是断开连接)
  2. 保活机制会占用不必要的带宽 (因为不影响数据流,需要额外的报文的开销)
  3. 在按流量计费的情况下会在互联网上花掉更多的钱 (同样因为使用额外的报文)

保活功能一般是为服务器应用程序提供的,服务器应用程序希望知道客户主机是否崩溃或离开,从而决定是否为客户端绑定资源,毕竟作为一个服务提供方,如果对方已经不在工作了,自己自然就要结束提供服务的行为来节省自己的运行资源

利用 TCP 保活功能来探测离开的主机,有助于服务器与非交互性客户端进行相对短时间的对话,如 Web服务器,POP 等;而更多地实现长时间交互服务的服务器可能不希望使用保活功能,如 ssh 和 Windows 远程桌面 这样的远程登陆系统

描述

保活功能默认是关闭的,TCP 连接的任何一端都可以请求打开这一功能,可以设置在连接的一端,两端,或者两端都没有

如果在一段时间内 (称为 保活时间 k e e p a l i v e   t i m e keepalive\ time keepalive time) 连接处于 非活动状态,开启保活功能的一端将向对方发送一个保活探测报文。如果发送端没有收到响应报文,那么经过 保活时间间隔 ( k e e p a l i v e   i n t e r v a l keepalive\ interval keepalive interval),将继续发送保活探测报文,直到发送探测报文的次数达到 保活探测数 ( k e e p a l i v e   p r o b e keepalive\ probe keepalive probe) (因为仅凭一次没有被响应不足以判断连接是否已停止工作),这时对方主机将被确认为不可到达,连接也将被中断

上面提及的三个变量在 Linux 系统中对应 sysctl 变量 net.ipv4.tcp_keepalive_timenet.ipv4.tcp_keepalive_intvlnet.ipv4.tcp_keepalive_probes,默认是 7200 秒,75 秒和 9 次探测

保活探测报文为一个空报文段 (或只包含 1 字节),它的序列号等于对方主机发送的 ACK 报文的最大序列号减 1。这一序列号的数据已经被成功接收,所以不会对已到达的报文段造成影响,但探测报文返回的响应可以确定连接是否仍在工作
探测及其响应报文都不包含任何新的有效数据,当它们丢失时也不会进行重传

保活功能工作流程中,开启该功能的一方会发现对方处于以下四种状态之一:

  1. 对方主机仍在工作,并且可以到达。对方 TCP 响应保活探测报文正常,请求端就将保活计时器重置;如果在计时器超时之前有应用程序通过该链接传输数据 (结束了非活动状态),那么计时器也会再次被设定为保活时间值
  2. 对方主机已经崩溃。这时对方 TCP 将不会响应,那么经过保活时间间隔后会持续发送探测报文,直到一共发送了保活探测数指定的次数,都没有收到任何探测报文的响应,那么请求端就认为对方已经关闭,并断开连接
  3. 对方崩溃并已重启。此时请求端的连接相当于半开连接。这时请求端会收到一个对其探测报文的响应,但这个响应是一个重置报文段,请求端会断开连接,
  4. 对方主机仍在工作,但由于某些原因不能到达请求端,例如网络无法传输。这种情况与状态 2 类似,TCP 不能区分这两种状态

第 1 种情况下,请求端的应用层不会察觉到保活探测的进行 (除非请求端应用层激活保活功能),一切操作均在 TCP 层完成,对应用层是透明的;第 2,3,4 种情况下,请求端应用层将受到一个来自其 TCP 层的差错报告,例如 “连接超时”,“连接被对方重置” 等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值