TCP连接,如果server端所在机器突然掉电,client是如何以及多久感知tcp连接断开

TCP连接,如果server端所在机器突然掉电,client是如何以及多久感知tcp连接断开

文章目录

  • TCP连接,如果server端所在机器突然掉电,client是如何以及多久感知tcp连接断开
    • 1. 场景:
    • 1.1 client没有发数据给server场景
      • 1.1.1 TCP keepalive原理
    • 1.2 client一直发数据给server场景
      • 1.2.1初期重传尝试(tcp_retries1):
      • 1.2.2 后期重传尝试(tcp_retries2):
      • 1.2.3 计算重传时间

1. 场景:

TCP连接,client 和 server已经成功建立连接,这时server端所在机器突然掉电且且后续一直处于掉电状态。在没有任何应用层心跳协议的场景下,client端如何以及多久感知tcp连接断开?

这里得区分两个场景:

  1. client和server建立连接后,client一直没有发送数据给server,也就是一直没有数据交互;
  2. client和server建立连接后,client一直有数据发送给server,有数据交互。

1.1 client没有发数据给server场景

没有发数据的场景下,会触发tcp的保活机制,也就是TCP keepalive。

1.1.1 TCP keepalive原理

TCP Keepalive 是一种用于检测空闲连接是否仍然存在的机制。它通过周期性地发送探测数据包来验证对端是否还活着。如果对端没有回应,TCP连接会被认为已经失效,并最终关闭。下面是 TCP Keepalive 的触发机制和检测方法:
触发机制
TCP Keepalive 主要包括三个参数:

  1. tcp_keepalive_time:
  • 空闲时间:在没有任何数据传输后,连接保持空闲的时间(秒),默认值通常为 7200 秒(2 小时)。
  1. tcp_keepalive_intvl:
  • 重试间隔:发送 Keepalive 探测包之间的间隔时间(秒),默认值通常为 75 秒。
  1. tcp_keepalive_probes:
  • 探测次数:在关闭连接之前发送 Keepalive 探测包的最大次数,默认值通常为 9 次。

Keepalive 流程

  1. 空闲时间达到(tcp_keepalive_time):
  • 当 TCP 连接空闲达到 tcp_keepalive_time 后,开始发送 Keepalive 探测包。
  1. 发送探测包:
  • 每隔 tcp_keepalive_intvl 秒发送一个 Keepalive 探测包,探测包是一个长度为零的 TCP 数据包,包含当前序列号。
  1. 等待响应:
  • 如果对端在 tcp_keepalive_intvl 时间内没有回应,则重发探测包。
  1. 达到探测次数(tcp_keepalive_probes):
  • 如果连续发送 tcp_keepalive_probes 次探测包后仍未收到对端的回应,内核认为连接已失效,关闭连接。

所以,此场景下,在linux系统中,最少经过7875s,client才可以感知到tcp连接断开。

7200 + (75 * 9) = 7875 s

并且应用程序需要通过socket接口设置SO_KEEPALIVE选项才能够使能TCP keepalive功能。
如下所示:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <unistd.h>int set_keepalive(int sockfd) {int optval = 1;socklen_t optlen = sizeof(optval);// Enable keepaliveif (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0) {return -1;}// Set keepalive timeoptval = 600; // 10 minutesif (setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, &optval, optlen) < 0) {return -1;}// Set keepalive intervaloptval = 60; // 1 minuteif (setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, &optval, optlen) < 0) {return -1;}// Set keepalive probesoptval = 5; // max 5 probesif (setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, &optval, optlen) < 0) {return -1;}return 0;
}

1.2 client一直发数据给server场景

此场景下,client会一直重传报文,直到某个上限后,内核就会认为tcp连接断开,client就能感知到此tcp连接断开。

那client重传几次呢?重传多久呢?
这里收两个参数的限制:

  1. tcp_retries1
  2. tcp_retries2

1.2.1初期重传尝试(tcp_retries1):

  • 在最初尝试发送数据包并且没有收到ACK确认时,TCP将根据Retransmission Timeout (RTO)计算出的时间间隔来进行重传。如果重传次数达到tcp_retries1定义的值,客户端不会立即关闭连接,而是进入下一阶段的重传。

