TCP核心机制之连接管理详解(三次握手,四次挥手)
目录
前言:
建立连接
建立连接主要两个TCP状态:
断开连接
断开连接的两个重要状态
小结:
前言:
TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。
建立连接
首先明确连接的概念:Socket明确对方Socket对象(互相明确,建立认同关系),建立连接。断开连接就是删除内核中对于对端数据存储的空间。
TCP建立连接的过程称为 “三次握手”,断开连接的过程称为 “四次挥手”。每一次通信称为一次握手或者挥手。
注意:建立连接发起的报文称为同步报文段,TCP报头中标志位用SYN表示。

注意:
所谓三次握手本质上是四次,通信双方互相发送建立连接的请求SYN,互相都回应一个ACK。
这里将中间两次通信的过程合并为了一次。是因为当接收方接收到SYN,需要返回应答报文ACK和连接请求SYN。由于这两步都是在内核中完成的,发送的时机一致,因此就将它们合并为一个报文发送了。也就是三次握手。
三次握手另外一个重要作用:
验证通信双方各自的发送能力和接收能力是否正常。因为三次握手已经实现了通信双方的请求和响应。
注意:
三次握手也一定程度上保证了TCP的可靠性,但只是辅助作用(核心是:确认应答,超时重传)。
三次握手的意义:
1)让通信双方各自建立对对方的“认同”。
2)验证通信双方各自的发送能力和接收能力是否正常。
3)在握手的过程中,双方协商一些重要参数。
建立连接主要两个TCP状态:
1)LISTEN(服务器状态)
表示服务器已经准备就绪,随时可以进行连接。
2)ESTABLISHED(客户端,服务器都有)
连接建立完成,接下来可以通信了。
断开连接
通过四次挥手断开连接。
注意:FIN为结束标志,意味着这个报文为断开报文。TCP报头标志位也有体现。

