TCP四次挥手全过程详解

TCP四次挥手全过程

在这里插入图片描述

有几点需要澄清:

1.首先,tcp四次挥手只有主动和被动方之分,没有客户端和服务端的概念

2.其次,发送报文段是tcp协议栈的行为,用户态调用close会陷入到内核态

3.再者,图中的情况前提是双方程序正常运行,程序在挥手过程中崩溃的情况后面会讲到

过程详解(时间顺序)

1.A程序调用close关闭连接,陷入到内核态,tcp协议栈发送fin报文段,此时A进入fin_wait1状态,等待B的ack回复

2.B的tcp协议栈接收到fin报文,回复ack,进入close_wait状态,等待B的用户态程序调用close

3.A的tcp协议栈接收到ack,进入半关闭状态(B->A的单向通信)

4.A进入半关闭的同时,进入fin_wait2状态,等待B发送fin报文

分析B程序的状态:A发送fin报文(将标志位fin置1),B的协议栈接收并判断为fin报文,向该条连接的tcp控制块的接收缓冲区(在内核)写入EOF结束符,B程序调用recv返回0,判断对方断开连接

5.B程序判断A请求断开连接,正常的逻辑是B也调用close断开连接

6.B调用close,陷入到内核态,tcp协议栈发送fin报文,B进入last_ack状态,等待A的ack

7.A收到B的fin报文,结束fin_wait2状态,回复ack,进入time_wait状态

8.B收到A的ack后,断开连接

9.A在time_wait规定的2MSL时间到期时断开连接

状态详解

1.close_wait状态:被动断开方发送ack回复主动方的fin后进入close_wait状态,因为对方已经请求断开连接,本端也要进入断开连接的流程,而断开连接是由用户态程序控制的,在这个状态下,等待程序调用close陷入到内核态,协议栈才能发送本方的fin报文

如果被动方程序一直不调用close,该tcp连接会处于半关闭状态

2.fin_wait1和fin_wait2:1是主动方发送fin后等待ack的状态,2是等待对方发送fin的状态

重点!

3.time_wait状态:主动断开连接方在发送ack回复被动方的fin后进入time_wait状态,这个状态的内容就是等待2MSL的时间,随后关闭连接。

MSL是最大报文生存时间,在传输中超过此时间的报文会失效

等待2MSL时间的原因:

a.在进入time_wait前,有延迟未到达A的报文,最晚会在1MSL后到达,而在A进入time_wait状态时,B已经发送fin,不会在time_wait后有新的来自B的报文,第一个MSL可以确保网络中所有滞留的报文正确A被接收

b.在A向B发送fin后进入time_wait状态,如果该fin丢失或超时导致B没有收到fin,B会重传一个fin报文,告诉A需要重发fin报文。

最坏情况:在B重传fin时,过去了1MSL,A最晚接收到该fin并重发ack的时间是在B重传fin的1MSL后

所以,第二个MSL保证了最坏情况下A可以重发第二个ack给B,以处理B没有收到第一次ack的情况,大部分情况下,A可以处理并重发B的多个重发的fin

time_wait状态通过等待2MSL确保了:

1.所有在网络中滞留的旧报文段在此期间会被自然丢弃。

2.确保重传机制有足够的时间处理任何潜在的重传报文,如FIN和ACK报文。

3.防止旧的报文段干扰未来的连接。

特殊情况

一、A处于time_wait状态时,当B没有接收到第一次的ack时重发fin,A会在2MSL内收到这个重发的fin并重发ack,如果B一直没收到ack怎么办?

Q:如果B没有接收到A重发的ack怎么办?此时A已经关闭连接,B不会再接收到ack,那么B该怎么关闭连接?

A:如果主机B没有收到主机A的ACK,它会继续按照TCP的重传机制定期重传FIN报文,直到重传次数达到设定的上限(通常是TCP实现中的一个参数,RFC 1122规定是最多重传4次,每次重传都会等待一个时间间隔。这个时间间隔通常会指数增长(即所谓的“指数退避”))

A在TIME_WAIT状态下会处理这些重传的FIN报文,并每次都重新发送ACK报文(1-4个,最坏情况下只能重发一次ack)

B在重传次数耗尽之后,如果仍未收到ACK报文,它会认为连接已经关闭并释放资源

