阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下TCP的Keepalive相关参数学习

489次阅读
没有评论

共计 3304 个字符,预计需要花费 9 分钟才能阅读完成。

一 基本原理
TCP 的 Keepalive 可以简单理解成为 keep tcp alive,用来检测 TCP sockets 的连接是否正常或是已经断开。

Keeplived 的原理很简单,当建立一个 TCP 连接时,发送端就会创建一些计时器,其中一些计时器就是处理 keeplaive 相关问题的。当 keepalive 的计时器计数到 0 时,发送端就会向对端发送一些不含数据的 keepalive 数据包并开启 ACK 标志。如果得到 keepalive 探测包的回复,就可以认为当前的 TCP 连接正常,不用担心用户层面的具体实现。事实上,TCP 允许处理数据流,而不是数据包,所以对于用户程序来说零字节的数据包没有危害。

开启 keepalive 会对防火墙或者路由器产生额外的流量。
keepalive 主要承担两个任务:

检测死掉的对端连接

keepalive 可以用于在对端死掉并发送通知之前检测到对端的连接状态。内核错误或者强制终止对端的应用程序进程都可能造成这种情况发生。还有一种情况使用 keepalive 来检测对端是否死掉是对端依然存活但是连接到对端之前的网络已经断开。

假想主机 A 和主机 B 之前一个简单的 TCP 连接:在 A 与 B 之间有一个简单的三次握手,A 发送 SYN 到 B,然后 B 发送 SYN+ACK 到 A,最后 A 发送 ACK 到 B。现在就建立起了一个稳定的 TCP 连接,等待某方通过这个通道传输数据。现在问题就来了:拔掉主机 B 的电源,主机 B 在没有任何通知主机 A 当前连接即将关闭的情况会立即关机。对于主机 A,正准备接收数据,但是不知道主机 B 已经关机。现在主机 B 开机,主机 A 和主机 B 又处于正常状态,主机 A 知道还有一个与主机 B 的活动连接,但是主机 B 不知道。当主机 A 尝试通过这个死掉的连接向主机 B 发送数据时,主机 B 会返回 RST,主机 A 就会主动关掉这个连接。

keepalived 可以在对端主机不可达的情况通知发送端,减少误报的风险。实际上,如果网络中的两个主机存在这种问题,keepalive 会在标记一个连接端口之前等待一段时间并重新尝试发送 keepalive 数据包

 _____                                                    _____
  |    |                                                  |    |
  |  A  |                                                  |  B  |
  |_____|                                                  |_____|
      ^                                                        ^
      |—>—>—>————– SYN ————–>—>—>—|
      |—<—<—<———— SYN/ACK ————<—<—<—|
      |—>—>—>————– ACK ————–>—>—>—|
      |                                                        |
      |                                      system crash —> X
      |
      |                                    system restart —> ^
      |                                                        |
      |—>—>—>————– PSH ————–>—>—>—|
      |—<—<—<————– RST ————–<—<—<—|
      |                                                        |

2. 在网络断开的情况下阻止与对端的 TCP 连接断开。
  _____          _____                                    _____
  |    |        |    |                                  |    |
  |  A  |        | NAT |                                  |  B  |
  |_____|        |_____|                                  |_____|
      ^              ^                                        ^
      |—>—>—>—|———– SYN ————->—>—>—|
      |—<—<—<—|——— SYN/ACK ———–<—<—<—|
      |—>—>—>—|———– ACK ————->—>—>—|
      |              |                                        |
      |              | <— connection deleted from table      |
      |              |                                        |
      |—>- PSH ->—| <— invalid connection                |
      |              |                                        |

二 在 Linux 下使用 TCP 的 keepalive

tcp_keepalive_time
    一个连接需要 TCP 开始发送 keepalive 探测数据包之前的空闲时间。以秒为单位

tcp_keepalive_probes
    发送 TCP keepalive 探测数据包的最大数量,默认是 9. 如果发送 9 个 keepalive 探测包后对端仍然没有响应,就关掉这个连接

tcp_keepalive_intvl
    发送两个 TCP keepalive 探测数据包的间隔时间,默认是 75 秒

$ cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200
$ cat /proc/sys/net/ipv4/tcp_keepalive_probes 
9
$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl 
75

可以通过 echo 临时修改
echo “300” >  /proc/sys/net/ipv4/tcp_keepalive_time

也可以通过修改 /etc/sysctl.conf 永久生效
$ grep net.ipv4.tcp_keepalive_time /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 300
$ sysctl -p|grep net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_time = 300

参考资料:
http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

CentOS 7 上配置 LVS + Keepalived + ipvsadm http://www.linuxidc.com/Linux/2014-11/109237.htm

Keepalived 高可用集群搭建 http://www.linuxidc.com/Linux/2014-09/106965.htm

Keepalived 的详细介绍 :请点这里
Keepalived 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-03/115321.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3304字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7812850
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...