一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理

news2025/1/7 14:06:31

文章目录

  • 一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理
  • 1.TCP建立连接需要3次握手
    • 1.1 先讲个你兄弟的故事
    • 1.2 TCP 3次握手
    • 1.2 TCP 3次握手8件事
    • 1.3 TCP握手能不能是两次
  • 2. TCP 断开连接要4次挥手
    • 2.1 还回到你兄弟的故事上
    • 2.2 TCP 4次挥手
    • 2.2 TCP4次挥手4件事
    • 2.3 TIME_WAIT的作用是啥,为什么不能直接进入CLOSED状态
    • 2.4 为什么TIME_WAIT要过2MSL才能进入CLOSEd状态
    • 2.5 tcp连接管理中的保活机制

一文大白话讲清楚TCP连接的三次握手和断开连接的四次挥手的原理

  • TCP是面向连接的协议,在传输前必须要知道接收方存在还是不存在,所以在传输数据前后要经过3次握手和4次挥手

1.TCP建立连接需要3次握手

1.1 先讲个你兄弟的故事

  • 先来个场景大白话讲一下
  • 你有一块些黄金,要卖给你的好兄弟,然后你的好兄弟收到黄金后把现金寄给你。但因为太贵重了,你们不知道对方在不在家,能不能收到
  • 所以在寄快递前,你两确认了一下
  • 第一步,你给你的好兄弟先接了一封信,问问他在不在家(这时候信寄出去以后,你处于等对方的回信)
  • 第二步,你的好兄弟给你回了一封信,告诉你他在家,但这个时候他不知道你已经知道他在家(他把信寄给你了,你处于等待回信的状态)
  • 第三步,所以你又给你的好兄弟协议了一封信,告诉他,我收到你的信了,我知道你在家了,你准备好接收。(这时候你知道他在家了,他也知道你知道他在家了)
  • 第四步,那既然都知道,就寄黄金呗。
  • 这样一来一回,你们一共发了三封信,目的就是为了明确对方在不在,要干啥。这就是TCP的两个主机之间的三次握手。只不过你是寄黄金,TCP是发数据

1.2 TCP 3次握手

  • 讲了上面的故事,相信大家应该明白了,接下来讲细节,就是我怎么寄的信,信里面有什么,你怎么回的信,信里面有什么
  1. 第一次握手,客户端给服务端发一个SYN(Synchronize Sequence Numbers:同步序列编号),并指明客户端的初始序列号ISN(Initial Sequence Number:初始序列号),此时客户端处于SYN_SENT状态
  2. 第二握手:服务器收到客户端的SYN报文后,会将自己的SYN报文发送给客户端,同时为了确认客户端的SYN,将客户端的ISN+1作为ACK(Acknowledgment character:确认字符)的值发送给客户端,此时服务端处于SYN_RCVD状态
  3. 客户端收到服务端的SYN报文后,会发送一个ACK报文,ACK的值为服务器的ISN+1.此时客户端处于ESTABLISHED状态。服务端收到ACK报文之后,也处于ESTABLISHED状态。此时,双方建立了链接
  • 上图

在这里插入图片描述

1.2 TCP 3次握手8件事

  • 说白了,如果要进行通讯,服务端要知道:自己和客户端的发送和接收能力正常;客户端要知道自己和服务端的发送和接收能力正常
  • 也就是要确定下列几件事
  1. 客户端知道自己发送能力正常
  2. 客户端知道自己接受能力正常
  3. 客户端知道服务器发送能力正常
  4. 客户端知道服务器接收能力正常
  5. 服务器知道自己发送能力正常
  6. 服务器知道自己接受能力正常
  7. 服务器知道客户端发送能力正常
  8. 服务器知道客户端接接收能力正常
  • 也就是说,通过三次握手,我们要确定这8件事
  • 那么接下来看看每次握手的作用和完成的事情
  • 一. 第一次握手,客户端发送数据包,服务端收到了;
    • 得到的结论:服务端知道客户端的发送能力正常,即7完成,服务端知道自己的接收能力正常,即6完成(67)
  • 二. 第二次握手,服务端发送数据包,客户端收到了
    • 得到的结论:在第一次握手结论的基础上,客户端知道服务端的发送能力正常,即3完成,客户端知道服务端的接收能力正常,即4完成,客户端知道客户端的接收能力正常,即2完成;客户端知道自己的发送能力正常,即1完成(123467)
  • 三. 第三次握手,客户端发送网络数据包,服务端收到了
    • 得到的结论:在第二次结论的基础上,服务端知道自己的发送能力正常,即5完成,服务端知道客户端的接收能力正常,即8完成(12345678)
      通过3次握手,确定了8件事,即确定了双方的发送和接受能力,而且确定了对方知道彼此的接收和发送能力正常;
  • 那就可以开始传输数据了

