快速理解 TCP 的三次握手和四次挥手

前言

TCP 的三次握手和四次挥手是 TCP 协议的常见考点,下面我们通过一张图和几条记忆点来快速理解。

TCP 连接传输状态图

三次握手

上图中最上面的红色部分就是三次握手。握手是双方刚见面的时候,所以是用来建立连接的。

第一次握手:客户端发送 SYN 报文给服务端。客户端发起请求,所以先打招呼。

第二次握手:服务端发送 SYN + ACK 报文给客户端。服务端收到了请求,向客户端回应,并表示收到了之前的请求。

第三次握手:客户端再发送 ACK 报文给服务端,表示也收到了服务端发来的报文。

SYN, ACK 等都是 TCP 特定的报文格式,就是特定的字节组合,具体大家可以不用深究。

为什么要三次握手?因为这是保证双方通信可靠性的最少次数。

客户端先向服务端发起第一次握手,类似于破冰,打开沟通的大门。服务端的第二次握手是为了回应客户端的第一次握手,向客户端表示:"我(服务端)能收到你(客户端)的报文",而客户端收到第二次握手后发起的第三次握手,也是为了回应服务端的第二次握手,是为了向服务端表示:"我(客户端)能收到你(服务端)的报文"。如果没有第三次握手,服务端就不确定:你(客户端)是否收到了我发出去的报文。

三次握手之后,双方都没有问题了,就可以开始通信了。

记忆点:

  1. 握手是为了建立连接
  2. 第一次握手是客户端发给服务端,为了破冰
  3. 第二次握手是服务端发给客户端,表示服务端能收到客户端发来的报文
  4. 第三次握手是客户端发给服务端,表示客户端能收到服务端发来的报文

四次挥手

上图中最下面的蓝色四个方框中就是四次挥手。挥手意味着告别,用于正常终止一个 TCP 连接。

第一次挥手,客户端发送 FIN 报文给服务端,表示我可以结束了。

第二次挥手,服务端发送 ACK 报文给客户端,表示服务端收到了客户端发来的结束报文。

第三次挥手,第二次挥手结束后,TCP 连接处于半关闭状态,这时客户端准备关闭连接了,但可能服务端还有数据没有发送完。等服务端将数据发送完毕后,服务端再发送 FIN 报文给客户端,表示服务端也可以结束了。

第四次挥手,客户端收到服务端的报文后,向服务端发送 ACK 报文,表示我收到了你发的结束报文,正式告别。

为什么要四次挥手?因为一方的数据发送完了,另一方可能还有数据要发送,双方都发送完,才能正式地告别。

客户端先向服务端第一次挥手,表示:"我(客户端)可以结束了",而服务端作为回应,向客户端发送了第二次挥手,表示:"我(服务端)知道了"。而后就是等待服务端把所有数据都发送给客户端之后,服务端再次向客户端发送第三次挥手,表示:"我(服务端)也可以结束了",客户端收到后,为表示礼貌(可靠),向服务端发送第四次挥手,表示:"我(客户端)也知道了"。

记忆点:

  1. 挥手是为了关闭连接
  2. 前两次挥手是客户端告知服务端可以结束了,服务端回应知道了
  3. 后两次挥手是服务端告知客户端可以结束了,客户端回应知道了

如果觉得有用,请点赞 + 收藏吧!

相关推荐
芯智工坊1 分钟前
第8章 Mosquitto消息高级特性
网络·人工智能·mqtt·开源·ssl
rOuN STAT7 分钟前
PLC(电力载波通信)网络机制介绍
开发语言·网络·php
芯智工坊11 分钟前
第7章 Mosquitto增加SSL/TLS加密通信
网络协议·https·ssl
EmbeddedCore12 分钟前
低成本物联网产品放弃SSL加密的隐形成本与市场逻辑
物联网·网络协议·ssl
数据知道17 分钟前
claw-code 源码详细分析:命令宇宙 vs 工具宇宙——`commands` / `tools` 镜像清单如何驱动路由与 shim 执行?
linux·服务器·网络·python·ai·claude code
婷婷_17220 分钟前
DWC Ethernet QoS VLAN功能实现详解
网络·学习·程序人生·ethernet·芯片·vlan·gmac
测试摆渡媛21 分钟前
UDS诊断
网络
minji...27 分钟前
Linux 多线程(三)线程控制,线程终止,线程中的异常问题
linux·运维·服务器·开发语言·网络·算法
Benszen32 分钟前
一些存储类型
网络·网络协议·rpc
vortex533 分钟前
一文厘清DDoS与CC攻击
网络·网络安全·渗透测试·ddos