当前位置: 首页 > news >正文

TCP网络连接异常情况的处理

        在网络连接中,经常会出现一些意外情况,导致TCP连接不能正常工作,对于这些意外情况,TCP内部有自己的解决方法

一.进程崩溃

        在网络通讯时可能会出现进程突然崩溃的情况,当进程崩溃后进程就没了,就会导致进程的进程控制块(PCB)也被摧毁,而进程控制块中的一个属性”文件描述符表“也就被释放了,文件描述符表中有Socket网卡文件,将Socket网卡文件释放后相当于调用Socket.close(),于是崩溃的这一方就发出FIN(结束报文段)请求断开连接,就进一步触发了四次挥手,此时连接就正常释放了,所以,进程崩溃的处理和进程正常退出的处理没有区别

        关于进程推荐看Java多进程(详细),关于四次挥手推荐看网络连接(3次握手和4次挥手)

二.主机关机(正常步骤的关机)

        正常关机,就会先尝试摧毁所有的进程(强制终止进程),就和上面说的进程崩溃的处理方式一样,在触发四次挥手断开网络连接时,主机正在关机,所以可能四次挥手挥完了以后才关机,也有可能没有挥完就关机了

        但是四次挥手有没有挥完是没有问题的,因为即使四次挥手没有挥完,要关机的这个A设备的每个进程都会发送一个FIN(结束报文段)给网络连接的另一方B设备,此时接收到FIN(结束报文段)的B设备就会返回一个ACK(应答报文段)并且发送一个FIN(结束报文段),但是A设备可能已经关机了,所以不会返回ACK(应答报文段)给B设备,B设备没有收到A设备返回的ACK(应答报文段)就会触发超时重传,再进行多次重传都没有得到A设备返回的ACK(应答报文段)后,B设备就会单方面的断开连接(释放存储网络连接相关信息的内存)

三.主机掉电(拔电源,没有任何反应的时间)

根据掉电的一方正在发送数据还是接收数据,分为两种情况

        1.掉电的一方正在接收数据

        假设设备A正在发送数据给设备B,此时设备B突然断电。

        设备A发送数据过去以后,由于设备B已经断电,所以并不会接收到设备A发送的数据,也不会返回ACK(应答报文段)给 设备A,设备A在等待一段时间后仍然没有收到设备B返回的ACK(应答报文段)就会触发超时重传(关于超时重传推荐看出现丢包问题的情况以及解决方法),在多次重传以后还是没有接收到设备B返回的ACK(应答报文段)就会触发复位报文(RST),尝试重置连接,要是重置操作仍然失败,此时设备A就会单方面的断开连接(释放与设备B进行网络连接相关的内存数据)

        2.掉电的一方正在发送数据

        假设设备A正在发送数据给设备B,此时设备A突然断电。

        设备B就处于了一个尴尬的状态,因为设备B正在接收数据,突然设备A就不发送数据了,设备B也不知道设备A是一会发送数据还是一直都不发送数据了,所以就会进入阻塞等待。

        而这里就涉及到了一个”心跳包“的机制,设备B虽然是接收方,但也会周期性的发送一个不含任何业务数据(不含载荷)的TCP数据报给设备A,目的就是触发设备A返回ACK(应答报文段)给设备B,监测设备A是否正在正常工作,网络是否通畅

        要是设备B发送TCP数据报给设备A以后,没有收到设备A返回的ACK(应答报文段)就说明此时与设备A之间的网络连接已经出现问题了,设备B就会单方面的断开与设备A之间的网络连接。

        注意

        虽然TCP中已经有心跳包的支持了,但是还不够,往往需要在应用层,应用程序中重新实现心跳包(TCP心跳包,周期太长了,是分钟级别的)而在现在高并发的场景下,分钟级是远远不够的,需要秒级甚至毫秒级的心跳包,可以在更短的时间内,发现某个服务器出现问题

四.网线断开

        相当于主机断电的升级版本,假设在网线断开时,设备A正在给设备B发送数据

        1,设备A作为发送端,设备A的处理方式就和主机掉电时”掉电的一方正在发送数据“的处理方式相同

        2.设备B作为接收端,设备B的处理方式就和主机掉电时”掉电的一方正在接收数据“的处理方式相同

        

相关文章:

TCP网络连接异常情况的处理

在网络连接中,经常会出现一些意外情况,导致TCP连接不能正常工作,对于这些意外情况,TCP内部有自己的解决方法 一.进程崩溃 在网络通讯时可能会出现进程突然崩溃的情况,当进程崩溃后进程就没了,就会导致进程…...

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.10语句

1 表达式语句 表达式语句由表达式加上分号“;”组成。其一般形式为: 表达式; 执行表达式语句就是计算表达式的值。例如 caa; 2 函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为: 函数名(实际参数表); 例如 printf(“Hello !”);…...

Windows 通过服务名称搜索软件启动路径启动软件

文章目录 Windows 通过服务名称搜索软件启动路径启动软件 Windows 通过服务名称搜索软件启动路径启动软件 注意:QQ管家和360安全,正常情况下使用 taskkill 无法停止,因为在安全设置中有个“自保护”,正常情况下会默认勾选上&#…...

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言:在平常的写代码的过程中,或多或少的遇到很多奇怪的 bug ,尤其是一些大的程序,明明上一部分都是好好的,写下一块的时候突然多几百个 bug 的情况,然后这一块写完了后编译的时候直接傻眼了,看…...

Java如何调用接口API并返回数据(两种方法)

