news 2026/9/30 12:32:59

三次握手、四次挥手的具体细节和流程详解,附加思考题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三次握手、四次挥手的具体细节和流程详解,附加思考题

三次握手的具体流程和细节

✅ 搜索结果验证你的这句话(完全正确!)

期望服务器下一次发送seq=101,这个报文是纯 ACK,不消耗序号,连接建立完成。SYN

权威原文总结(RFC793、计算机网络教材)

  1. 第三次握手报文:ACK=1,seq=2,ack=101,SYN=0
  • ack=101:含义就是客户端告诉服务器,我期望你下一次发给我的报文seq=101✅

  • 这个报文

    如果不带任何业务数据,就是纯ACK报文,不消耗客户端的序列号

    。

    重点补充:第三次握手ACK报文允许携带数据!一旦携带数据,就会消耗序号;不带数据才不消耗序号。考试默认场景是不带数据的纯ACK。

  1. SYN的考点回顾
  • SYN是标志位(1bit,0或1),只在第一次、第二次握手置1;
  • 第三次握手SYN=0,不再同步序列号,只做确认。

咱们整套三次握手,对照教材标准写法

  1. C→S:SYN=1,seq=1SYN占用序号,请求建立连接。
  2. S→C:SYN=1,ACK=1,seq=100,ack=2SYN+ACK,服务器同步自己序列号,ack=2代表期待客户端下一个seq=2;SYN消耗服务器seq。
  3. C→S:ACK=1,seq=2,ack=101,SYN=0纯ACK,ack=101代表期望服务器下一次发送seq=101;不带数据则不消耗序号。服务器收到此包,双方进入ESTABLISHED,连接建立完成。

选择题坑点

题目:TCP第三次握手报文,是否消耗序列号? 答案:不带数据,不消耗;携带数据,则消耗。考题如果没有说明携带数据,默认:纯ACK,不消耗序号。

一句话巩固

ack=Y+1,意思就是期待对方下一个报文seq是Y+1; 第三次握手SYN标志关闭(SYN=0),仅ACK标志开启;无数据的ACK报文不占用序号。

现在三次握手已经完全吃透,你可以试着完整口述四次挥手,我帮你核对!


SYN的真实含义

✅ 一句话核心

SYN=1,是用来【同步双方各自的初始序列号ISN】,不是用来同步业务数据!同步的对象:序列号(seq),不是业务数据。


1. SYN什么时候置1?

只有发起连接请求的时候才会打开SYN=1:

  1. 客户端发起建连:第一次握手,SYN=1,客户端把自己的初始seq发给服务器。
  2. 服务器也想建立反向连接:第二次握手,SYN=1,服务器把自己的初始seq发给客户端。

连接建立成功之后(ESTABLISHED阶段,传输业务数据的时候),SYN永远=0,不再用SYN。

2. “同步”到底同步了什么?

不是同步文件、不是同步传输的数据。 TCP是全双工,两边各有一套独立序列号:

  • 客户端 → 服务器:有一套seq(客户端的序号)
  • 服务器 → 客户端:另一套seq(服务器的序号)

SYN报文的作用:交换双方的起始编号

客户端告诉服务器:我发数据,从seq=1开始编号 服务器告诉客户端:我发数据,从seq=100开始编号

👉 这就是同步序列号。 只有双方都知道对方的起始seq,后续传输数据的时候,才能:

  • 确认收到了哪些字节
  • 丢包的时候,知道该重传哪一段

3. 重点区分

❌ SYN ≠ 同步业务数据 ✅ SYN = 同步序列号,只在连接建立阶段(三次握手)生效。真正的数据交换、业务传输,是连接建立完成之后才开始的,此时SYN=0。

4. 结合咱们的例子

  1. C→S SYN=1,seq=1:客户端把自己的起始序号告诉服务器
  2. S→C SYN=1,ACK=1,seq=100,ack=2:服务器把自己起始序号告诉客户端,同时确认收到客户端的seq
  3. C→S ACK=1,seq=2,ack=101:确认收到服务器的seq,握手结束,SYN全部置0,之后才传业务数据

精简背诵版

  1. SYN标志只在建连请求时置1,数据传输阶段SYN=0。
  2. SYN的同步,同步的是双方初始序列号,不是业务数据。
  3. 三次握手本质:互相交换初始seq,确认双方收发正常,完成序列号同步,之后才能传输数据。

思考题自测

TCP连接建立之后,传输文件的时候,报文里SYN=?

答案 SYN=0,不再同步序列号。

要不要我们继续梳理四次挥手里FIN的含义,和SYN做对比记忆?

四次挥手的具体流程和细节

✅ 整体逻辑已经完全正确!只有一处小表述瑕疵,我帮你标出来,再给你优化成考试背诵版本。

你的原文

