首先上图(包括3次握手和4次挥手):
1、TCP三次握手
SYN、ACK状态解释:1表示是,0表示否。
(1)第一次握手:client端向server端发送一个syn=1和一个随机生成的seq number。
(2)第二次握手:server端收到了client端的syn码和seq之后,回复 ack number=client端的seq+1、随机生成的seq number、syn=1、ACK=1。
(3)第三次握手:client端收到server端回复之后,确认ack number的值和ACK是否=1,如果正确,则发送ACK=1、ack number = server端seq+1,server端收到确认无误之后建立连接。
2、TCP四次挥手
假设client端首先断开连接。
(1)第一次挥手:client端发送一个fin报文,之后进入FIN_WAIT_1状态。
(2)第二次挥手:server端收到fin文之后,回复ack表示收到报文,之后关闭server端的receive通道,进入CLOSE_WAIT状态。
client端收到server端的ack之后,关闭client端的send通道,进入FIN_WAIT_2状态。
(3)第三次挥手:server端发出fin,请求断开连接,进入LAST_ACK状态。
(4)第四次挥手:client段收到fin,回复ack,之后关闭client端的receive通道,进入TIME_WAIT状态(经过2*MSL之后进入CLOSED)。
server端收到ack之后关闭send通道,进入CLOSED状态。至此TCP4次挥手结束。
对第四次挥手发送ACK之后还要等待2*MSL时间才关闭的解释
我们假想网络传输是不可靠的,第四次挥手发送的ACK可能丢失,这样server端收不到ACK报文,则server端需要等超时之后重新发送FIN报文。2MSL就是给丢包情况下重新发送fin和ack的时间。
tips:MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,一般为30S、1分钟或2分钟。
来源:CSDN
作者:张小云_cloud
链接:https://blog.csdn.net/qq_42224081/article/details/84973930