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的处理方式就和主机掉电时”掉电的一方正在接收数据“的处理方式相同

        

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

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

相关文章

Java实现一个简单的图书管理系统(内有源码)

简介 哈喽哈喽大家好啊,之前作者也是讲了Java不少的知识点了,为了巩固之前的知识点再为了让我们深入Java面向对象这一基本特性,就让我们完成一个图书管理系统的小项目吧。 项目简介:通过管理员和普通用户的两种操作界面&#xff0…

主力吸筹指标及其分析和使用说明

文章目录 主力吸筹指标指标代码分析使用说明使用配图主力吸筹指标 VAR1:=REF(LOW,1); VAR2:=SMA(MAX(LOW-VAR1,0),3,1)/SMA(ABS(LOW-VAR1),3,1)*100; VAR3:=EMA(VAR2,3); VAR4:=LLV(LOW,34); VAR5:=HHV(VAR3,34); VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3); /*底线:0,…

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果&#xff1a;5…

C语言练习1(巩固提升)

C语言练习1 选择题 前言 “人生在勤&#xff0c;勤则不匮。”幸福不会从天降&#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标&#xff0c;为广大劳动群众指明了光明的未来&#xff1b;全面建成小康社会的历史任务&#xff0c;为广大劳动群众赋予了光荣的使命&…

采用typescript编写,实现ofd前端预览、验章

前言 浏览器内核已支持pdf文件的渲染&#xff0c;这极大的方便了pdf文件的阅读和推广。ofd文件作为国产板式标准&#xff0c;急需一套在浏览器中渲染方案。 本人研究ofd多年&#xff0c;分别采用qt、c# 开发了ofd阅读器。本人非前端开发人员&#xff0c;对js、typescript并不熟…

android Bitmap没有recycle()导致native内存暴增

android Bitmap没有recycle()导致native内存暴增 android8.0后&#xff0c;Bitmap从Java层转移到native层&#xff0c;此举虽然缓解了JVM的内存压力&#xff0c;也提升了图形的加载速度&#xff0c;但不恰当的Bitmap分配/释放逻辑&#xff0c;将导致内存问题深藏到native层&am…

windows开发环境搭建

下载msys2&#xff0c;官网下载即可&#xff1a; MSYS2 安装其他的编译工具&#xff08;貌似不需要把中间的命令全部执行&#xff09;&#xff1a; MSYS2使用教程——win10系统64位安装msys2最新版&#xff08;msys2-x86_xxxx.exe&#xff09;_msys64_Dreamhai的博客-CSDN博…

Maven 一键部署到 SSH 服务器

简介 利用 Maven Mojo 功能一键部署 jar 包或 war 包到远程服务器上。 配置 在 maven 的setting.xml 配置服务器 SSH 账号密码。虽然可以在工程的 pom.xml 直接配置&#xff0c;但那样不太安全。 <servers><server><id>iq</id><configuration&…

【C++代码】有序数组的平方,长度最小的子数组,螺旋矩阵 II--代码随想录

题目&#xff1a;有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 题解 数组其实是有序的&#xff0c; 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的…

食品制造行业云MES系统解决方案

食品饮料行业大致可以分为初级产品加工、二次加工、食品制造、食品分装、调味品和饲料加工等几大类。由于处于产业链不同的位置&#xff0c;其管理存在一定的差异&#xff0c;那么食品行业的MES应该怎么建设呢&#xff1f; 食品饮料行业生产管理特点&#xff1a; 食品饮料行业…

定时任务,Timer,Quartz,Spring Task,Xxl-Job(分布式任务调度框架)

一、定时任务解决方案 1.Thread&#xff0c;Timer&#xff0c;Quartz&#xff0c;Spring Task Thread线程等待&#xff08;最原始最简单方式&#xff09;&#xff0c;创建一个thread&#xff0c;然后让它在while循环里一直运行着&#xff0c;通过sleep方法来达到定时任务的效…

全球Salesforce顾问薪资大揭秘!顾问如何升职加薪?

Salesforce顾问通过针对业务挑战提出、记录和分析需求&#xff0c;提供解决方案&#xff0c;从而帮助企业改善Salesforce的流程和效率。顾问是企业和Salesforce之间的桥梁。 Salesforce顾问的薪资一直是生态系统中的热门话题&#xff0c;备受求职者关注。本篇文章将分享提高顾…

Grafana Dashboard 备份方案

文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…

基于微信小程序的物流管理系统3txar

在此基础上&#xff0c;结合现有物流管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的物流信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;对目前传统物流管理基础业务进行了较为详尽的了解和分析。根据需求分析结果进行了系统的设计&…

MyBatis动态sql

文章目录 一、MyBatis动态sql1.1 概述1.2 if元素1.3 foreach元素 二、模糊查询2.1 使用#{字段名}2.2 使用${字段名}2.3 使用concat{%,#{字段名},%}2.4 mybatis中#与$的区别 三、MyBatis结果映射3.1 区别3.2 应用场景 一、MyBatis动态sql 1.1 概述 MyBatis是一个Java持久化框架…

学习网络编程No.4【socket编程实战】

引言 北京时间&#xff1a;2023/8/19/23:01&#xff0c;耍了好几天&#xff0c;主要归咎于《我欲封天》这本小说&#xff0c;听了几个晚上之后逐渐入门&#xff0c;在闲暇时间又看了一下&#xff0c;小高潮直接来临&#xff0c;最终在三个昼夜下追完了&#xff0c;哈哈哈&…

【uni-app】压缩图片并添加水印

总体思路 dom 结点 这里的 cvHeight 和 cvWidth 初始时要设置为你后续需要压缩后的最大宽高。假设我们在图片上传后图片最大为 350 * 350 <u-upload :fileList"baseInfoFormData.entrustFileList" afterRead"afterFileRead" multiple></u-uploa…

容器和云原生(二):Docker容器化技术

目录 Docker容器的使用 Docker容器关键技术 Namespace Cgroups UnionFS Docker容器的使用 首先直观地了解docker如何安装使用&#xff0c;并快速启动mysql服务的&#xff0c;启动时候绑定主机上的3306端口&#xff0c;查找mysql容器的ip&#xff0c;使用mysql -h contain…