欢迎光临本地信息咨询网
详情描述

这是一个关于TCP三次握手与四次挥手原理的详细解释。

核心概念:TCP与连接

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。“面向连接”意味着在数据传输前,通信双方必须先建立一条逻辑连接,传输结束后再释放。三次握手用于建立连接,四次挥手用于释放连接

一、TCP报文头部关键字段

理解握手和挥手,需要先知道几个TCP报文头部的关键标志位:

  • SYN:同步序列号。SYN=1 表示这是一个连接请求或连接接受报文。
  • ACK:确认号有效。ACK=1 表示确认字段是有效的。通常,除了最初建立连接的SYN包,后续所有报文ACK都应为1。
  • FIN:结束标志。FIN=1 表示发送方数据已发送完毕,要求释放连接。
  • seq:序列号。本报文段所发送数据的第一个字节的序号。
  • ack:确认号。期望收到对方下一个报文段的第一个数据字节的序号,表示ack之前的数据已确认收到。

二、三次握手(建立连接)

目的:确认双方的发送和接收能力都正常,并同步初始序列号

详细过程:

第一次握手(客户端 -> 服务器)

  • 客户端发送一个TCP报文,其中:
    • 标志位 SYN = 1,表示请求建立连接。
    • 随机生成一个初始序列号 seq = J
    • ACK = 0(因为这是初始请求,没有需要确认的)。
  • 发送后,客户端进入 SYN_SENT 状态。
  • 意义:客户端对服务器说:“我想和你建立连接,我的初始序列号是J,你能听到我吗?”

第二次握手(服务器 -> 客户端)

  • 服务器收到SYN报文后,如果同意连接,则回复一个报文,其中:
    • 标志位 SYN = 1ACK = 1
    • 随机生成服务器自己的初始序列号 seq = K
    • 确认号 ack = J + 1(表示“我收到了你的序列号J,期待你下次从J+1开始发”)。
  • 发送后,服务器进入 SYN_RCVD 状态。
  • 意义:服务器对客户端说:“我听到你了。我同意建立连接,我的初始序列号是K,并且我确认收到了你的J。”

第三次握手(客户端 -> 服务器)

  • 客户端收到服务器的SYN-ACK报文后,必须再次确认。它发送一个报文,其中:
    • 标志位 ACK = 1(此时SYN=0,因为连接已建立)。
    • 序列号 seq = J + 1(因为第一次握手的SYN包消耗了一个序列号)。
    • 确认号 ack = K + 1(表示“我收到了你的序列号K”)。
  • 发送后,客户端进入 ESTABLISHED 状态。
  • 服务器收到这个ACK报文后,也进入 ESTABLISHED 状态。至此,连接建立成功,可以开始数据传输。
  • 意义:客户端对服务器说:“好的,我确认收到了你的同意。我们现在可以开始通信了。”
为什么是三次,不是两次?

主要是为了防止已失效的连接请求报文突然又传送到服务器,导致服务器资源浪费(防止“旧的重复SYN”造成连接错乱)

  • 假设场景:客户端发送一个SYN请求,但由于网络拥堵迟迟未到达。客户端超时后重发一个SYN并成功建立连接、传输数据、关闭连接。此时,那个旧的SYN终于到达了服务器。
  • 如果是两次握手:服务器收到旧SYN,立刻回复SYN-ACK并进入连接状态,等待客户端发数据。但客户端早已关闭,不会理会这个ACK,导致服务器空等,浪费资源。
  • 三次握手解决了这个问题:在旧SYN的场景下,服务器回复SYN-ACK后,由于客户端是“新的”(并未期望这个连接),它不会发送最终的ACK确认,因此服务器收不到第三次握手,等待超时后关闭这个半连接,不会维持一个无效的连接。

三、四次挥手(释放连接)

目的:双方都确认数据发送完毕,并安全地、无遗漏地关闭连接。由于TCP是全双工的(可以同时双向传输),每个方向必须单独关闭。

详细过程:

假设客户端主动发起关闭。

第一次挥手(客户端 -> 服务器)

  • 客户端数据发送完毕后,发送一个TCP报文,其中:
    • 标志位 FIN = 1ACK = 1(通常也携带对之前数据的确认)。
    • 序列号 seq = u(等于已传送数据最后一个字节序号+1)。
  • 发送后,客户端进入 FIN_WAIT_1 状态。
  • 意义:客户端对服务器说:“我这边没有数据要发给你了,我想关闭我到你方向的连接。”

第二次挥手(服务器 -> 客户端)

  • 服务器收到FIN报文后,立即回复一个确认报文,其中:
    • 标志位 ACK = 1
    • 确认号 ack = u + 1(确认客户端的FIN请求)。
    • 序列号 seq = v
  • 发送后,服务器进入 CLOSE_WAIT 状态。客户端收到这个ACK后,进入 FIN_WAIT_2 状态。
  • 此时,从客户端到服务器的连接关闭,TCP处于半关闭状态。服务器可能还有数据要发送给客户端。
  • 意义:服务器对客户端说:“好的,我知道你要关闭了,我确认收到了你的关闭请求。”