1.3 TCP握手能不能是两次

  • 通过上面的8件事我们知道,如果少一次握手,哪个第五件事和第8件事,也就是服务端无法确定客户端的接受能力正常,服务端也无法确定自己的发送能力正常。那就有可能, 服务端认为自己发了,但是客户端收不到。

2. TCP 断开连接要4次挥手

2.1 还回到你兄弟的故事上

  • 通过上面TCP连接后,你两现在一个可以把黄金一批批的寄过去了,另一个可以一批一批地把现金寄过来了。但问题是,你这边黄金总有寄完的时候吧。如果寄完了,你是不是得告诉你兄弟一声,让他知道,然后他也把剩下的钱寄给你。寄给你以后,你两两清了,就不用再来回邮寄了。
  • 那这时候咱们分析一下
  • 第一步,你这边黄金发完了,没得发了。所以你给你兄弟写了一封信,好兄弟,以后没黄金了,咱两可以不用再联系了。
  • 第二步,你兄弟收到你的来信了,知道你没黄金了,以后也不寄了,但是还差最后一批黄金的钱没给你。于是你兄弟干了两件事。先是给你回了一封信,好的兄弟我知道了。但是还有一笔没给你结,稍后我给你寄过来。如果你收到这边钱了,给我说一声。咱两就断联。于是第一件事,信寄出去了。接着第二件事,把钱寄出去
  • 第三步,你收到你兄弟最后一笔寄来的钱了,给他写信说,好兄弟我收到钱了,咱们断联。
  • 这时,如果你兄弟收到钱了,就知道你两车企两清了,不用来回邮寄了。
  • 这样一来一回,你发两封信,你兄弟发两封信,一共4封信,目的就是清算,挥手告别。所以这就是TCP的4次挥手断连

2.2 TCP 4次挥手

  • 讲了上面的故事,接下来讲细节,看看写信的时候都具体说了啥
  1. 第一次挥手:客户端发送一个FIN报文,报文中指定一个序列号。此时客户端处于FIN_WAIT1状态,就是停止发送,等待服务端确认
  2. 第二次挥手,服务端收到FIN报文后,会发送ACK报文,且把客户端的序列号+1作为ACK报文的序列号,表明已经收到客户端的报文了,此时服务端处于CLOSE_WAIT状态
  3. 第三次挥手:如果服务端发送完数据了,也会发给客户端一个FIN报文,且制定一个序列号,此时服务端处于LAST_ACK状态
  4. 第四次挥手,客户端收到FIN之后,一样发送一个ACK报文,并把服务端的序列号+1作为序列号,此时客户端处于TIME_WAIT状态、需要过一整子,确保服务端收到自己的ACK报文后才会进入CLOSED状态,服务端收到ACK报文后,就处于关闭连接,进入CLOSEd状态
  • 上图
    在这里插入图片描述

2.2 TCP4次挥手4件事

  • 说白了,告别就是在数据发完的前提下,互相知道不再发送,所以需要干完这4件事
  1. 客户端知道自己不再发送请求了
  2. 客户端知道服务器不再发送数据了
  3. 服务端知道客户端不再发送请求了
  4. 服务端知道自己不再发送数据了
  • 那么接下来看4次挥手怎么完成的这些事
  • 一,第一次挥手,客户端告诉服务器,我不在发送请求了
    • 得出结论:客户端知道自己不再发送请求了,即1完成;服务端知道客户端不再发送请求了,即3完成(13)
  • 二,第二次挥手,服务器告诉客户端,我知道你不再发送请求了,但是我可能还有数据要,等我也不发了,我再另外给你通知
    • 得出结论,客户端知道服务端知道客户端不再发送请求了
  • 三,第三次挥手,服务器告诉客户端,我不再发送数据了
    • 得出结论,客户端知道服务端不再发送数据了,即2完成;服务端知道自己不再发送数据了,即4完成(1234)
  • 四,第四次挥手,客户端告诉服务端,我收到你不再发送消息的通知了,我等你差不多收到消息(2MSL后)我就关闭了
    • 得出结论,大家都可以关闭了
  • OK,咱们断连,不再发送数据了