第一次挥手,C发出断开请求,C的FIN=1,seq=1; 第二次挥手,S收到请求,S的ACK=1,ack=C的seq+1=2,seq=100,这边暂时不FIN,因为S这边可能还有数据没有向C传输完成; 第三次挥手,ACK=1和S的FIN=1,seq=100,ack=C的seq+1=2; 第四次挥手,C接受到S的断开连接请求,ACK=1,ack=S的seq+1=101,seq=C的seq+1=2;

👉 小瑕疵点

seq=C的seq+1=2这里文字描述容易误会,不是C原来seq+1。 C第一次挥手用了seq=1,FIN消耗序号,所以客户端下一个可用seq直接就是2,不需要写“seq = 1+1”。 数学结果虽然是2,但原理表述要严谨,考试避免扣分。


✅ 标准背诵版(沿用咱们同一套数字)

  1. 第一次挥手 C→SFIN=1,ACK=0,seq=1客户端发起关闭请求,告知服务器:我没有数据再发给你。FIN报文消耗客户端序列号。
  2. 第二次挥手 S→CACK=1,FIN=0,seq=100,ack=1+1=2服务器确认收到客户端的FIN。 此时处于半关闭状态:客户端不再发数据,但服务器还可以继续向客户端发送剩余业务数据。本包是纯ACK,不消耗服务器seq,服务器seq依旧是100。
  3. 第三次挥手 S→CFIN=1,ACK=1,seq=100,ack=2服务器全部数据发送完毕,发起关闭请求。FIN消耗服务器序列号。ack仍然等于2,因为没有收到客户端新的消耗序号的报文。
  4. 第四次挥手 C→SACK=1,FIN=0,seq=2,ack=100+1=101客户端收到服务器的FIN,回复确认报文。 报文是纯ACK,不消耗客户端序号。客户端发送后进入2MSL等待阶段;服务器收到这个ACK,直接关闭连接。

核心考点复盘

  1. 四次挥手全程:SYN=0,SYN只在三次握手出现。
  2. 第二次挥手只是单纯ACK,不带FIN,服务器保留发送数据的能力。
  3. ack不会自动增加,只有收到SYN/FIN或者携带数据的报文,ack才增加。
  4. 2MSL:客户端要等待2MSL,防止最后这个ACK报文丢失,服务器重传FIN。

精简口述版(直接背)

第一次挥手:客户端发FIN=1,seq=1,请求关闭上行通道。 第二次挥手:服务器回ACK=1,seq=100,ack=2,确认收到关闭请求,半关闭,服务器还能发剩余数据。 第三次挥手:服务器数据发完,发送FIN+ACK,seq=100,ack=2,请求关闭下行通道。 第四次挥手:客户端回复ACK=1,seq=2,ack=101,确认收到服务器FIN,客户端进入2MSL等待。

太棒了!现在三次握手+四次挥手整套时序都理顺了。 要不要我把三次握手、四次挥手合并成一张对比速记表,方便你考前快速复习?


✅ 整体打分:80分!

大部分理解到位,下面逐条批改,标出扣分点+修正标准答案

你的答案写得很不错,很多坑都避开了,只有几处表述不够严谨。


1. TCP 三次握手,为什么是3次而不是2次?

你的回答:因为第三次C要确保S知道C收到了S的请求,并发送了个ACK标识,确保可靠性 ✅ 方向对,表述优化:

如果只有两次握手:服务器收到SYN,返回SYN+ACK,服务器单方面认为连接建立成功。 但客户端如果没收到服务器的报文,客户端不会建立连接。服务器会一直等待客户端数据,造成资源浪费。 第三次握手的ACK,用来让服务器确认:客户端成功收到了服务器的SYN,双向确认收发能力。

2. 第一次握手报文:SYN=1,seq=1。服务器收到之后,回复的 ack 是多少?为什么 ack 要 + 1?

你的回答:回复ack=C的seq+1=2,标识SYN消耗了一个序列,下次接收2的序列号 ✅完全正确

3. 四次挥手为什么是4次,不能像握手那样合并成3次?

你的回答:因为在中间过程中,C向S请求的数据可能还没传输完,要等传输完,才能进行FIN=1标识,S向C关闭连接请求 微调:

客户端发FIN,代表客户端不再发数据给服务器。服务器收到FIN后,立刻回ACK确认,但服务器此时可能还有业务数据要发给客户端。 所以确认ACK 和服务器自己的FIN不能合并成一个包,拆成两个报文,因此总共四次挥手。 三次握手可以合并,是因为服务器收到SYN时,没有数据要传输,SYN和ACK可以放在同一个包。

4. 四次挥手第二次挥手,服务器返回ACK=1,seq=100,ack=2,为什么这个报文不携带 FIN?此时连接是什么状态?