1.2.2 后期重传尝试(tcp_retries2):

  • 如果在达到tcp_retries1的重传次数之后,连接仍然没有得到响应,TCP将继续尝试重传数据包。如果重传次数达到tcp_retries2定义的值,TCP将认为连接出现了硬错误,此时,连接将被认定为失效,TCP将关闭连接并通知应用程序发生了错误(通常是ETIMEDOUT)。

1.2.3 计算重传时间

假设:
tcp_retries1 = 3
tcp_retries2 = 15
RTO = 1
那么总的重传次数为 tcp_retries2,即 15 次,而不是 3 次初始重传加上 15 次长期重传。换句话说,重传的总次数是 15 次,其中前 3 次由 tcp_retries1 控制。

重传过程

  1. 初始重传阶段:
  • 第1次重传(初始RTO):等待1秒
  • 第2次重传:等待2秒
  • 第3次重传:等待4秒
  1. 长期重传阶段:
  • 第4次重传:等待8秒
  • 第5次重传:等待16秒

    最后一次重传(第15次):等待TCP_RTO_MAX(通常为120秒)
    注意: 这里每次重传时间最大值就是TCP_RTO_MAX。
    总的重传时间:
7秒(初始阶段) + 1080秒(长期阶段) = 1087秒(约18分钟)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用TikTok的个性化趋势提升独立站的市场竞争力?

在当今数字化时代&#xff0c;TikTok平台以其独特的算法和广泛的用户基础&#xff0c;正逐步成为独立站个性化营销的新宠。本文Nox聚星将和大家分析TikTok平台上的个性化内容趋势对消费者行为的影响&#xff0c;以及如何选择、培养TikTok达人。 一、TikTok平台上的个性化内容趋…

Maven 构建过程

Maven 配置总结 生动概括 想象你正在建造一座房子。Maven 就像你的项目经理&#xff0c;它帮你安排好所有的材料、工人和施工计划。你只需要告诉它房子的设计图&#xff08;POM 文件&#xff09;&#xff0c;它就会自动为你准备好所有的建材&#xff08;依赖&#xff09;&…

太速科技-FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡

FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡 一、板卡概述 本子卡基于FMC连接器实现4路125M采样率AD输出&#xff0c;两路1G采样率DA输出子卡&#xff0c;板卡默认由FMC连接器12V供电&#xff0c;支持外参考时钟&#xff0c;外输入时钟&#xff0c;外触发。 …

相机光学(二十五)——数字相机和模拟相机

数字摄像机是指摄像机的图像处理及信号的记录全部使用数字信号完成的摄像机。此种摄像机的最大的特征是磁带上记录的信号为数字信号&#xff0c;而非模拟信号。数字摄像机摄取的图像信号经CCD转化为电信号后&#xff0c;马上经电路进行数字化&#xff0c;以后在记录到磁带之前的…

交互未来入选“北京市通用人工智能产业创新伙伴计划”模型伙伴

在“开启数智新时代&#xff0c;共享数字新未来”的宏大主题下&#xff0c;2024全球数字经济大会于近日盛大开幕&#xff0c;汇聚全球智慧&#xff0c;共谋数字经济新篇章。大会首日&#xff0c;备受瞩目的人工智能专题论坛率先拉开帷幕&#xff0c;以“应用即未来——大模型赋…

视频太大发不出去怎么处理,视频太大发不了邮件怎么办

在数字化时代&#xff0c;视频已成为我们分享生活、传递信息的重要方式。然而&#xff0c;当遇到视频文件过大&#xff0c;无法发送或分享时&#xff0c;你是否感到困扰&#xff1f;别担心&#xff0c;本文将为你揭秘轻松解决视频太大发不了的问题。 电脑频编辑器可以用于简单的…

图书借阅小程序论文(设计)开题报告

一、课题的背景和意义 近些年来&#xff0c;随着移动互联网巅峰时期的来临&#xff0c;互联网产业逐渐趋于“小、轻、微”的方向发展&#xff0c;符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中&#xff0c;被誉为“运行着程序的网站”之名的微信小程序…

【大数据】—量化交易实战案例(海龟交易策略)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;今天用另外一种方法模拟炒股&#xff0c;后面的模拟的实战全部用同样的数据&#xff0c;最后比较哪种方法赚的钱多。 海龟交易…