注意:
很清楚看到四次挥手的中间两次通信没有合并。由于发送断开连接其实就是Socket的close方法或者进程结束,就会触发Socket发送FIN报文段。当客户端发送断开连接的请求,服务端返回ACK,这个过程是操作系统内核实现的。两者的执行时机不同,就不能合并。
断开连接的两个重要状态
1)CLOSE_WAIT(出现在被动断开的一方)
等待关闭(等待Socket执行close方法)
2)TIME_WAIT(主动发送断开连接的一方)
如果一切顺利,客户端进入TIME_WAIT状态。四次挥手已经挥完了。
存在一个问题:
最后一次挥手ack如果丢包了,超时重传就会重新发送。如果已经断开了,就会无法接收FIN返回ACK。因此设置一个断开等待时间(2MSL)就算丢包了,也会顺利的进行超时重传。
MSL为互联网上,最长两个节点,数据传输消耗的最大时间。通常为60s。这里设置2MSL的等待时间,就是由于发送一个ACK且接收一个FIN最大时间也就2MSL。因此重传的时间一定小于2MSL。
小结:
三次握手和四次挥手形象的体现了TCP连接和断开的过程,让我们仔细的去思考和理解。
相关文章:
TCP核心机制之连接管理详解(三次握手,四次挥手)
目录 前言: 建立连接 建立连接主要两个TCP状态: 断开连接 断开连接的两个重要状态 小结: 前言: TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念:…...
前端—环境配置
前端开发建议用 Google Chrome 浏览器 vscode https://code.visualstudio.com 1、open in browser 插件:可以在 vscode 中直接运行查看浏览器效果 2、Live Server 插件:可以使代码修改浏览器页面实时刷新。 用户代码片段 … JavaScript 与 TypeScri…...
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象📗理解一📘理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法🌸I …...
Java集合:Map的使用
1.Map框架l----Map:双列数据,存储key-value对的数据 ---类似于高中的函数: y f(x)|----HashMap:作为Map的主要实现类, 线程不安全的,效率高;可以存储null的key和value|----LinkedHashMap:保证在遍历map元素时,可以按照…...
【Datawhale图机器学习】第一章图机器学习导论
图机器学习导论 学习路径与必读论文清单 斯坦福CS224W(子豪兄中文精讲)知识图谱实战DeepwalkNode2vecPageRankGNNGCNGragh-SAGEGINGATTrans-ETrans-R 图无处不在 图是描述关联数据的通用语言 举例 计算机网络新冠肺炎流行病学调查传播链食物链地铁图…...
window 配置深度学习环境GPU
CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…...
VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Cod…...
【Python】网络爬虫经验之谈
爬虫经验之谈对爬虫的认识网站分析技术选型JS逆向反爬机制结语近段时间,因为工作需要做一些爬虫的开发,分享一下走过的坑和实战的经验吧!对爬虫的认识 F12查看的网络请求,找到相应的接口查看一下json数据来源和构造。我爬取的网站…...
数学建模美赛【LaTeX】公式、表格、图片
数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包,对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令,通过这些命令可以实现对于一类对象(如数学公式等)的统一排版&a…...
【大数据】YARN节点标签Node Label特性
简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…...
C# SolidWorks二次开发 API-命令标签页的切换与按钮错乱问题
这是一个网友咨询的问题,说他想控制默认打开文件之后solidworks上方工具栏的当前激活标签页。 之前我们提到过,制作Solidworks的插件也会在上面增加一个标签页,用来放自己开发的命令,经常开发的人肯定会遇到有时候更新版本,或者标…...
ElasticSearch 7.6.1
疑问 ES为什么这么快? 全文检索 听过一个程序扫描文本的每一个单词,针对单词建立索引,并保存该单词在文本中的位置,以及出现的次数。在检索查询时候,通过建立好的索引进行查询,将索引中单词对应的文本位…...
Linux系列 操作系统安装及服务控制(笔记)
作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.操作系统 1.Linux系统三大类 (1)ubu…...
Linux基础 - NTP时间同步
🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『Linux基础』 🌌上期文章: Linux基础 - DNS服务进阶 📰如觉得博主文章写的不错或对你有所帮助…...
golang 入门教程:迷你 Twitter 后端
请记住,这个项目主要是为了稍微熟悉下Golang,您可以复制架构,但该项目缺少适当的 ORM,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...
CPP2022-30-期末模拟测试03
6-1 引用作函数形参交换两个整数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。 裁判测试程序样例: #include <…...
华为OD机试真题Python实现【最多等和不相交连续子序列】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...
二叉搜索树
1.二叉搜索树 1.1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有一下性质的二叉树。 若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上的所有节点的值都…...
数据结构(三):集合、字典、哈希表
数据结构(三)一、集合(Set)1.封装一个集合类2.集合常见的操作(1)并集(2)交集(3)差集(4)子集二、字典(Map)三、…...
Linux内核驱动开发(一)
Linux内核初探 linux操作系统历史 开发模式 git 分布式管理git clone 获取git push 提交git pull 更新 邮件组 mailing list patch 内核代码组成 Makfile arch 体系系统架构相关 block 块设备 crypto 加密算法 drivers 驱动(85%) atm 通信bluet…...
2026年智慧景区一体化平台服务商精选指南
一、行业背景与筛选逻辑《2025-2026中国智慧旅游发展报告》显示,2025年国内智慧景区市场规模达326亿元,年复合增长率25.6%。但68%的景区面临系统割裂、会员不通、二次消费偏低的核心痛点,全域旅游平台成为数字化转型关键。本文基于技术实力、…...
当Pwn题遇上Seccomp沙箱:手把手教你用SROP绕过LilCTF ret2all的write限制
突破Seccomp沙箱:SROP技术在CTF Pwn题中的高阶应用 在CTF竞赛中,Pwn题目常常会设置各种限制条件来增加挑战难度,其中Seccomp沙箱是最常见的防护手段之一。当遇到禁用关键系统调用(如write)的沙箱环境时,传统…...
JavaWeb前后端交互实战:从Servlet到Axios的完整避坑指南
JavaWeb前后端交互实战:从Servlet到Axios的完整避坑指南 1. 现代Web开发中的前后端交互演进 在当今的Web应用开发中,前后端分离架构已成为主流趋势。这种架构模式下,前端负责用户界面展示和交互逻辑,后端专注于业务逻辑和数据处理…...
FLUX.小红书极致真实V2实战应用:为小红书笔记自动生成封面+内页配图
FLUX.小红书极致真实V2实战应用:为小红书笔记自动生成封面内页配图 重要提示:本文介绍的FLUX.小红书极致真实V2工具为本地部署方案,无需网络连接,所有图像生成均在本地完成,确保数据隐私和安全。 1. 工具简介ÿ…...
别再折腾网络了!实测用Docker拉取Autoware镜像的几种靠谱方法(附完整代理配置)
高效获取Autoware Docker镜像的实战指南 引言 在自动驾驶开发领域,Autoware作为开源的自动驾驶软件栈,已经成为众多研究者和工程师的首选工具。然而,对于国内开发者而言,获取Autoware的Docker镜像往往成为项目启动的第一道门槛。本…...
深度学习项目训练环境惊艳效果:同一镜像下AlexNet/VGG/ResNet/EfficientNet对比训练
深度学习项目训练环境惊艳效果:同一镜像下AlexNet/VGG/ResNet/EfficientNet对比训练 你是不是也遇到过这样的烦恼?想复现一个经典的深度学习模型,光是配环境就花了大半天,各种版本冲突、依赖缺失,最后代码还没跑起来&…...
PDF补丁丁实战指南:从文档难题到高效解决方案的全流程掌握
PDF补丁丁实战指南:从文档难题到高效解决方案的全流程掌握 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https:…...
SolidWorks 异形孔向导 - 孔
(命令属性)类型【值】暗销孔【经验】一般销钉孔大小都是整数。【示例】例如,选择 φ6.0一般为了销钉好装配,销钉孔都给倒角;勾选 “近端锥孔”;值给 8.0,90,结合孔径 6.0,…...
Kalidokit:3D动作捕捉与虚拟角色驱动的开源解决方案
Kalidokit:3D动作捕捉与虚拟角色驱动的开源解决方案 【免费下载链接】kalidokit Blendshape and kinematics calculator for Mediapipe/Tensorflow.js Face, Eyes, Pose, and Finger tracking models. 项目地址: https://gitcode.com/gh_mirrors/ka/kalidokit …...
保姆级教程:用HBuilderX给UniApp安卓项目制作支持MQTT插件的自定义基座
深度解析:UniApp安卓项目集成MQTT插件的自定义基座实战指南 当你在UniApp项目中尝试使用原生MQTT插件时,是否遇到过这样的困境:代码写好了,插件也购买了,但真机运行时却频频报错?这往往是因为官方基座缺少必…...