2.3 TIME_WAIT的作用是啥,为什么不能直接进入CLOSED状态

  • 如果没有TIME_WAIT,状态,则服务器的FIN包没有得到最后的ack确认,超时后会重传。这样会下次的新链接产生影响,可能会刚打开就收到一个重传的包,或者客户端相同的服务端发送SKY连接请求但服务器处于LAST_ACK状态,要求收到的是ack而不是SYN,因此会发送RST重新建立请求

2.4 为什么TIME_WAIT要过2MSL才能进入CLOSEd状态

  • 首先MSL是指网络中最大生存时间。
  • 为什么要等2MSL,是因为客户端发送了对服务端的FIN确认包ASK后,不能确保ACK被接收到。如果接收不到,服务器端如果接收不到ACK包就会重新发送FIN包,所以客户端发送后等2MSL的时间,如果这个时间内没有收到重新的FIN包,说明收到了,那可以关闭了。

2.5 tcp连接管理中的保活机制

  • TCP通信中,如果双方长时间没有数据往来,服务器会周期性向客户端发送探测数据报,要求客户端回复,如果连续多次没有收到响应,救人位连接已经断开。
  • 周期为75s,如果连续超过9次,则认为断开
  • 长时间未发送数据值得是超过7200s

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

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

相关文章

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错:sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作: 1、删除 C:\Users{账户}\ 文件夹中的 .npm…

Apache Celeborn 在B站的生产实践

背景介绍 Shuffle 演进 随着B站业务的飞速发展,数据规模呈指数级增长,计算集群也逐步从单机房扩展到多机房部署模式。多个业务线依托大数据平台驱动核心业务,大数据系统的高效性与稳定性成为公司业务发展的重要基石。如图1,目前在大数据基础架构下,我们主要采用 Spark、Fl…

SAP系统中的标准价、移动平均价是什么?有何区别?物料分类账的优点

文章目录 前言一、SAP系统中的价格控制二、移动平均价、标准价是什么?三、S价(标准价)的优势四、S价(标准价)的劣势五、V价(移动平均价)的优势六、V价(移动平均价)的劣势…

我的Java-Web进阶--SpringMVC

1.三层架构与MVC模式 三层架构 MVC模式 2.SpringMVC执行流程 3.SpringMVC的基本使用方法 1. 配置 1.1 Maven依赖 首先&#xff0c;在pom.xml文件中添加Spring MVC的依赖&#xff1a; <dependencies><!-- Spring MVC --><dependency><groupId>org.…

让css设置的更具有合理性

目录 一、合理性设置宽高 二、避免重叠情况&#xff0c;不要只设置最大宽 三、优先使用弹性布局特性 四、单词、数字换行处理 五、其他编码建议 平常写css时&#xff0c;除了遵循一些 顺序、简化、命名上的规范&#xff0c;让css具有合理性也是重要的一环。 最近的需求场…

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目&#xff1a;B2090 年龄与疾病输入格式输出格式输入输出样例 &#x1f4af;初始代码分析与问题排查问题点分析 &#x1f4af;修正后的代码与优化修正与优化要点 &#…

面试题解,JVM中的“类加载”剖析

一、JVM类加载机制说一下 其中&#xff0c;从加载到初始化就是我们的类加载阶段&#xff0c;我们逐一来分析 加载 “加载 loading”是整个类加载&#xff08;class loading&#xff09;过程的一个阶段&#xff0c;加载阶段JVM需要完成以下 3 件事情&#xff1a; 1&#xff0…

vue路由模式面试题

vue路由模式 1.路由的模式有哪些?有什么区别? history和hash模式 区别: 1.表现的形态不同: 在地址栏url中:hash模式中带有**#**号,history没有 2.请求错误时表现不同: 在hash模式中,对于404地址请求时,不会进行请求 但是在history模式中,对于404请求时,仍然会进行请求…

构建一个rust生产应用读书笔记7-确认邮件3