第三次挥手(服务器 -> 客户端)

  • 当服务器也把剩余数据发送完毕后,它准备关闭自己方向的连接。服务器发送一个报文,其中:
    • 标志位 FIN = 1ACK = 1
    • 序列号 seq = w(如果中间又发了数据,w会大于v)。
    • 确认号 ack = u + 1(保持不变)。
  • 发送后,服务器进入 LAST_ACK 状态。
  • 意义:服务器对客户端说:“我这边数据也发完了,我也要关闭我这边的连接了。”

第四次挥手(客户端 -> 服务器)

  • 客户端收到服务器的FIN报文后,发送一个最终的确认报文,其中:
    • 标志位 ACK = 1
    • 序列号 seq = u + 1(因为第一次挥手消耗了一个序号)。
    • 确认号 ack = w + 1
  • 发送后,客户端进入 TIME_WAIT 状态,等待 2MSL(两倍的最大报文段生存时间)后,才彻底关闭进入 CLOSED 状态。
  • 服务器收到这个ACK后,立即进入 CLOSED 状态。
  • 意义:客户端对服务器说:“好的,我也确认收到了你的关闭请求。”
为什么需要四次挥手?

因为TCP是全双工,关闭需要两个独立的“提议-确认”过程。

  • 第一次和第二次挥手:关闭客户端到服务器的通道。
  • 第三次和第四次挥手:关闭服务器到客户端的通道。
  • 中间可能存在 CLOSE_WAIT 状态,是因为服务器可能还有数据需要处理并发送,不能立即回复FIN。
为什么客户端最后要等待2MSL? 确保最后一个ACK能到达服务器:如果服务器没有收到第四次挥手的ACK,它会重发FIN。客户端在2MSL时间内收到这个重发的FIN,可以重发ACK。 让本次连接产生的所有报文都在网络中消失:避免这些旧的报文段影响未来新建的、复用相同端口号的连接。

总结对比

特性 三次握手(建立连接) 四次挥手(释放连接)
目的 同步序列号,确认双方收发能力 双方安全、完整地关闭连接
发起方 客户端 可以是客户端或服务器(图示以客户端为例)
关键状态 SYN_SENT, SYN_RCVD, ESTABLISHED FIN_WAIT_1/2, CLOSE_WAIT, LAST_ACK, TIME_WAIT
次数必要性 防止失效连接请求造成错误 TCP全双工,两个方向需独立关闭
后续特殊状态 客户端有 TIME_WAIT(2MSL)

这个机制是TCP实现可靠数据传输的基石之一。

相关帖子
除了传统的晋升率,2026年衡量一个组织性别平等程度还有哪些更细致的关键指标?
除了传统的晋升率,2026年衡量一个组织性别平等程度还有哪些更细致的关键指标?
面对越来越逼真的AI生成内容,我们应通过哪些细节来识别和判断其真实性?
面对越来越逼真的AI生成内容,我们应通过哪些细节来识别和判断其真实性?
温岭市网站优化服务公司&精准获客助手,定制开发
温岭市网站优化服务公司&精准获客助手,定制开发
智能门锁的半导体指纹识别与人脸识别技术哪个更安全可靠?
智能门锁的半导体指纹识别与人脸识别技术哪个更安全可靠?
租房合同到期后,房东一直拖延处理押金问题该怎么办?
租房合同到期后,房东一直拖延处理押金问题该怎么办?
咸宁市专业网站开发建设&精准获客,多年专业建站经验
咸宁市专业网站开发建设&精准获客,多年专业建站经验
扬州市救护车转院转运回家&长途跨省救护车转运24小时电话
扬州市救护车转院转运回家&长途跨省救护车转运24小时电话
高效管理你的Linux系统: Debian操作系统常用命令指南
高效管理你的Linux系统: Debian操作系统常用命令指南
长期受噪音困扰影响休息,如何进行自我心理调节与舒缓?
长期受噪音困扰影响休息,如何进行自我心理调节与舒缓?
济南市网站建设服务%精准获客系统,高端网站开发设计
济南市网站建设服务%精准获客系统,高端网站开发设计
如果社保已经断缴了,在2026年还有没有机会进行补缴操作?
如果社保已经断缴了,在2026年还有没有机会进行补缴操作?
湛江市企业网站建设公司&做网站公司,收费标准
湛江市企业网站建设公司&做网站公司,收费标准
2026年通过哪些官方或正规的线上平台,可以查询到可靠的跨境招聘信息?
2026年通过哪些官方或正规的线上平台,可以查询到可靠的跨境招聘信息?
杭州市救护车长途跨省护送病人出院@120救护车一次多少钱
杭州市救护车长途跨省护送病人出院@120救护车一次多少钱
黄石市专业网站设计制作%定制化网站建设,小程序开发
黄石市专业网站设计制作%定制化网站建设,小程序开发
在马路上看到哪些问题可以通过随手拍上报并获得奖励?
在马路上看到哪些问题可以通过随手拍上报并获得奖励?
2026年异地销户是否支持线上办理,话费余额如何处理?
2026年异地销户是否支持线上办理,话费余额如何处理?
web面试常问http缓存解析相关
web面试常问http缓存解析相关
徐州市长途救护车出租&重症急救车出租,转院接送
徐州市长途救护车出租&重症急救车出租,转院接送
外卖骑手在等待取餐时,平台系统是如何自动识别和记录等时时间的?
外卖骑手在等待取餐时,平台系统是如何自动识别和记录等时时间的?