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

这是一个关于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年智能净水器常提到的APP联网功能,在实际家庭使用中真的能带来便利吗?
2026年智能净水器常提到的APP联网功能,在实际家庭使用中真的能带来便利吗?
广东按月发、江苏一次性发,独生子女父母奖励各地模式差在哪?
广东按月发、江苏一次性发,独生子女父母奖励各地模式差在哪?
常居住地户口登记信息填写时,哪些细节容易出错需要特别注意?
常居住地户口登记信息填写时,哪些细节容易出错需要特别注意?
在工伤认定过程中,哪些证据材料对证明事故发生时间至关重要?
在工伤认定过程中,哪些证据材料对证明事故发生时间至关重要?
自由职业者或灵活就业人员,是否可以为自己设立交通通讯补贴以降低税负?
自由职业者或灵活就业人员,是否可以为自己设立交通通讯补贴以降低税负?
2026年,社会舆论和年轻人对彩礼“限高”政策的普遍看法是什么?
2026年,社会舆论和年轻人对彩礼“限高”政策的普遍看法是什么?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?