其他分享
首页 > 其他分享> > 三次握手和四次挥手

三次握手和四次挥手

作者:互联网

三次握手:

        第一次握手:

        首先客户端给服务端发送连接请求报文,在这个报文中,有SYN,seq=任意值i,发送之后就处于SYN-SENT状态。

        第二次握手:

        服务端接收到了这个请求,这个时候服务端确认了客户端的发送和自己的接收是没有问题的,之后返回给客户端SYN和ACK报文,且小ack=i+1,这个时候处于SYN-RCVD状态。

        第三次握手:

        客户端收到了服务端发送的ACK信息之后,确认了自己的发送。自己的接收、服务端的发送和服务端的接收是没有问题的,之后回给服务端一个ACK报文,之后建立连接,进established状态。且服务器收到客户端的ACK之后确认了客户端的接收和自己的发送没有问题的。

 

四次挥手

        第一次挥手:

        当客户端没有数据要发送给服务端的时候,就会给服务端发送一个FIN报文,告诉服务端:“我已经没有数据要发送了,但是你要是还想给我发数据的话,就接着发,但是要告诉我你接收到了FIN我关闭的消息”,之后,客户端进入了FIN_WAIT1状态。

        第二次挥手:

        当服务端收到了客户端发送来的FIN报文之后,就会回给客户端一个ACK消息,并且ack=seq+1,这是第二次挥手,挥手完之后服务端进入CLOSE_WAIT阶段,而客户端处于FIN_WAIT2状态。

        第三次挥手:

        当服务端发送完所有的数据时,他会给客户端发送一个FIN报文,告诉客户端“我已经传完所有数据,现在要关闭连接”,然后服务端编程LAST_ACK状态,等待着客户端最后的ACK信息。这是第三次挥手。

        第四次挥手:

        当客户端收到这个FIN报文时,就会给服务端发送ACK信息,之后进入TIME_WAIT状态,这是为了防止最后一次FIN报文丢失,保证服务器没收到ACK消息可以重传。而当服务端收到这个ACK信息之后就正式关闭了tcp连接,处于CLOSED状态。而客户端等待了2MSL之后还是没有收到消息就知道服务端已经关闭了,于是他自己就断开,这是第四次挥手。

 

标签:挥手,ACK,握手,发送,四次,FIN,报文,服务端,客户端
来源: https://blog.csdn.net/weixin_51768320/article/details/121728093