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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迅狐矩阵系统:智能化多平台内容管理与发布

迅狐矩阵系统是一套专为提高数字内容管理和发布效率而设计的综合性解决方案。它通过一系列智能化功能,帮助用户实现多平台内容的高效管理和发布,以下是系统的几大核心优势: 多平台绑定发布 迅狐矩阵系统支持用户绑定多个平台的多个账号&…

深入浅出 Qt 中 QListView 的设计思想,并掌握大规模、高性能列表的实现方法

在大规模列表控件的显示需求中,必须解决2个问题才能获得较好的性能: 第一就是数据存在哪里, 避免出现数据的副本。第二就是如何展示Item,如何复用或避免创建大量的Item控件。 在QListView体系里,QAbstractListModel解…

1.Anaconda-创建虚拟环境的手把手教程

文章目录 介绍(必看)正文版本信息模块安装流程1.创建虚拟环境2.激活环境3.退出虚拟环境4.安装python(激活虚拟环境)5.安装tensorflow(激活虚拟环境)6.安装matplotlib7.protobuf版本太高会有问题(激活虚拟环境) 常用的指令(一定会用到&#xf…

基于C#开发web网页管理系统模板流程-主界面统计功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能,例如仓库管理系统要统计某时间段的出入库以整合利润情况,再例如论文管理系统要统计男女生的分数情况等等…

day35|1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果

文章目录 python语法记录 sort格式 1005.K次取反后最大化的数组和思路方法一方法二 按照绝对值排序 教程🎈✨ 背住 按照绝对值进行降序排序的语法是: 134. 加油站思路方法一 教程解法方法二 暴力求解 135. 分发糖果思路方法一 总结 python语法记录 sort …

那些年我看过的技术书(持续更新,大佬的成长之路)

作为一个技术人啊,要学会多看书,发展自己。哦也!你可以不关注,就把文章点个收藏吧,万一以后想看书了呢? 网络安全 CTF篇 入门篇 《极限黑客攻防:CTF赛题揭秘》 Web篇 Reserve篇 《IDApro…

Nature | 百年未变?博士评定机制该改改了!

19世纪初,德国和法国先后开始授予现代科研博士学位。时至今日,大学的科研与教学早已不同于往昔。但惊人的是,获得和评定博士学位的流程却几乎没变。但改革势在必行。 博士生导师可以从其他教育阶段的创新中学到很多东西。 Innovation in PhD…

TinyHttpd源码精读(三)

在上一章中我们一起看了如何实现静态的网页,在这里我们一起看Tinyhttpd最后的一部分,动态网页的实现:在这里首先声明下因为cgi脚本的支持问题,所以我会新建一个简单的cgi脚本然后将路径导向到这个脚本: 0.perl的配置&…

3、SLAM算法中的运动模型和观测模型和常用传感器类型

SLAM算法中的运动模型和观测模型 常用传感器类型:局部传感器(相机、IMU、激光雷达等)在小区域内提供了精确的位姿,而全局传感器(GPS、磁力计、气压计等)在大尺度环境中提供了有噪声但是全局无漂移的定位。 …

【three.js】光源对物体表面影响

目录 一、受光照影响材质 二、光源简介 2.1 点光源 光源位置 点光源辅助观察 完整代码,粘贴即用 2.2 环境光 2.3 平行光 平行光辅助观察 实际生活中物体表面的明暗效果是会受到光照的影响,比如晚上不开灯,你就看不到物体,灯光比较暗,物体也比较暗。在threejs中,…

金融数据中心布线运维管理解决方案

金融行业的核心业务,如交易、支付、结算等,对网络的依赖程度极高。布线作为网络基础设施的重要组成部分,其稳定性和可靠性直接关系到业务的连续运行。因此,良好的布线管理能够确保网络系统的稳定运行,减少因网络故障导…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后,将会出现以下对话框 : 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步,下一步: 下一步: 下一步,这里我…

encoding Token和embedding 傻傻分不清楚?

encoding 编码 “encoding” 是一个在计算机科学和人工智能领域广泛使用的术语,它可以指代多种不同的过程和方法。核心就是编码:用某些数字来表示特定的信息。当然你或许会说字符集(Unicode)更理解这种概念,编码更强调这种动态的过程。而字符…

Rejetto HTTP文件服务器 未授权RCE漏洞复现(CVE-2024-23692)

0x01 产品简介 Rejetto HTTP File Server(HFS)是一个基于HTTP协议的文件服务器软件,旨在为用户提供简单、轻量级且易于使用的文件共享解决方案。功能强大、易于使用的文件服务器软件,无论是个人使用还是团队协作,HFS都能满足用户的需求,提高工作效率。 0x02 漏洞概述 …

vue3根据按钮切换更新echarts对应的数据

效果图 初始化注意 setOption的函数定义,option是指图表的配置项和数据,notMerge是指是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。如果为 true,表示所有组件都会被删除,然后根据新option 创建所有新组件 //…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

采用java+springboot+vue+uniapp自主研发的智慧城管源码,城管综合执法平台源代码

智慧城管执法平台源码,PCAPP端全套源码,城管综合执法系统源码。 智慧城管系统拥有自主版权,项目落地案例,有演示,适合二次开发项目使用。 智慧城管执法系统旨在提高城市管理效率,涵盖了城市管理中的很多业务…

Linux kernel本地权限提升漏洞(CentOS8升级内核的解决方案)

一、CentOS8升级kernel内核的必要性 1、增强系统的安全性。 升级CentOS内核可以提供更好的安全性保障。新的内核版本通常包含了的安全补丁和漏洞修复,可以有效防止系统遭受恶意攻击,提高系统的稳定性和安全性。 2、优化硬件兼容性。 CentOS升级内核可以…

深度解析地推效果,Xinstall助您精准提升推广成效

在移动互联网时代,App的推广方式日趋多样化,其中地推作为线下推广的重要一环,因其成本相对较低、互动性强等特点,受到越来越多App厂商的青睐。然而,地推过程中往往面临着数据收集困难、获客率低、业务员费用结算标准难…

HTML5+CSS3小实例:粘性文字的滚动效果

实例:粘性文字的滚动效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…