(学习笔记-TCP连接断开)建立了连接,但是客户端或服务端出现问题,会怎么样?

news2024/10/6 18:33:53

客户端突然出现故障

客户端出现故障指的是客户端的主机发生了宕机或者断电的场景。发生这种情况的时候,如果服务端一直不会发送数据给客户端,那么服务端是永远无法感知到客户端宕机这件事的,也就是服务端的TCP连接将一直处于ESTABLISH 状态,占用着资源。

为了避免这种情况,TCP有一个保活机制

原理
定义了一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的TCP连接已经死亡,系统内核将错误信息通知给上层应用程序。

在linux内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,默认值:

net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75  
net.ipv4.tcp_keepalive_probes=9
  • tcp_keepalive_time =7200:表示保活时间是7200秒(2小时),也就是2小时内如果没有任何连接相关的活动,则会启动保活机制
  • tcp_keepalive_intvl = 75:表示每次检测时间间隔75秒
  • tcp_keepalive_probes=9:表示检测9次无响应,认为对方是不可达的,从而中断本次连接

也就是说在Linux系统中,最少需要经过2小时11分15秒才能够发现一个死亡连接
请添加图片描述
PS:应用程序若想使用TCP保活机制需要通过socket接口设置SO_KEEPALIVE 选项才能够生效,如果没有设置那么就无法使用TCP保活机制。

如果开启了TCP保活机制就要考虑以下几种情况:

  • 第一种,对端程序正常工作。当TCP保活的探测报文发送给对端,对端会正常响应,这样TCP保活时间会被重置,等待下一个TCP保活时间的到来。
  • 第二种,对端主机宕机并重启。当TCP保活的探测报文发送给对端后,对端是可以响应的,但由于没有该连接的有效信息,会产生一个RST报文 ,这样很快就会发现TCP连接已经被重置。
  • 第三种,对端主机宕机(注意不是进程崩溃,进程崩溃后操作系统会在回收进程资源的时候,会发送FIN报文,而主机宕机则是无法感知的,所以需要TCP保活机制来探测对方是不是发生了主机宕机),或对端主机由于其他原因导致报文不可达。当TCP保活的探测报文发送给对端后没有响应,连续几次,达到保活探测次数后,TCP会报告该TCP连接已经死亡

TCP保活的这个机制检测时间有点长,可以自己在应用层实现一个心跳机制。


比如,web服务软件一般都会提供== keepalive_timeout == 参数,指定HTTP长连接的超时时间。如果设置了HTTP长连接的超时时间是60秒,web服务软件就会启动一个定时器,如果客户端在完成一个HTTP请求后,在60秒内都没有再发起请求,定时器的时间一到,就会触发回调函数来释放该连接
请添加图片描述


服务端进程崩溃

TCP的连接信息是由内核维护的,所以当服务器的进程崩溃后,内核需要回收该进程的所有TCP资源,于是内核会发送第一次握手FIN报文,后续的挥手过程也是在内核完成的,并不需要进程的参与,所以即使服务端的进程退出了,还是能与客户端完成TCP四次挥手的过程

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

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

相关文章

两巨头强强联手!美国EB-5投资移民新项目侨外出国首发

7月15日,在侨外出国“见证辉煌历史 重启明日新章”的主题活动中,一个全新乡村EB-5投资移民项目——峰堡长岭天然气开发项目正式扬帆起航。 这一项目,由两大行业巨头——侨外出国和CanAm基金强强联手。众所周知,侨外出国是EB-5投资…

并发编程中常见的锁策略

本文介绍一些常见的锁策略。 锁策略是多线程编程中相对进阶的内容,它不仅仅局限于Java,任何和“锁”相关的话题,都可能会涉及到这些内容;即使是别的语言,只要涉及到“锁”,也都会涉及到锁策略。 锁策略的…

px4上传数据waiting for bootloader

输入make px4_fmu-v6c_default upload,出现waiting for bootloader 原因,可能是启动了QGC占用了端口,把QGC关掉,重新上电,就OK了。

C++ 继承与多态的基本用法

目录 1.继承 1.1访问等级 1.2函数遮蔽 2.多态 2.1虚函数 1.继承 有父类,有子类,这种层次关系就叫继承,也就说说子类能从父类哪里继承很多东西,继承这种概念或性质是面向对象程序设计的核心思想之一。 这种继承需要先定义一个父…

TS类型断言、函数重载踩过的坑

