- TCP的三次握手:
- 一定由
客户端主动发起的,发生在建立连接的过程中。 - 此过程发生在
客户端的connect()函数和服务器的accept()函数之间。 - 第一次握手:
- 客户端向服务器发送一个
带有SYN标志的数据包,表示客户端请求建立连接。 - 并且客户端会
选择一个随机的序列号a放在SYN标志的数据包中,然后向服务器发送这个数据包。 - 第二次握手:
- 服务器收到客户端的请求后,会
回复一个带有SYN/ACK标志的数据包,表示服务器已经收到客户端的请求,并同意建立连接。 - 服务器会
选择一个随机的序列号b放在SYN标志的字段中,并且序列号a+1放在ACK标志的字段中,然后将数据包发送给客户端。 - 第三次握手:
- 客户端收到服务器的回复后,
会发送一个带有ACK标志的数据包,表示客户端确认已经收到了服务器的响应,并同意建立连接。 - 客户端
将服务器的序列号b+1放在ACK标志的字段中,然后将数据包发送给服务器。 - TCP的四次挥手:
- 由
主动关闭方(客户端或者服务器都可以扮演这个角色)发起的,发生在断开连接的过程中。 - 以
客户端主动发起断开连接为例: - 第一次挥手:
- 客户端向服务器发送一个
带有FIN/ACK标志的数据包,表示客户端请求与服务器断开连接。 - 并且客户端会
选择一个随机的序列号a放在FIN/ACK标志的数据包中,然后向服务器发送这个数据包。 - 第二次挥手:
- 服务器收到客户端的请求断开连接后,会
回复一个带有ACK标志的数据包,表示服务器已经收到客户端的请求,并且序列号a+1放在ACK标志的字段中,然后将数据包发送给客户端。 - 第三次挥手:
- 服务器向客户端发送一个
带有FIN/ACK标志的数据包,通知客户端,服务器要关闭了。 - 并且服务器会
选择一个随机的序列号b放在FIN/ACK标志的数据包中,然后向客户端发送这个数据包。 - 第四次挥手:
- 客户端收到服务器的断开连接信号后,会
回复一个带有ACK标志的数据包,表示客户端已经收到服务器的请求,并且序列号b+1放在ACK标志的字段中,然后将数据包发送给服务器。 - TCP的三次握手和四次挥手,抓包如下图所示:

C/S架构学习之TCP的三次握手和四次挥手
李十五哥2023-10-08 1:40
相关推荐
HelloWorld0011 小时前
首屏加载慢如蜗牛?基于 Rust SWC + Module Federation + 资源预加载打造极致丝滑微前端架构实战用户094248568031 小时前
第22章:Redis 持久化 RDB 与 AOF:数据不丢的底线Decay__2 小时前
22_MySQL 运维自动化平台 —— 部署编排 + 监控 + 巡检 + 告警 + 工单闭环一体化沫璃染墨3 小时前
从零入门计算机网络系列(十四):TCP报文与字节流本质——从数据封装到报文边界Cosolar3 小时前
极简智库(MiniDocs):docsify、VitePress、Notion 等知识库搭建服务的完美替代Decay__4 小时前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比vipxieliang4 小时前
事件驱动架构实战:解耦、异步与可扩展性byte轻骑兵5 小时前
【LMP】规范精讲[13]: 参数的户口本、公钥的集装箱与出厂的兜底值流浪0015 小时前
计算机网络篇17:传输层——TCP 超时重传、三次握手与四次挥手,TIME_WAIT 为什么要等 2MSLmldong6 小时前
同一个节点接力办几轮,流程才往下走:jeeflow 的后加签