简述TCP三次握手,四次挥手

前言:

通常大多数认为三次握手、四次挥手是HTTP协议产生的。这是一个错误的认知,实际上HTTP协议并不参与握手以及挥手过程,三次握手四次挥手均是在TCP协议层上进行的,而HTTP协议只是在已建立 TCP连接的基础上,进行通信的。

握手过程:

【第一次握手】:

客户端向服务端发送一个带有SYN(同步序列编号)标致的数据包给服务器,表示客户端请求连接,此时客户端进入SYN_SENT 状态。

SYN数据包中,seq表示初始序列号,SYN=1,表示客户端希望建立连接。

【第二次握手】:

服务端在收到客户端建立连接的SYN请求之后,会发送一个带有SYN/ACK(同步/确认序列编号)标致的数据包给客户端。此时服务端进入SYN_RECIVED 状态。

SYN/ACK包中,seq代表服务器的初始序列号;ack代表的是确认号,具体值为客户端发送的SYN数据包的初始序列号加1,表示服务器已经成功接受到了客户端的SYN请求,并且准备好建立连接。SYN标志为1,表示服务端愿意建立连接。ACK标志为1,表示对客户端的 SYN请求进行确认。

【第三次握手】:

客户端在收到服务端发送的SYN/ACK(同步/确认序列编号)标致的数据包后,会发送一个带有ACK(确认序列编号)标志的数据包给服务器,表示客户端接受连接。服务器接收到客户端发送的ACK(确认序列编号)的包后,双方建立连接。服务器进入ESTABLISHED状态,客户端也进入ESTABLISHED状态。

ACK数据包中,seq代表序列号 ,表示客户端期望从该序列号发送数据;ack表示确认号 ,具体值为服务端发送的SYN/ACK数据包中的序列号+1;ACK标志为1,表示对服务器的SYN/ACK响应进行确认。

挥手过程:

【第一次挥手】:

客户端向服务器发送一个FIN(结束)标志数据包,表示客户端不再发送数据,但是仍可以接收数据。客户端进入"FIN_WAIT_1"状态。

FIN包中ACK标志为1,表示发送方不再发送数据,希望关闭连接,ACK标志为1表示希望接收方确认收到FIN包。seq表示发送方当前发送数据的最后一个字节的序列号。

【第二次挥手】:

服务器收到客户端发送的FIN结束包后,发送一个带有ACK(确认)标志的包给客户端,表示服务端已经收到了客户端要关闭连接的请求。服务端进入"CLOSE_WAIT"状态,客户端进入"FIN_WAIT_2"状态。

ACK包中seq,表示接收方当前发送数据的最后一个字节的序列号,ACK标志为1,表示确认收到了客户端发送的FIN包,ack表示确认号,具体值为FIN包的初始序列号+1

【第三次挥手】:

服务器决定关闭连接,会在发送一个FIN标志的数据包给客户端,表示服务器不在接收数据,进入"LAST_ACK"状态

FIN包中seq表示发送方当前发送数据的最后一个字节的序列号。ACK标志为1,表示确认收到了客户端发送的FIN包,FIN为1,表示不再发送数据,ack为确认号,为客户端发送的FIN包的初始序列号+1

【第四次挥手】:

客户端收到服务器的FIN包后,会发送一个ACK标志的数据包给服务器,表示客户端确认收到了服务器的关闭请求。客户端进入"TIME_WAIT"状态,等待服务器端收到ACK包之后,进入"CLOSED"状态,此时服务器端也进入"CLOSED"状态

ACK中seq表示序列号,接收方当前发送数据的最后一个字节的序列号。ACK标志为1,表示确认收到了服务端的FIN包,ack表示确认号,值为客户端的初始序列号+1

复制代码
                                                                                   学海无涯
相关推荐
迎風吹頭髮3 小时前
UNIX下C语言编程与实践58-UNIX TCP 连接处理:accept 函数与新套接字创建
c语言·网络·unix
猫头虎7 小时前
如何查看局域网内IP冲突问题?如何查看局域网IP环绕问题?arp -a命令如何使用?
网络·python·网络协议·tcp/ip·开源·pandas·pip
hello_25010 小时前
动手模拟docker网络-bridge模式
网络·docker·桥接模式
武文斌7710 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
爱吃喵的鲤鱼10 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
爱吃小胖橘11 小时前
Unity网络开发--超文本传输协议Http(1)
开发语言·网络·网络协议·http·c#·游戏引擎
萧鼎11 小时前
Python schedule 库全解析:从任务调度到自动化执行的完整指南
网络·python·自动化
7哥♡ۣۖᝰꫛꫀꪝۣℋ12 小时前
网络层--数据链路层
网络·tcp/ip·智能路由器
_清浅12 小时前
计算机网络【第四章-网络层】
网络·计算机网络·智能路由器
沐浴露z12 小时前
【深入理解计算机网络08】网络层之IPv4
网络·计算机网络·网络编程·信息与通信·408