任意属性 interface Person {name: string;age?: number;[propName: string]: string;//报错 } let tom: Person {name: Tom,age: 25,gender: male }; 任意属性需要包含确定属性和可选属性的类型:[propName: string]: string|number; 类型断言 👉在…

zabbix企业级监控(监控第二台linux服务器安装部署)接上篇单台监控文章操作

zabbix企业级监控监控linux主机 目录 【agent端配置】(监控第二台linux服务器) 1、源码安装zabbix(解包、编译、配置、安装) 2、改agent配置文件 3、启动服务 图形操作: 【agent端配置】(监控第二台l…

批处理判断目录是否存并且删除非空目录

这个功能很常用,但是偶尔总是忘记写法,这里贴一个亲测通过的例子吧。 ECHO OFF CLS if exist DirName ( rmdir /q /s DirName ) ELSE ( echo dir NOT exist!)这个例子的功能非常简单,判断目录DirName是否存在,存在就删除&#x…

【Linux】多线程(上)

本文详细介绍了多线程的常见概念 生产者消费者模型将在多线程(下)继续讲解 欢迎大家指正 提起讨论进步啊 目录 多线程的理解 线程的优点 线程的缺点: 线程的用途 线程VS进程 用户级线程库 POSIX线程库 线程创建: 线程…

【管理设计篇】聊聊系统部署生产有哪些方式

背景 对于互联网应用来说,除了在服务端开发和服务治理之外,还需要保证的有高可用运维。所以很多时候我们不能仅仅局限于,实现需求这个层面,比如软件设计,工程质量,性能,运维、可测试、可观测性…

基于深度学习的高精度交通标志检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于CCTSDB数据集的高精度交通标志(指示、禁止和警告)检测系统可用于日常生活中来检测与定位交通标志目标,利用深度学习算法可实现图片、视频、摄像头等方式的交通标志目标检测识别,另外支持结果可视化与图片或视…

【react + antd】antd如何自定义请求使用antd的upload组件实现图片上传且可预览可删除

文章目录 1. 效果展示2. customRequest如何使用?特别注意: 3. 控制上传时什么时候使用customRequest,什么时候选择beforeUpload方法? 1. 效果展示 官网给出的案例无法使用封装好的请求方式上传图片,以及无法满足上传图…

使用模板创建【vite+vue3+ts】项目出现 “找不到模块‘vue‘或其相应的类型声明” 的解决方案

问题描述 项目前台需要使用Vue3Ts来写一个H5应用,然后我用模板创建 npm create vitelatest vue3-vant-mobile -- --template vue-ts创建完后进入HelloWorld.vue,两眼一黑 解决办法一 npm i --save-dev types/node然后在tsconfig.json的"compi…

【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

文章目录 Cortex-M 系列介绍Cortex-M0/M0 介绍Cortex-M3/M4 介绍Cortex-M7 介绍Cotex-M33 介绍 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M 系列介绍 Cortex-M0/M0 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU&#xff0…

Golang跨平台UI框架之Wails(二)

上一篇文章我们讲解了如何简单创建一个 wails 的项目,但是现在有很多前端框架我们可以选择,比如: AngularVueSvelteReactLitVanilla各个都是时代的弄潮儿,就看哪一个适合你了,后续的系列都是以Angular为例。 1. 创建Angular模板项目 由于 wails 是没有官方支持Angular的…

代码随想录算法训练营之JAVA|第六天| 454. 四数相加 II

今天是第6天刷leetcode,立个flag,打卡60天。 算法挑战链接 454. 四数相加 IIhttps://leetcode.cn/problems/4sum-ii/ 第一想法 理解题目:找到四个数相加等于0 ——> 找到两个互为相反的数 理解完题目之后,那么我们要做的就…

IP首部报文字段

一、IP首部报文字段 字段如下图所示 二、每个字段的含义 版本 表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4 首部长度 这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节&#xff0…

设计模式-组合模式在Java中的使用示例-杀毒软件针对文件和文件夹进行杀毒

场景 组合模式 组合模式(Composite Pattern): 组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。 组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性, 组合模式…

不会接口测试?用Postman轻松入门 —— Postman实现get和post请求

测试行业现在越来越卷,不会点接口测试好像简历都已经拿不出手了,但很多小伙伴都会头疼:接口测试应该怎么入门?那么多的接口测试工具应该学哪个? 其实,接口测试工具,就像吃饭用的筷子&#xff0…

25.JavaWeb-接口文档Swagger

1.Swagger swagger是一款可以根据resutful风格生成的生成的接口开发文档,并且支持做测试的一款中间软件。 1.1 接口文档 接口文档是用于描述API的一份文档,它包含了API的详细信息,包括API的请求和响应参数、接口路径、请求方法、数据类型、返…

企企通入选《2023数字化采购发展报告》,持续赋能企业数字化采购

近日,国内知名产业数字化服务平台亿邦智库联合中国物流与采购联合会公共采购分会共同发布了《2023数字化采购发展报告》。 企企通一直以来积极推动企业采购供应链数字化升级和变革,不断通过技术、产品、服务的创新,引领国内采购供应链数字化的…