二、在四次挥手过程中发生:1.主动断开方的程序崩溃 2.被动断开方的程序崩溃

一言以蔽之:协议栈会关闭该程序所有套接字并发送RST(reset)报文给对方,表示连接非正常关闭,收到RST报文的一方会通过recv和errno获知

前置细节

1.在关闭TCP连接时,如果操作系统检测到连接正在进行中(比如在ESTABLISHEDFIN_WAITCLOSE_WAIT等状态),它会发送RST报文给对方,通知对方连接被异常终止

2.对端在接收到RST报文后,会在后续的网络操作中感知到连接被重置:

  • 对端的系统调用错误
    • 对端的应用程序如果尝试在接收到RST报文后继续进行网络操作,会在相应的系统调用中收到错误。
    • 这些系统调用会返回错误,并设置errno。例如,如果对端调用recv,会返回-1,并设置errnoECONNRESET,表示连接被重置。
详细分析

1. 主动断开方的程序崩溃

情景:
  • 主动断开方(主机A)发送了FIN报文,进入FIN_WAIT_2状态,等待被动断开方(主机B)发送FIN报文来完成连接的关闭。
  • 主机A的程序在此时崩溃。
结果:
  • 主机A的TCP连接关闭:
    • 主机A的程序崩溃导致操作系统关闭该程序相关的所有套接字,包括处于FIN_WAIT_2状态的套接字。
    • 主机A的TCP栈会发送RST(Reset)报文给主机B,表示连接已被非正常关闭。
  • 主机B的处理:
    • 主机B收到RST报文后,立即终止连接并释放相关资源。
    • 任何在此连接上的未完成数据传输都将被终止,应用程序将收到错误通知,表明连接被重置。

2. 被动断开方的程序崩溃

情景:
  • 被动断开方(主机B)在接收到主机A的FIN报文后,发送ACK并进入CLOSE_WAIT状态,等待应用程序调用close以发送FIN报文。
  • 主机B的程序在此时崩溃。
结果:
  • 主机B的TCP连接关闭:
    • 主机B的程序崩溃导致操作系统关闭该程序相关的所有套接字,包括处于CLOSE_WAIT状态的套接字。
    • 主机B的TCP栈会发送RST(Reset)报文给主机A,表示连接已被非正常关闭。
  • 主机A的处理:
    • 主机A收到RST报文后,立即终止连接并释放相关资源。
    • 主机A的应用程序会收到错误通知,表明连接被重置。

总结:

无论是主动断开方还是被动断开方的程序崩溃,最终结果都是TCP连接被非正常关闭,两者的TCP栈会发送RST报文给对方,通知对方连接已被重置。收到RST报文的一方会立即终止连接并释放相关资源。应用程序会收到相应的错误通知,表明连接被异常终止。

推荐学习 https://xxetb.xetslk.com/s/p5Ibb

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

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

相关文章

【递归、搜索与回溯】穷举vs暴搜vs深搜vs回溯vs剪枝

穷举vs暴搜vs深搜vs回溯vs剪枝 1.全排列2.子集 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 管他什么深搜、回溯还是剪枝,画出决…

使用API有效率地管理Dynadot域名,创建文件夹管理域名

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

李廉洋:6.11黄金原油持续震荡上行,今日行情走势分析策略。

黄金消息面分析:上周黄金市场的走势受到了PCE通胀数据和美联储政策预期的显着影响。尽管市场对黄金的长期看涨情绪依然存在,但短期内金价的波动性预计将持续。4月份的PCE通胀数据显示价格压力有所降温,这一结果与分析师预期一致,但…

分享一些班组长日常管理工作的经验

在企业管理中,班组长作为基层的管理者和执行者,扮演着至关重要的角色。他们不仅要确保生产任务的顺利完成,还要负责团队建设、员工激励和沟通协调等工作。本文,深圳天行健精益管理咨询公司旨在分享一些班组长日常管理工作的经验&a…

【c语言】文件操作,解开你的疑惑

文件操作 为什么使用文件什么是文件文件的分类文件名 二进制文件和文本文件文件的打开与关闭流与标准流流标准流 文件指针文件的打开与关闭 文件的顺序读写文件的随机读写文件读取结束的判定文件缓冲区 为什么使用文件 我们程序运行的数据是运行在内存中的,当成程序…