LaTeX表格灵活设置列宽

一些基本的插入表格的操作见&#xff1a;https://blog.csdn.net/gsgbgxp/article/details/129457872 遇到问题先查阅《IShort》和刘海洋老师的《LaTeX入门》。 设置表格列宽基础操作&#xff08;不借助tabularx&#xff09; 先从一个简单表格开始 \begin{table}[!h]\centeri…

勒索病毒入门级理解

勒索病毒是泛指一切通过锁定被感染者计算机系统或文件并施以敲诈勒索的新型计算机病毒。其特点和相关信息可以归纳如下&#xff1a; 一、定义与特征 定义&#xff1a;勒索病毒是一种恶意软件&#xff0c;它通过加密用户的文件或阻止用户访问计算机操作系统&#xff0c;以此要…

分页联合查询实现方法(Java)

controller层 GetMapping("/page")Operation(summary "获得标注属性管理分页")public CommonResult<PageResult<MarkerPropertyViewVO>> getMarkerPropertyPage(Valid MarkerPropertyPageReqVO pageVO) {PageResult<MarkerPropertyDO> …

软件确认测试和系统测试包括哪些测试内容?有什么区别?

一、软件确认测试 软件确认测试&#xff0c;顾名思义&#xff0c;是为了确认软件的正确性和完整性而进行的测试过程。它旨在验证软件是否符合用户需求和软件开发规范。测试内容包括&#xff1a; 1、功能确认&#xff1a;通过对软件各项功能进行测试&#xff0c;验证其是否按照…

0058__NTFS重解析点(Reparse Points)

NTFS重解析点&#xff08;Reparse Points&#xff09;-CSDN博客

c语言----队列

很久没有写文章了。因为放假了嘛&#xff0c;给自己稍微放松了一下&#xff0c;所以最近的更新很慢。呜呜下一次一定改。然后咧。今天我想与大家分享的是队列。虽然这个知识点我们应该在讲了堆的实现就应该写的&#xff0c;但是后面忘了&#xff0c;以为自己是写了的。但是昨天…

sql查询练习

1.表的结构 课程表&#xff1a;课程编号cid&#xff0c;课程名称canme&#xff0c;老师tid&#xff0c; 教师表&#xff1a;教师tid&#xff0c;教师姓名tname 分数表&#xff1a;学生student_sid&#xff0c;课程 cours_id&#xff0c;&#xff0c;分数score 学生表&#xff…

记录PostgreSql 使用dblink跨库

dblink 是 PostgreSQL 的一个模块&#xff0c;允许你从当前数据库会话中连接到其他数据库并执行 SQL 命令。这对于跨库查询、数据同步或临时数据交换等场景非常有用。 以下是如何使用 dblink 进行跨库查询的基本步骤&#xff1a; 启用 dblink&#xff1a; 如果你的 PostgreSQ…

DC/AC电源模块为现代电子设备提供稳定的能源

BOSHIDA DC/AC电源模块为现代电子设备提供稳定的能源 DC/AC电源模块是一种重要的电子设备&#xff0c;它为现代电子设备提供稳定的能源。在今天的高科技社会中&#xff0c;电子设备已经成为人们生活和工作的重要组成部分。从家用电器到计算机、手机、汽车和航天航空设备&…

基于antv x6实现的组织架构图

X6 是基于 HTML 和 SVG 的图编辑引擎&#xff0c;基于 MVC 架构&#xff0c;用户更加专注于数据逻辑和业务逻辑。 一、业务背景 将组织树形结构图形化&#xff0c;更直观的展示个人所在的组织架构。 二、功能点 组织结构按需渲染&#xff0c;支持层级展开、收缩按需求自定义…

CentOS8换源

一、备份 切换至源目录&#xff0c;备份源&#xff1a; cd /etc/yum.repos.d/ #进入源目录 ls #查看源文件 mkdir bkup #创建备份目录 mv CentOS-Linux-* bkup #将源文件移动至备份文件夹若是更换源并且原生源已经备份的情况下&#xff0c;使用rm -f *.repo删除原先文件…

【软件测试】之黑盒测试用例的设计

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 1.测试用例的概念2.测试用例的好处3. 黑盒测试用例的设计3.1 黑盒测试的概念3.2 基于需求进行测…