Java如何调用接口API并返回数据(两种方法) java处理请求接口后返回的json数据-直接处理json字符串 处理思路: 将返回的数据接收到一个String对象中(有时候需要自己选择性的取舍接收) 再将string转换为JSONObject对象 …...

极狐GitLab 价值流管理之「总时间图」使用指南

本文来源:about.gitlab.com 作者:Haim Snir 译者:极狐(GitLab) 市场部内容团队 对于软件研发管理者来说,了解在整个研发过程中时间都耗费在了哪些地方,是进行交付价值优化的关键洞察。GitLab / 极狐GitLab 新的价值流分…...

Mybatis入门和环境搭建

文章目录 一. Mybatis的简介1. 什么是ORM?2. 什么是持久层?3. Mybatis的作用 二. Mybatis环境搭建1. 搭建一个数据库2. 创建maven项目并导入相关依赖3. Mybatis相关插件安装4. Mybatis.cfg.xml核心配置文件 三. 基于ssm逆向工程的使用1. 配置generatorConfig.xml2.…...

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…...

【Linux】socket编程(二)

目录 前言 TCP通信流程 TCP通信的代码实现 tcp_server.hpp编写 tcp_server.cc服务端的编写 tcp_client.cc客户端的编写 整体代码 前言 上一章我们主要讲解了UDP之间的通信&#xff0c;本章我们将来讲述如何使用TCP来进行网络间通信&#xff0c;主要是使用socket API进…...

七大出海赛道解读,亚马逊云科技为行业客户量身打造解决方案

伴随全球化带来的新机遇和国内市场的进一步趋于饱和&#xff0c;近几年&#xff0c;中国企业出海快速升温&#xff0c;成为了新的创业风口和企业的第二增长曲线。从范围上看&#xff0c;出海市场由近及远&#xff0c;逐步扩张。从传统的东南亚市场&#xff0c;到成熟的北美、欧…...

【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

Maven基础使用篇 1️⃣ 编写 POM2️⃣ 编写业务代码3️⃣ 编写测试代码4️⃣ 打包和运行5️⃣ 使用 Archetype生成项目骨架 1️⃣ 编写 POM 到目前为止&#xff0c;已经大概了解并安装好了Maven环境, 现在&#xff0c;我们开始创建一个最简单的 Hello World 项目。如果你是初次…...

Spring Boot + Spring Data JPA 实现数据库操作的标准示例

环境搭建 本篇使用H2内存数据库演示Spring Data JPA 的使用。 导入JPA和H2的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><…...

JVM——类加载器

回顾一下类加载过程 类加载过程&#xff1a;加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 一个非数组类的加载阶段&#xff08;加载阶段获取类的二进制字节流的动作&#xff09;是可控性最强的阶段&#xff0c;这一步我们可以去完成还可以自定义…...

async/await 编程理解

博客主要是参考 Asynchronous Programming in Rust &#xff0c;会结合简单的例子&#xff0c;对 async 和 await 做比较系统的理解&#xff0c;如何使用 async 和 await 是本节的重点。 async 和 await 主要用来写异步代码&#xff0c;async 声明的代码块实现了 Future 特性&a…...

1. Java基础知识介绍

文章目录 1. Java基础知识介绍1. 简单输入输出1.1 输入1.2 输出 2. 数据类型2.1 基本数据类型2.2 引用数据类型 3. 函数4. 类基础知识5. 小结 1. Java基础知识介绍 1. 简单输入输出 在Java编程中&#xff0c;我们经常需要与用户进行交互&#xff0c;以获取输入并输出结果。Ja…...

基础shell小技巧01

1. 命令替换 shell脚本中最有用的特性之一是可以从命令输出中提取信息并将其赋给变量。把输出赋给变量之后&#xff0c;就可以随意在脚本中使用了。在脚本中处理数据时&#xff0c;这个特性显得尤为方便。 有两种方法可以将命令输出赋给变量。 反引号&#xff08;&#xff0…...

微信小程序--data的赋值与取值的几种方式

通过小程序官方文档可知&#xff1a; 赋值一定需要注意。需要setData的使用&#xff0c;这样页面才刷新&#xff0c;数据才会改变&#xff0c;并且分清that和this的使用 Page() 函数用来注册一个页面。接受一个 object 参数&#xff0c;其指定页面的初始数据、生命周期函数、事…...

条码通讯配置

由Leuze&#xff08;劳易测&#xff09; LSIS 222 M5M-R1/MA208i系统组成 连接说明及器件明细&#xff1a; 打开条码调试软件BPS Configuration tool对M208i进行ip 和端口号进行配置&#xff0c;条码选择作为客户端&#xff0c;输入ip和端口号&#xff0c;选择串口通讯波特…...

知网G4期刊《高考》简介及投稿要求

知网G4期刊《高考》简介及投稿要求 一、《高考》期刊简介&#xff1a; 主管单位&#xff1a;长春市委宣传部 主办单位&#xff1a;长春出版社 国内刊号22-1372/G4 国际刊号1673-6265 代号12-240 编辑单位&#xff1a;《高考》杂志社 出版周期&#xff1a;旬刊 类 …...

第7章 CPU前端优化

接下来讨论如何使用CPU监控特性寻找CPU上运行的代码中可被调优的位置。 标准的算法和数据结构在性能敏感型工作负载并不总能表现的很好。例如&#xff0c;在“扁平化”数据结构的冲击下&#xff0c;链表基本上快被放弃了。传统链表中的每个节点都是动态分配的&#xff0c;除了…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...