品牌渠道健康发展的关键与方法

一个品牌的渠道健康与否对其长期发展至关重要。品牌虽多,但并非所有产品都能成为品牌,创建品牌需大量精力,而让品牌长久健康发展则需多方面努力。 力维网络服务众多知名品牌,总结出一些渠道治理方法供品牌参考。首先,管…

分享5款让大家电脑更好用的软件

​ 电脑是我们日常生活和工作中不可缺少的工具,今天给大家推荐了五款让电脑更好用的软件。 1.系统清理——CCleaner ​ CCleaner是一款系统优化和隐私保护工具,可以清理无用文件、浏览器缓存、回收站内容等,释放磁盘空间,提升系…

【linux网络(二)】网络基础之套接字编程

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 端口号详…

任何成为一名优秀的AI产品经理,看完这篇就懂了

(背景:之前做AI咨询,对接公司内部AI产品经理经理,外部也对接过很多甲方AI产品经理。后来出来也拿过好几家公司AI产品经理的offer) 1.AI产品经理是什么 回答这个问题前我们首先得理清楚什么是AI产品经理,它和传统的互…

半导体光电子学最后总结(3)光子晶体

Matrix theory 波传输矩阵 (Wave-Transfer Matrix) 散射矩阵 (Scattering Matrix) 光在均匀介质中的传播公式矩阵化 Relation between Scattering Matrix and Wave-Transfer Matrix 级联系统的投射/反射系数:艾里公式 (Airy Formulas) 无损对称系统 斜入射波的传输…

❤vue2项目webpack打包的优化策略

❤ vue2项目webpack打包的优化策略 (优化前) 现在我们的打包时间为: >打包体积大小为: 1、去除开发环境和生产环境提示以及日志 开发环境和生产环境的打印处理 生产环境去除console.log打印的两种方式 通过环境变量控制co…

终成大流:CDM+AI彻底重塑数据备份市场

进入2024年,CDM市场又迎来高光时刻。 先有Cohesity上演“蛇吞象”并购Veritas数据备份与数据管理业务,并在新一轮融资中获得IBM、NVIDIA两大巨头的战略投资;后有Rubrik获得资本市场认可,以64亿美元市值成功登陆纽交所。两大CDM明…

免费!快速!干货!手把手教你如何在个人电脑上搭建你自己的大模型服务!

大模型发展如火如荼,虽然大模型的能力强大,但是大模型也是非常昂贵的!不管是训练还是推理,都需要耗费大量的机器,而且机器的硬件资源,比如GPU、TPU等都有一定的要求。 因此,业界的同行们&#x…

Lua搭建网站后台教程

本文讲解如何使用二进制发布包和FastWeb网站管理工具搭建站点 FastWeb网站管理工具 使用该工具可快速在Windows平台部署。支持官方或三方模块的自动安装、日志调试、版本更新等。 1、下载最新版本压缩包 2、解压到任意目录(建议英文) 3、运行 ①点击 [设置]->[安装] 部…

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia-boot-iso/,查看最新版…

[手游] 三色绘恋S Mobile Link

语音合成TTS: 文字转成语音的工具 WPS免登录一键修改器: 去除烦人的登录且能正常使用 故事简介: 深秋的雨季即将到来,正值那个为人所熟知的故事发生的前一年—— 地点:湖北省的重点高中,武汉师贰高校。 新学年开始,各…

LeetCode | 2879.显示前三行

在 pandas 中,可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行,可以在 head() 方法中传入一个参数 n,读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

前沿重器[49] | 聊聊搜索系统2:常见架构

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

分布式高性能计算 (HPC)的工作负载管理平台和作业调度程序—— IBM Spectrum® LSF® Suites

IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用,该功能可在 IBM Cloud 上为基于 IBM Spectrum LSF 的集群供应和配置资源。 借助我们针对任务关键型 HPC 环境的集成解决方案&#xff0…

弘君资本股市资讯:增逾20倍!百亿细分龙头利好来了

5月以来,A股进入了时间短的成绩发表空档期,而百亿化工细分龙头齐翔腾达,则以一份高增的成绩预告,摆开半年报成绩预告发表序幕。 6月10日晚间,齐翔腾达发表的成绩预告显现,上半年估计完成归母净赢利1.3亿元…