设计架构思路 从前面的学习过程中&#xff0c;我们从单一文件测试套件发展到模块化测试套件&#xff0c;并构建了一套强大的辅助工具&#xff0c;这是一个非常重要的进展。个人认为测试代码和应用代码一样&#xff0c;是一个持续进化的过程。随着项目的不断成长&#xff0c;测…

默认ip无法访问,利用dhcp功能获取ip进行访问的方法

应用场景&#xff1a; ac的默认ip如192.168.1.1在pc与ac的eth2以后网口直连无法ping通&#xff0c;而且pc改为dhcp自动获取ip也获取不到ip地址&#xff0c;无法进行web配置和命令行操作。 原因是ac或其他设备被修改了默认ip或者对应端口所属vlanid&#xff0c;现在的端口vlan…

redis的集群模式与ELK基础

一、redis的集群模式 1.主从复制 &#xff08;1&#xff09;概述 主从模式&#xff1a;这是redis高可用的基础&#xff0c;哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从服务器&#xff…

大脑特训,自信 “满格”

编辑&#xff1a;念小艺 在追求自信的漫漫长路上&#xff0c;诸多因素如同闪耀的星光&#xff0c;为人们指引着方向。保持良好的饮食习惯&#xff0c;让身体摄取充足且均衡的营养&#xff0c;为精神的饱满提供坚实后盾&#xff1b;持续投身于锻炼之中&#xff0c;在挥洒汗水的…

渗透测试-非寻常漏洞案例

声明 本文章所分享内容仅用于网络安全技术讨论&#xff0c;切勿用于违法途径&#xff0c;所有渗透都需获取授权&#xff0c;违者后果自行承担&#xff0c;与本号及作者无关&#xff0c;请谨记守法. 此文章不允许未经授权转发至除先知社区以外的其它平台&#xff01;&#xff0…

计算机的发展、计算机基本组成原理

计算机系统 软件 硬件 硬件的发展 软件的发展 低级语言&#xff1a;机器语言、汇编语言 一、早期冯诺依曼机的结构 存储程序&#xff1a;将指令以二进制代码事先输入计算机的主存储器 在计算机系统软件和硬件是等效的 软件&#xff1a;数据 程序 硬件&#xff1a; 存储器、…

公共数据授权运营系统建设手册(附下载)

在全球范围内&#xff0c;许多国家和地区已经开始探索公共数据授权运营的路径和模式。通过建立公共数据平台&#xff0c;推动数据的开放共享&#xff0c;促进数据的创新应用&#xff0c;不仅能够提高政府决策的科学性和公共服务的效率&#xff0c;还能够激发市场活力&#xff0…

[极客大挑战 2019]HardSQL 1

看了大佬的wp&#xff0c;没用字典爆破&#xff0c;手动试出来的&#xff0c;屏蔽了常用的关键字&#xff0c;例如&#xff1a;order select union and 最搞的是&#xff0c;空格也有&#xff0c;这个空格后面让我看了好久&#xff0c;该在哪里加括号。 先传入1’ 1试试&#…

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling&#xff08;事件处理&#xff09;3. Multitasking&#xff08;多任务处理&#xff09;4. Push Notifications&#xff08;推送通知&…

STM32烧写失败之Contents mismatch at: 0800005CH (Flash=FFH Required=29H) !

一&#xff09;问题&#xff1a;用ULINK2给STM32F103C8T6下载程序&#xff0c;下载方式设置如下&#xff1a; 出现下面两个问题&#xff1a; 1&#xff09;下载问题界面如下&#xff1a; 这个错误的信息大概可以理解为&#xff0c;在0x08000063地址上读取到flash存储为FF&am…

使用命令行管理git项目

# 初始化一个新的Git仓库 git init # 添加文件到暂存区 git add <file> # 提交暂存区的更改到仓库 git commit -m "commit message" # 查看当前仓库的状态 git status # 查看提交历史 git log # 查看文件的改动 git diff <file> # 创建一个新…

论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models

1.abstract 最近推出的3D高斯飞溅(3DGS)&#xff0c;它用多达数百万个原始椭球体来描述场景&#xff0c;可以实时渲染。3DGS迅速声名鹊起。然而&#xff0c;一个关键的悬而未决的问题仍然存在&#xff1a;我们如何将多个3DG融合到一个连贯的模型中&#xff1f;解决这个问题将使…