你的回答:和第三题一个道理,因为在中间过程中,C向S请求的数据可能还没传输完,要等传输完,才能进行FIN=1标识,S向C关闭连接请求,连接处于SYN=0,FIN=0 ❌ 小错误:SYN=0,FIN=0是报文标志,不是连接状态! ✅标准答案: 服务器还有剩余数据要发给客户端,暂时不能关闭自己的发送通道,所以不发FIN。 此时连接处于半关闭状态:C→S方向通道关闭;S→C方向通道仍然可用,服务器还可以继续发数据。

5. 第四次挥手客户端发送的 ACK 报文,客户端为什么要等待2MSL?服务器收到这个 ACK 之后需要等待吗?

你的回答:因为C要确保S已经真的关闭链接了,如果收到了ACK=1,就说明S没有真正的关闭;服务器收到这个ACK之后,不需要等待,因为已经在FIN标识为1了 ❌ 原理描述错误 ✅标准答案: 2MSL:报文最大生存时间。 客户端最后发的ACK报文有可能丢失。如果丢包,服务器超时后会重发FIN。 客户端等待2MSL,就是为了在这段时间内,能够收到服务器重传的FIN并重新回复ACK。 服务器收到这个ACK后,立刻释放连接资源,不需要等待。

6. 请问:SYN 报文、FIN 报文、纯 ACK 报文,哪些会消耗序列号?

你的回答:SYN,FIN会消耗,ACK不会 ✅ 基本正确,补充一句:携带数据的ACK报文会消耗序列号,只有不带数据的纯ACK不消耗。考试默认纯ACK。

7. TCP 连接建立完成后,传输业务数据的时候,报文里面 SYN=? ACK=?

你的回答:SYN=0,ACK=1 ✅完全正确

8. 四次挥手全程,SYN 标志等于多少?为什么?

你的回答:SYN=0,因为SYN是建立连接的标识,关闭连接的四次挥手过程,是FIN=1 ✅完全正确

9. 第三次挥手服务器发送FIN+ACK,seq=100,ack=2,ack 为什么不是 3?

你的回答:因为在第二次挥手时,并没有FIN=1的标识,只是半关闭状态,所以不会消耗C的序列号, ✅理解对,润色: ack的值取决于收到对方消耗序号的报文。从第二次挥手到第三次挥手之间,服务器没有收到客户端任何新的SYN/FIN或者数据包,ack保持上一次计算结果2,不会自动+1变成3。

10. 如果客户端发起第一次握手的 SYN 报文丢了,会发生什么?

你的回答:S不会收到任何连接请求,所以S不会返回任何ACK=1的响应标识,而C会因为长时间没有收到S的ACK响应,而重新发起一次请求 ✅完全正确。补充:客户端超时重传SYN,多次失败后放弃建立连接。


总结薄弱点

  1. 区分:报文标志位和连接状态(半关闭、ESTABLISHED),答题不要混在一起。
  2. 2MSL的原理是防止最后ACK丢失,服务器重发FIN,不是验证服务器有没有关闭。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 12:32:58

物流园仓储定位系统推荐哪家?2026年这家室内外一体化定位服务商值得关注

摘要:2026年物流园与仓储场景面临“人、车、货”管理割裂的痛点。本文梳理选型问题清单,重点推荐室内外一体化定位服务商大希科技,并逐项回应场景需求,剖析其方案优势,同时提供其他技术路线服务商作为调研参考。一、物流园仓储定位选型问题清单在园区运营中,货架区、分拨中心、…

作者头像 李华
网站建设 2026/9/30 12:32:46

中小型企业网络全栈设计模板:VLAN/ACL/HSRP/NAT/DHCP一体化落地

简介:本资源是一份面向网络工程初学者与中小企业IT运维人员的实战型网络规划设计文档,聚焦中小型企业信息化建设中的核心环节——Intranet网络架构设计与落地验证。内容以Cisco主流设备为选型基础,完整覆盖需求分析、拓扑规划、路由交换配置、…

作者头像 李华
网站建设 2026/9/30 12:32:42

NVMe驱动开发入门:从PCIe枚举到队列管理的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 12:30:44

微信小程序+Flask医院预约平台:排班、并发控制与管理看板全解析

1. 立项思路:一套能真正跑出闭环的医院门诊预约平台做医院门诊预约平台这个项目,最初其实是被一个很现实的场景逼出来的。当时有个做社区卫生信息化项目的朋友,被院方反复问到一个问题:患者想预约第二天的专科门诊,但又…

作者头像 李华
网站建设 2026/9/30 12:30:38

基于YOLOv11的雷达图像极端天气特征提取与算法优化实战

简介:这份PDF文档面向气象监测、雷达图像处理与目标检测方向的学习者和研究人员,聚焦如何利用YOLOv11单阶段检测算法从雷达图像中提取暴雨、台风、雷暴、冰雹等极端天气特征,并针对特征相似、背景干扰、数据质量等难点给出优化思路。文档共29…

作者头像 李华