【TCP】四次挥手(最强详解!!通俗易懂!!)

目录

想要了解三次握手的话可以参考我的另外一篇博客

首先来了解一下FIN和ACK

FIN

ACK

接着我们再来具体的了解TCP四次挥手过程

转换为最最通俗理解方法:


想要了解三次握手的话可以参考我的另外一篇博客

【TCP】三次握手(最强详解!!通俗易懂!!)_是瑞穗的猫啊的博客-CSDN博客

首先来了解一下FIN和ACK


FIN和ACK就是两个用于关闭连接过程中的两个信号量


FIN

FIN代表的就是结束的意思,发起了一个关闭的信号

  • 可以将FIN视为“告别”的信号,用于开始关闭TCP连接的过程。
  • 当一方决定关闭连接时,它会发送一个带有FIN标志的包给对方,表示自己不会再发送数据。
  • 发送FIN包的一方仍然可以接收数据,但不能再发送数据给对方。
  • FIN包中的序列号字段指示发送者发送完数据后的下一个序列号。

ACK

ACK和三次握手过程中的一样,也是代表了确认的标志

  • 在TCP通信中,ACK用于确认已收到的数据或请求。
  • 当一方接收到带有FIN标志的包时,需要向对方回复一个带有ACK标志的包,表示已成功接收到了FIN包。
  • 这个ACK包中的确认号字段设置为接收到的FIN包的序列号加1,表示已经成功接收到了FIN包。

接着我们再来具体的了解TCP四次挥手过程

第一次挥手(A发送FIN):

  • A向B发送一个带有FIN(结束)标志位的包,表示A已经发送完所有数据,并请求关闭连接。
  • A将序列号设为X,此时A不能再向B发送数据。

最开始的时候是连接状态,我们需要将其断开TCP的连接

 

第二次挥手(B发送ACK):

  • B收到A的FIN包后,向A回复一个带有ACK(确认)标志位的包,表示已经收到了A的关闭请求。
  • 确认号字段设置为A的序列号X加1,表示B期望接收到下一个字节的序列号。

第三次挥手(B发送FIN):

  • B发起关闭连接过程,向A发送一个带有FIN标志位的包,表示B已经发送完所有数据,并请求关闭连接。
  • B选择一个随机的序列号Y,并将其放入包的序列号字段,表示B不会再向A发送数据。

第四次挥手(A发送ACK):

  • A收到B的FIN包后,向B回复一个带有ACK标志位的包,表示已经收到了B的关闭请求。
  • 确认号字段设置为B序列号Y加1,表示A期望接收到下一个字节的序列号。

等待2MSL时间后断开连接 

成功断开连接 

转换为最最通俗理解方法:

A:再见,我要关闭了(FIN)

B:我知道了(ACK)

 给 B 一段时间把自己的事情处理完...

B:再见,我要关闭了(FIN)

A:我知道了(ACK)

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

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

相关文章

