TCP/IP协议、三次握手、四次挥手
TCP/IP
- TCP/IP协议分层
- TCP头部
- 三次握手
- TCP四次挥手
- 常见问题
- 1、什么是TCP网络分层
- 2、TCP为什么是三次握手,不是两次或者四次?
- 3、TCP为什么是四次挥手,为什么不能是三次挥手将第二次挥手和第三次挥手合并?
- 4、四次挥手时为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
- 5、如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP/IP协议分层
TCP头部

三次握手

整个流程为:
- 客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态
- 服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
- 客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态
TCP四次挥手
TCP三次握手是TCP连接建立的过程,TCP四次挥手则是TCP连接释放的过程。下面是TCP四次挥手的流程图:

- 1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
- 3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
- 5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
- 6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
常见问题
1、什么是TCP网络分层

分层的好处:解耦
- 各层独立:限制了依赖关系的范围,各层之间使用标准化的接口,各层不需要知道上下层是如何工作的,增加或者修改一个应用层协议不会影响传输层协议
- 灵活性更好:比如路由器不需要应用层和传输层,分层以后路由器就可以只用加载更少的几个协议层
- 能促进标准化:每一层职责清楚,方便进行标准化
2、TCP为什么是三次握手,不是两次或者四次?
- 两次握手
- 如果TCP只进行两次连接,C端带着syn=1 seq=x询问S端是否可以连接,S端答应syn=1 seq=y ACK=1(确认) ack=x+1,C端收到答应之后就不响应了,这时S端就处于确立连接状态但是不知道C端是否处于确立连接状态,如果C端询问完收到S端消息就不处理了,S端还会一直处于确立连接状态资源不会释放导致服务端资源浪费。
- 四次握手
- 脱裤子放屁,竟然三次握手已经能确定TCP连接可靠那么就没有必要进行四次握手,多一次握手增加连接的开销。
- 还有一种情况,如果是四次握手那么和两次握手会出现类似的情况
3、TCP为什么是四次挥手,为什么不能是三次挥手将第二次挥手和第三次挥手合并?
在第一次挥手后S端可能还有一些数据没有发送完,如果第二次挥手要等待S端将数据都发送完成可能需要很长时间,C端处于FIN-WAIT1阶段会以为S端没有收到询问消息 会再次发送一条询问消息给S端,但是S端这个时候其实在CLOSE-WAIT中,所有必须要进行四次挥手,在S端收到询问消息之后立马回复一个ACK=1 ack=x+1(确认序列号)让C端进入一个阶段FIN-WAIT2
4、四次挥手时为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
5、如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
相关文章:
TCP/IP协议、三次握手、四次挥手
TCP/IP TCP/IP协议分层TCP头部三次握手TCP四次挥手常见问题1、什么是TCP网络分层2、TCP为什么是三次握手,不是两次或者四次?3、TCP为什么是四次挥手,为什么不能是三次挥手将第二次挥手和第三次挥手合并?4、四次挥手时为什么TIME_W…...
Android U 匹配不到APN,无法发起数据建立的问题分析
问题 打开数据开关后,没有data PDN请求发起,因此无法上网。 根据日志确定是没有找到合适的data profile,原因一般有: 1、APN 没有配置 2、APN 类型/网络能力不满足——APN type或bearer 3、APN 配置了但被disable了——APN p…...
如何打造“面向体验”的音视频能力——对话火山引擎王悦
编者按:随着全行业视频化的演进,我们置身于一个充满创新与变革的时代。在这个数字化的浪潮中,视频已经不再只是传递信息的媒介,更是重塑了我们的交互方式和体验感知。作为字节跳动的“能力溢出”,火山引擎正在飞速奔跑…...
什么是NoOps
过去几年,自动化一直在推动整个 IT 行业向前发展。通过自动化某些任务,开发团队可以提高其能力,而无需感受到雇用新团队成员的预算压力。自动化还保证了更高的效率,特别是在操作和维护方面。 传统的软件开发工作流程涉及开发团队…...
Unity - Graphic解析
Gpahic 的作用 Graphic 是 Unity最基础的图形基类。主要负责UGUI的显示部分。 由上图可以看你出我们经常使用的Image,Text,都是继承自Graphic。 Graphic的渲染流程 在Graphic的源码中有以下属性 [NonSerialized] private CanvasRenderer m_CanvasRend…...
哈希思想的应用
目录 1.位图 位图的实现 题目变形一 题目变形二 题目变形三 总结: 2.布隆过滤器 概念 布隆过滤器的实现 3.哈希切割的思想 1.位图 哈希表和位图是数据结构中常用的两种技术。哈希表是一种数据结构,通过哈希函数把数据和位置进行映射,…...
React入门使用 (官方文档向 Part1)
文章目录 React组件:万物皆组件 JSX: 将标签引入 JavaScriptJSX 规则1. 只能返回一个根元素2. 标签必须闭合3. 使用驼峰式命名法给 ~~所有~~ 大部分属性命名!高级提示:使用 JSX 转化器 在 JSX 中通过大括号使用 JavaScript使用引号传递字符串使用大括号&…...
87基于matlab的双卡尔曼滤波算法
基于matlab的双卡尔曼滤波算法。第一步使用了卡尔曼滤波算法,用电池电压来修正SOC,然后将修正后的SOC作为第二个卡尔曼滤波算法的输入,对安时积分法得到的SOC进行修正,最终得到双卡尔曼滤波算法SOC估计值。结合EKF算法和安时积分法…...
Jacobi迭代与SOR迭代求解希尔伯特矩阵
给出线性方程组 Hn*x b,其中系数矩阵Hn为希尔伯特矩阵: 假设 x ∗ (1, 1, . . . , 1)T,b Hnx ∗。若取 n 6,8, 10,分别用 Jacobi 迭代法及 SOR迭代(ω 1, 1:25,1:5)求解,比较计算结果。…...
【云备份】配置加载文件模块
文章目录 配置信息设计配置文件加载cloud.conf配置文件单例模式的使用ReadConfigFile —— 读取配置文件GetInstance —— 创建对象其他函数的实现 具体实现cloud.confconfig.hpp 配置信息设计 使用文件配置加载一些程序运行的关键信息 可以让程序的运行更加灵活 配置信息&am…...
sqlserver写入中文乱码问题
sqlserver写入中文乱码问题解决方案 首先查看sqlserver数据库编码 首先查看sqlserver数据库编码 查询语句:SELECT COLLATIONPROPERTY(Chinese_PRC_Stroke_CI_AI_KS_WS, CodePage); 对应的编码: 936 简体中文GBK 950 繁体中文BIG5 437 美国/加…...
【亚马逊云】基于EC2以 All-in-One 模式快速部署 KubeSphere 和 Kubernetes
文章目录 1. 云实例配置说明2. SSH连接云实例3. 查看系统版本4. 修改主机名5. 安装依赖项6. 安全组和DNS修改7. 下载KubeKey8. 同时安装Kubesphere和Kubernetes[可选]单独安装Kubernetes[可选]单独安装KubeSphere9. 验证KubeSphere安装结果10. 登录KubeSphere控制台[可选]安装K…...
使用 ChatGPT 创建 Makefile 构建系统:从 Docker 开始
使用 Docker 搭配 ChatGPT 创建 Makefile 构建系统 Makefile 构建系统是嵌入式软件团队实现其开发流程现代化的基础。构建系统不仅允许开发人员选择各种构建目标,还可以将这些构建集成到持续集成/持续部署 (CI/CD) 流程中。使用诸如 ChatGPT 这样的人工智能 (AI) 工…...
嵌入式设备摄像头基础知识
工作原理 摄像头的工作原理是,当光线通过镜头聚焦到图像传感器上时,传感器会将光信号转换为电信号,并将其传输给处理器进行处理。处理器通过算法对图像信号进行增强、去噪、压缩等操作,并将其转换为数字信号输出给计算机或其他设…...
使用Pytorch从零开始构建Normalizing Flow
归一化流 (Normalizing Flow) (Rezende & Mohamed,2015)学习可逆映射 f : X → Z f: X \rightarrow Z f:X→Z, 在这里X是我们的数据分布,Z是选定的潜在分布。 归一化流是生成模型家族的一部分,其中包括变分自动编…...
一个tomcat中部署的多个war,相当于几个jvm
请直接去看原文 原文链接:一个tomcat有几个jvm-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 前几天向unmi提问,今天他答复了。我觉得答复很清楚,…...
2023年第十六届中国系统架构师大会(SACC2023)-核心PPT资料下载
一、峰会简介 本届大会以“数字转型 架构演进”为主题, 涵盖多个热门领域,如多云多活、海量分布式存储、容器、云成本、AIGC大数据等,同时还关注系统架构在各个行业中的应用,如金融、制造业、互联网、教育等。 与往届相比&#…...
高校大学校园后勤移动报修系统 微信小程序uniapp+vue
本文主要是针对线下校园后勤移动报修传统管理方式中管理不便与效率低的缺点,将电子商务和计算机技术结合起来,开发出管理便捷,效率高的基于app的大学校园后勤移动报修app。该系统、操作简单、界面友好、易于管理和维护;而且对后勤…...
docker常见问题汇总
docker常见问题 ❓问题1:启动docker容器时,报错Unknown runtime specified nvidia. 当我启动一个容器时,运行以下命令: docker run --runtimenvidia 。。。。 后面一部分命令没写出来,此时报错的信息如下:…...
JMeter 测试脚本编写技巧
JMeter 是一款开源软件,用于进行负载测试、性能测试及功能测试。测试人员可以使用 JMeter 编写测试脚本,模拟多种不同的负载情况,从而评估系统的性能和稳定性。以下是编写 JMeter 测试脚本的步骤。 第 1 步:创建测试计划 在JMet…...
基于单细胞测序技术的细胞通讯分析方法及其应用
一、细胞通讯与单细胞测序技术的研究意义多细胞生物由不同类型的细胞构成一个开放的社会。在这一社会中,单个细胞之间必须协调其行为,因此建立有效的通讯联络机制至关重要。细胞通讯是指一个细胞发出的信息通过介质传递至另一个细胞,并引发相…...
Makefile 入门与 C/C++ 项目构建指南
Makefile 入门与 C/C 项目构建指南 本文面向 C/C 初学者与日常维护多文件工程的开发者,系统说明 GNU Make 与 Makefile 的作用、执行逻辑、常用语法与可复用模板,帮助从「手动敲 gcc」过渡到可维护的自动化构建,并具备阅读、修改常见开源项目…...
5分钟搞定!通义千问多模态检索系统一键部署与体验
5分钟搞定!通义千问多模态检索系统一键部署与体验 1. 为什么选择通义千问多模态检索系统? 想象一下这样的场景:你在电商平台搜索"红色连衣裙",结果却出现大量粉色上衣;或者在视频网站查找"猫咪搞笑视…...
终极密码恢复方案:ArchivePasswordTestTool帮你找回遗忘的压缩包密码
终极密码恢复方案:ArchivePasswordTestTool帮你找回遗忘的压缩包密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾遇…...
教育资源数字化转型:电子课本下载工具的技术赋能与应用实践
教育资源数字化转型:电子课本下载工具的技术赋能与应用实践 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…...
用快马ai快速构建你的第一个endnote式文献管理原型
最近在写论文时,突然意识到需要个简单的文献管理工具。虽然EndNote这类专业软件功能强大,但对于快速记录和引用参考文献来说,有时候只需要一个轻量级的解决方案。于是我在InsCode(快马)平台上尝试用HTML、CSS和JavaScript快速搭建了一个原型&…...
音乐自由解决方案:Listen1音乐聚合工具使用指南
音乐自由解决方案:Listen1音乐聚合工具使用指南 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension 你是否曾…...
Git-RSCLIP镜像免配置优势解析:省去pip install/模型下载/权重加载环节
Git-RSCLIP镜像免配置优势解析:省去pip install/模型下载/权重加载环节 你有没有遇到过这种情况?看到一个很酷的AI模型,想马上试试效果,结果光是安装环境就折腾了半天——装Python、配CUDA、下载模型、加载权重……等一切搞定&am…...
Wan2.2-I2V-A14B高性能推理:C++后端服务开发与优化
Wan2.2-I2V-A14B高性能推理:C后端服务开发与优化 1. 为什么需要C高性能推理服务 在实时图像生成场景中,毫秒级的延迟差异可能直接影响用户体验和业务转化率。传统基于Python的Web框架(如Flask/FastAPI)虽然开发便捷,…...
模糊PID vs 传统PID:在Simulink里调直流电机,哪个响应更快更稳?
模糊PID与传统PID的Simulink对决:直流电机控制性能深度评测 在工业自动化和机器人控制领域,直流电机的精准控制一直是工程师们关注的重点。面对日益复杂的控制需求,传统PID控制器虽然简单可靠,但在非线性、时变系统中表现往往不尽…...

