- 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
相关推荐
小马爱打代码4 小时前
微服务外联Feign调用:第三方API调用的负载均衡与容灾实战一只小鱼儿吖7 小时前
进程代理单窗口单IP技术:原理、应用与实现稳联技术7 小时前
Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动高兴达8 小时前
RPC框架--实现一个非常简单的RPC调用9527华安8 小时前
FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持码荼9 小时前
学习开发之hashmap武昌库里写JAVA9 小时前
Oracle如何使用序列 Oracle序列使用教程游戏开发爱好者810 小时前
iOS App首次启动请求异常调试:一次冷启动链路抓包与初始化流程修复2501_9151063210 小时前
频繁迭代下完成iOS App应用上架App Store:一次快速交付项目的完整回顾祁思妙想10 小时前
八股学习(三)---MySQL