keeplive(Tcp keeplive的作用)

keeplive(Tcp keeplive的作用)
最新回答
戏柚画西楼

2022-07-17 04:58:47

Tcp keeplive(TCP Keepalive)的作用

TCP Keepalive机制主要用于在长连接环境下,探测TCP连接的对端是否仍然存活。以下是TCP Keepalive的详细作用及工作原理:

TCP Keepalive的作用
  1. 探测连接的对端是否存活

    在应用交互的过程中,可能存在客户端或服务器意外断电、死机、崩溃、重启,或者中间网络已经中断而双方并不知道的情况。利用TCP Keepalive的保活探测功能,可以探知这种对端的意外情况,从而保证在意外发生时,可以释放半打开的TCP连接,避免系统资源的浪费和无效的数据发送。

  2. 防止中间设备因超时删除连接相关的连接表

    中间设备如防火墙等,会为经过它的数据报文建立相关的连接信息表,并为其设置一个超时时间的定时器。如果超出预定时间,某连接无任何报文交互,中间设备会将该连接信息从表中删除。在删除后,再有应用报文过来时,中间设备将丢弃该报文,从而导致应用出现异常。TCP Keepalive机制可以通过定期发送探测包,防止这种情况的发生。

TCP Keepalive的工作原理
  • 当一个TCP连接建立之后,启用TCP Keepalive的一端便会启动一个计时器。
  • 当计时器数值到达0(即经过tcp_keepalive_time时间后),一个TCP探测包便会被发出。这个TCP探测包是一个纯ACK包(规范建议,不应该包含任何数据,但也可以包含1个无意义的字节,比如0x0),其Seq号与上一个包是重复的,因此探测保活报文不在窗口控制范围内。
  • 如果在一段时间内(默认时长为两小时,但具体时长由系统参数决定)没有收到对探测包的响应,服务器将继续发送探测包,直到达到一定的次数(默认值为9次,但具体次数由系统参数决定)。每次发送探测包的间隔(tcp_keepalive_intvl)也是由系统参数决定的,默认值为75秒。
  • 如果服务器在发送完所有探测包后仍未收到响应,它将认为客户主机已经关闭并终止连接。
TCP Keepalive的重要参数
  • tcp_keepalive_time:在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期。默认值为7200秒(2小时)。
  • tcp_keepalive_probes:在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的次数。默认值为9次。
  • tcp_keepalive_intvl:在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的发送频率。默认值为75秒。
TCP Keepalive可能导致的问题
  • 断开健康的TCP连接:如果Keepalive设置不合理,可能会因为短暂的网络波动而断开健康的TCP连接。
  • 消耗额外的宽带和流量:TCP Keepalive机制需要定期发送探测包,因此会消耗额外的宽带和流量。
  • 增加费用开销:在以流量计费的互联网环境中,TCP Keepalive机制可能会增加费用开销。
TCP Keepalive与HTTP Keep-Alive的区别
  • HTTP协议的Keep-Alive:意图在于TCP连接复用,即同一个连接上串行方式传递请求-响应数据。它主要用于HTTP/1.1及更高版本,以提高网络传输效率。
  • TCP的Keepalive机制:意图在于探测连接的对端是否存活,与HTTP协议的Keep-Alive有本质的区别。

综上所述,TCP Keepalive机制是一种有效的网络连接保活技术,它可以探测TCP连接的对端是否存活,防止中间设备因超时删除连接相关的连接表,从而保障网络连接的稳定性和可靠性。然而,在使用时需要注意合理配置参数,以避免可能的问题。