TCP为什么需要四次挥手?
tcp为什么需要四次挥手?
答案有两个:
1.将发送fin包的权限交给被动断开发的应用层去处理,也就是让程序员处理
2.接第一个答案,应用层有了发送fin的权限,可以在发送fin前继续向对端发送消息
为了搞清楚这个问题,我们先要了解四次挥手的过程:

1.注意事项
- tcp四次挥手过程中没有客户端和服务端的概念,只有主动方和被动方之分
- 所有的ack包不会自动重传,如果ack包超时或丢失,通过对端重发fin来解决
2.四次挥手的开始条件
- 主动断开方调用shutdown,关闭读端
- 主动断开方调用shutdown,关闭写端
- 主动断开放调用close,关闭读端和写端
- 主动断开放程序崩溃,关闭双端,协议栈发送RST包
3.第一次挥手详解
- 主动断开放触发四个条件之一,协议栈会在内核态发送fin包
- 如果超时时间内未收到ack,协议栈会重发fin
- 如果由于程序崩溃,协议栈只发送一次RST包,进入快速关闭流程
4.第二次挥手详解
- 主动关闭方发送fin,向被动方的读缓冲区写入eof结束符,被动方收到可读事件,read返回值为0
- 被动断开方根据read返回值0判断对方请求关闭连接,但并不知道对方有没有关闭读端
- 被动断开方可以选择继续发送数据,如果对方关闭读端则数据丢失
- 直到被动断开放的应用层代码调用close或shutdown或程序崩溃,协议栈会自动发送fin或RST包
5.RST(连接重置)详解
- 协议栈发送RST是在本端tcp连接非正常断开时进行的
- 任意一方发送RST或接收到RST都会进入快速关闭流程,释放相应的资源,然后关闭连接
为什么是四次挥手?
- 如果是三次挥手,那么可能的情况是:
- 第二次和第三次挥手合并,也就是和tcp连接的三次挥手类似,被动方接收到fin后,协议栈自动发送ack+fin包
- 三次挥手合并了第二和第三次挥手,最大的不同是:fin由协议栈自动发送,应用层没有权限控制
- 如果使用三次挥手,那么被动方在发送fin前无法继续发送消息,而且在程序运行过程中进入tcp连接关闭流程,程序员可能并不知道tcp连接关闭的发生,这对代码逻辑有很大的挑战
以上是我个人的理解,下面是gpt-4o的解释:
为什么不能是三次挥手
- 可靠性要求:
- TCP协议要求每个FIN和ACK都要独立确认,以确保每一方向另一方清楚地通知了自己的关闭意图。
- 将ACK和FIN合并在一个包里可能会导致确认过程的不可靠。如果ACK和FIN合并在一个包中,这个包丢失了,将难以确定是否是ACK还是FIN丢失,需要重新发送哪个包。
- 流量控制和数据传输的分离:
- 接收FIN包意味着对方已经完成数据发送,但并不意味着接收方也已经完成数据发送。
- 被动关闭方可能在接收到FIN包后还有数据需要发送,所以它需要有时间处理和发送剩余的数据。
- 单独的ACK包确保了被动关闭方有时间处理这些数据,而不是立即发送FIN包。
- 避免状态混淆:
- 四次挥手的流程清晰地分离了不同的状态:接收FIN、确认FIN、发送FIN、确认关闭。
- 这种状态分离可以避免在不同阶段的混淆,确保每一步都清楚且明确。
例子解释
如果采用三次挥手,将第二次和第三次挥手合并,情况如下:
- 主动关闭方发送FIN。
- 被动关闭方接收FIN并发送ACK+FIN。
- 主动关闭方接收ACK+FIN,发送ACK,进入TIME_WAIT。
这种情况下:
- 如果ACK+FIN包丢失,主动关闭方无法区分是ACK还是FIN丢失,需要重新发送哪个包。
- 被动关闭方在接收到FIN后立即发送ACK+FIN,可能会丢失未发送完的数据。
- 主动关闭方在接收到ACK+FIN后立即发送ACK并进入TIME_WAIT,可能会导致被动关闭方的数据传输被中断。
结论
四次挥手设计的目的是确保每个关闭步骤都得到确认,保证连接的可靠性和完整性。虽然理论上可以考虑三次挥手,但那样会增加丢包情况下的复杂性和不确定性,违背了TCP协议设计的初衷。四次挥手虽然多了一步,但提供了更高的可靠性和明确的状态分离,有助于实现稳定和可靠的连接关闭过程。
那样会增加丢包情况下的复杂性和不确定性,违背了TCP协议设计的初衷。四次挥手虽然多了一步,但提供了更高的可靠性和明确的状态分离,有助于实现稳定和可靠的连接关闭过程。
推荐学习 https://xxetb.xetslk.com/s/p5Ibb
相关文章:
TCP为什么需要四次挥手?
tcp为什么需要四次挥手? 答案有两个: 1.将发送fin包的权限交给被动断开发的应用层去处理,也就是让程序员处理 2.接第一个答案,应用层有了发送fin的权限,可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…...
MySQL 索引相关基本概念
文章目录 前言一. B Tree 索引1. 概念2. 聚集索引/聚簇索引3. 辅助索引/二级索引4. 回表5. 联合索引/复合索引6. 覆盖索引 二. 哈希索引三. 全文索引 前言 InnoDB存储引擎支持以下几种常见索引:BTree索引,哈希索引,全文索引 一. B Tree 索引…...
Neutralinojs教程项目实战初体验(踩坑指南),干翻 electron
Neutralinojs 项目实战初体验(踩坑指南),干翻 electron Neutralinojs 官方文档 卧槽卧槽,!这个年轻人居然用浏览器把电脑关机了_哔哩哔哩_bilibili正是在下 本教程搭建的是纯原生项目,没有和其它前端框架…...
【轻松拿捏】Java-List、Set、Map 之间的区别是什么?
List、Set、Map 之间的区别是什么? 一、List 二、Set 三、Map 🎈边走、边悟🎈迟早会好 一、List 有序性:List 保持元素的插入顺序,即元素按添加的顺序存储和访问。允许重复:List 可以包含重复的元素。…...
用户史订单查询业务
文章目录 概要整体架构流程技术细节小结 概要 在电商、金融、物流等行业中,用户历史订单查询是一项常见的业务需求。这项功能允许用户查看他们过去的交易记录,包括但不限于购买的商品、服务详情、交易金额、支付状态、配送信息等。对于企业而言…...
第8节课:CSS布局与样式——掌握盒模型与定位的艺术
目录 盒模型:网页布局的基础盒模型的属性盒模型的示例 定位:控制元素位置定位的类型定位的示例 实践:使用CSS布局创建响应式网页结语 CSS布局是网页设计中的基石,它决定了网页元素的排列和分布。盒模型和定位是CSS布局中的两个核心…...
electron 主进程和渲染进程
最近在整理electron 相关的项目问题,对自己来说也是温故知新,也希望能对小伙伴们有所帮助,大家共同努力共同进步。加油!!!! 虽然最近一年前端大环境不好,但是大家还是要加油鸭&#…...
redis的高可用及性能管理和雪崩
redis的高可用 redis当中,高可用概念更宽泛一些。 除了正常服务以外,数据量的扩容,数据安全。 实现高可用的方式: 1、持久化 最简单的高可用方法,主要功能就是备份数据。 把内存当中的数据保存到硬盘当中。 2、主…...
php基础语法
文章目录 1. PHP(1) 安装php 2. 基础语法(1) 格式(2) 输出语法(3) 注释(4) 变量(无变量类型自动识别)(5) 输入获取(6) 定界符(7) 换行 3. 基本数据类型(1) 字符串(2) 整数(3). 浮点数(4). boolean类型(5). 数组(6). null值 4. 运算符(1) 算术运算符(2) 比较运算符(3) 逻辑运算符…...
js抓取短信验证码发送
油猴(Tampermonkey)是一个流行的浏览器扩展,它允许用户在浏览器中运行自定义的JavaScript脚本。下面是一个简单的示例脚本,用于收集网站上发送短信验证码的API请求,并以JSON格式存储这些信息。请注意,这个脚本需要根据实际网站的API请求进行调整,因为不同的网站可能有不…...
视频怎么加密?常见的四种视频加密方法和软件
视频加密是一种重要的技术手段,用于保护视频内容不被未经授权的用户获取、复制、修改或传播。在加密过程中,安企神软件作为一种专业的加密工具,可以发挥重要作用。 以下将详细介绍如何使用安企神软件对视频进行加密,并探讨视频加密…...
聚焦全局应用可用性的提升策略,详解GLSB是什么
伴随互联网的快速发展和全球化趋势的深入,企业对网络应用的需求日渐增长。为满足全球范围内用户大量的访问需求,同时解决容灾、用户就近访问以及全球应用交付等问题,GLSB(全局负载均衡)也因此应运而生。那么GLSB是什么…...
无水印下载视频2——基于tkinter完成头条视频的下载
在数字化时代的浪潮中,视频内容以其丰富性和便捷性,逐渐成为了我们获取信息和娱乐的重要途径。尤其是在短视频平台上,各种创意十足、内容精彩的视频层出不穷,更是吸引了数以亿计的用户。然而,随着视频内容的增加&#…...
Java学习Day17:基础篇7
继承 Java中的继承是面向对象编程中的一个核心概念,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。继承提高了代码的复用性,使得我们不必从头开始编写所有的代码&a…...
Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步
介绍 提供跨组件和页面的共享状态能力,作为Vuex的替代品,专为Vue3设计的状态管理库。 Vuex:在Vuex中,更改状态必须通过Mutation或Action完成,手动触发更新。Pinia:Pinia的状态是响应式的,当状…...
手撕数据结构02--二分搜索(附源码)
一、理论基础 二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。 二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小…...
单片机工程师继续从事硬件设计还是涉足 Linux 开发?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 怎么说呢,感觉绝…...
《昇思25天学习打卡营第25天|第28天》
今天是打卡的第二十八天,实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer(ViT)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析(…...
Flutter Dio网络请求报错FormatException: Unexpected character
最近开发Flutter项目,网络请求采用的是Dio框架,在发起网络请求的时候报错: 网络请求返回的数据为: var returnCitySN {"cip": "127.0.0.1", "cid": "00", "cname": "未…...
关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)
注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…...
案发现场时空回溯:UWB无法全域留痕,无感定位全链路可复盘
案发现场时空回溯:UWB无法全域留痕,无感定位全链路可复盘镜像视界浙江科技有限公司,作为数字孪生、视频孪生领域底层原创技术核心供给方,依托国家十四五重点课题专项研究、镜像视界浙江普陀时空大数据应用技术联合研究院深度产学研…...
在线语音工具大比拼:顶伯胜在哪?
🎯 在线语音工具大比拼:顶伯、剪映、配音阁、讯飞,微软 TTS 版胜在哪?在内容创作日益多元的今天,语音合成工具已成为视频博主、教育从业者、有声书制作者不可或缺的伙伴。市面常见的选项包括剪映内置配音、配音阁、讯飞…...
Windows右键菜单终极清理指南:用ContextMenuManager告别杂乱,重获高效桌面
Windows右键菜单终极清理指南:用ContextMenuManager告别杂乱,重获高效桌面 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为Windows…...
22. 与 React 集成
22. 与 React 集成 1. 概述 TypeScript 与 React 的集成是现代前端开发的标准实践。TypeScript 为 React 组件提供了类型安全,帮助在编译时发现错误,提升开发体验和代码质量。 ┌───────────────────────────────────…...
基因鉴定步骤及常见问题
一、基因组 DNA 提取(一)消化鼠尾消化液配方为溶剂水与SDS、酶。Solution:0.5%SDS破坏细胞膜和核膜,释放DNA。Enzyme:1 mg/ml蛋白酶K分解样本中的蛋白质,释放DNA。(二)样品处理1、小…...
抖音小店搜索排名规则及优化方法
一、抖音商城搜索排名规则1.商品相关性:商品标题、关键词与用户搜索词的匹配程度是重要因素。精准匹配的商品会在搜索结果中更靠前展示。例如,用户搜索"夏季连衣裙”,标题中明确包含该关键词且商品属性也相符的连衣裙,会优先被展示。商品…...
机器人路径规划:安全性与最优性的平衡算法解析
1. 路径规划中的安全性与最优性平衡难题在机器人导航领域,路径规划算法始终面临一个核心矛盾:如何同时保证路径的最优性和安全性。传统A*算法追求最短路径,却常常让机器人贴着障碍物边缘行走;而基于Voronoi图的规划方法虽然能最大…...
跨平台网络资源下载神器:res-downloader高效抓包实战指南
跨平台网络资源下载神器:res-downloader高效抓包实战指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在当今数…...
2026年转型风口:理发店转战植物染发,能占据市场前10%吗?
2026年,理发店转型的风口已经悄然来临。据数据显示,植物染发和养护市场增速保持在15%以上,而白发脱发人群的比例不断增大,这无疑给众多理发店提供了巨大的转型机会。本文将通过具体的数据、案例和观点,探讨理发店转型植…...
通过Taotoken的CLI工具一键配置开发环境与API密钥
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken的CLI工具一键配置开发环境与API密钥 对于需要接入多个大模型服务的开发团队而言,统一管理API密钥和端点配…...
