目录
想要了解三次握手的话可以参考我的另外一篇博客
首先来了解一下FIN和ACK
FIN
ACK
接着我们再来具体的了解TCP四次挥手过程
转换为最最通俗理解方法:
想要了解三次握手的话可以参考我的另外一篇博客
【TCP】三次握手(最强详解!!通俗易懂!!)_是瑞穗的猫啊的博客-CSDN博客
首先来了解一下FIN和ACK
FIN和ACK就是两个用于关闭连接过程中的两个信号量
FIN
FIN代表的就是结束的意思,发起了一个关闭的信号
- 可以将FIN视为“告别”的信号,用于开始关闭TCP连接的过程。
- 当一方决定关闭连接时,它会发送一个带有FIN标志的包给对方,表示自己不会再发送数据。
- 发送FIN包的一方仍然可以接收数据,但不能再发送数据给对方。
- FIN包中的序列号字段指示发送者发送完数据后的下一个序列号。
ACK
ACK和三次握手过程中的一样,也是代表了确认的标志
- 在TCP通信中,ACK用于确认已收到的数据或请求。
- 当一方接收到带有FIN标志的包时,需要向对方回复一个带有ACK标志的包,表示已成功接收到了FIN包。
- 这个ACK包中的确认号字段设置为接收到的FIN包的序列号加1,表示已经成功接收到了FIN包。
接着我们再来具体的了解TCP四次挥手过程
第一次挥手(A发送FIN):
- A向B发送一个带有FIN(结束)标志位的包,表示A已经发送完所有数据,并请求关闭连接。
- A将序列号设为X,此时A不能再向B发送数据。
最开始的时候是连接状态,我们需要将其断开TCP的连接
第二次挥手(B发送ACK):
- B收到A的FIN包后,向A回复一个带有ACK(确认)标志位的包,表示已经收到了A的关闭请求。
- 确认号字段设置为A的序列号X加1,表示B期望接收到下一个字节的序列号。
第三次挥手(B发送FIN):
- B发起关闭连接过程,向A发送一个带有FIN标志位的包,表示B已经发送完所有数据,并请求关闭连接。
- B选择一个随机的序列号Y,并将其放入包的序列号字段,表示B不会再向A发送数据。
第四次挥手(A发送ACK):
- A收到B的FIN包后,向B回复一个带有ACK标志位的包,表示已经收到了B的关闭请求。
- 确认号字段设置为B序列号Y加1,表示A期望接收到下一个字节的序列号。
等待2MSL时间后断开连接
成功断开连接
转换为最最通俗理解方法:
A:再见,我要关闭了(FIN)
B:我知道了(ACK)
给 B 一段时间把自己的事情处理完...
B:再见,我要关闭了(FIN)
A:我知道了(ACK)