C++之std::distance应用实例(一百八十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

MySQL 8 数据清洗总结

MySQL 8 数据清洗三要素: 库表拷贝和数据备份数据清洗SQL数据清洗必杀技-存储过程 前提:数据库关联库表初始化和基础数据初始化: -- usc.t_project definitionCREATE TABLE t_project (id varchar(64) NOT NULL COMMENT 主键,tid varchar(…

以物联网为核心的智慧工地云平台:聚集智能技术,实现建筑工地智慧管理

智慧工地云平台源码,智慧工地项目监管平台源码,智慧工地可视化数据大屏源码 智慧工地云平台是将云计算、大数据、物联网、移动技术和智能设备等信息化技术手段,聚集在建筑工地施工管理现场,围绕人员、机械、物料、环境等关键要素&…

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…

Revit SDK:AutoJoin 自动合并体量

前言 Revit 有一套完整的几何造型能力,每一个体量都是一个GenericForm,这些体量可以通过拉伸、扫掠等创建。这个例子介绍如何将他们合并成一个体量。 内容 合并体量的关键接口: // Autodesk.Revit.DB.Document public GeomCombination Com…

Java String类(1)

String类的重要性 我们之前在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据的方法分离开的方式不符合面向对象的思想&…

任务执行和调度----Spring线程池/Quartz

定时任务 在服务器中可能会有定时任务,但是不知道分布式系统下次会访问哪一个服务器,所以服务器中的任务就是相同的,这样会导致浪费。使用Quartz可以解决这个问题。 JDK线程池 RunWith(SpringRunner.class) SpringBootTest ContextConfi…

vue3项目导入异常Error: @vitejs/PLUGIN-vue requires vue (>=3.2.13)

vue3项目导入异常 1、异常提示如下: failed TO LOAD config FROM D:\ws-projects\vite.co nfig.js error WHEN STARTING dev SERVER: Error: vitejs/PLUGIN-vue requires vue (>3.2.13) OR vue/compiler-sfc TO be pre sent IN the dependency tree.2、解决办法…

excel怎么设置任意选一个单元格纵横竖横都有颜色

有时excel表格内容过多的时候,我们通过excel设置任意选一个单元格纵横,竖横背景颜色,这样会更加具有辨识度。设置方式截图如下 设置成功后,预览的效果图

Remmina在ubuntu22.04中无法连接Windows

Remmina在ubuntu22.04中无法连接Windows 问题 提示为&#xff1a; 无法通过TLS到RDP服务器… 分析 原因是Remmina需要使用openssl通过RDP加密与Windows计算机连接&#xff0c;而ubuntu22.04系统中OpenSSL版本为3.0&#xff0c;Openssl3 将 tls<1.2 和 sha1 的默认安全级别…

如何使用Unity制作一个国际象棋

LinnoChess1.0 该项目旨在做一些Unity小游戏项目开发来练练手 如果有更新建议请私信RWLinno 项目地址&#xff1a;https://github.com/RWLinno/LinnoChess 目前效果 能够正常下棋&#xff1b;能够编辑棋盘&#xff1b;能够SL棋局&#xff1b;能够记录棋谱&#xff1b;能够显…

Unity MonoBehaviour事件函数的生命周期

Unity运行时候的默认的几个函数的执行顺序&#xff1a; 首先是Awake&#xff0c;OnEnable&#xff0c;Start等&#xff0c;后面是FixUpdate Update 最后是OnDisable、OnDestroy

LNMT架构

所谓的LNMT架构 指的就是Linux操作系统上部署Nginx web服务器、MySQL数据库服务器、Tomcat中间件服务器 L linux N nginx M mysql T tomcat 单机部署 1&#xff0c;安装 apache-tomcat 2&#xff0c;移动目录 3&#xff0c;复制第二个tomcat 4&#xff0c;…

2、结构型设计模式

结构型设计模式 目录 结构型设计模式1. 代理模式1.1 概述1.2 结构1.3 静态代理1&#xff09;抽象主题类 SellTickets2&#xff09;真实主题类 TrainStation3&#xff09;代理类 ProxyPoint4&#xff09;客户端类 1.4 JDK 动态代理1&#xff09;代理工厂类&#xff1a;ProxyFact…

【Terraform学习】Terraform模块基础操作(Terraform模块)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 单链表的结构常常不完美&#xff0c;没有双向链表那么”优秀“&#xff0c;所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间&#xff01;&#xff01;&#xff01; …

RabbitMQ入门

1、RabbitMQ概念简介 RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用之间共享数据&#xff0c;RabbitMQ是使用Erlang语言来编写的&#xff0c;并且RabbitMQ是基于AMQP协议的。 AMQP协议模型 AMQP全称&#xff1a;Advanced Message Q…

2023年8月随笔之有顾忌了

1. 回头看 日更坚持了243天。 读《发布&#xff01;设计与部署稳定的分布式系统》终于更新完成 选读《SQL经典实例》也更新完成 读《高性能MySQL&#xff08;第4版&#xff09;》开更&#xff0c;但目前暂缓 读《SQL学习指南&#xff08;第3版&#xff09;》开更并持续更新…