TCP四次挥手

1,090 阅读2分钟

本文正在参与 “网络协议必知必会”征文活动

TCP四次挥手

四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开.在Socket编程中, 这个过程由客户端或者服务器任一方执行close来触发

image.png 由于TCP链接时是全双工,因此每个方向都必须要单独关闭,这个原则是当一方完成数据发送任务后,以发送FIN用来终止这个方向的链接,收到FIN只是代表这个方向没有数据流动了,不会在收到数据,但是在这个TCP链接中仍然可以发送数据,知道这个方向也发送了FIN,首先关闭的一方将主动关闭,而另外的一方则就那些被动关闭.

1.第一次挥手:客户端发送FIN标志位,序号为seq=W来关闭当前客户端到服务器的传送,客户端进入FIN_WAIT_1(终止等待1)的状态,TCP规定,FIN报文段即使不携带任何数据,也需要消耗一个序号
2.第二次挥手:服务器收到FIN标志位后,会发送一个ack给客户端,确认序号为收到的序号+1(与SYN相同,一个FIN占用一个序号),并且带上自己的序号seq=Y,服务器进入CLOSE_WAIT状态
3.第三次挥手:服务器发送FIN标志位,序号为seq=Y,来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态
4.第四次挥手:客户端收到FIN标志位后, 客户端进入TIME_WAIT状态,然后发送一个ACK =1,ack确认序号为收到的序号+1,既ack=Y+1.服务器只要收到客户端发出的确认标志, 则会立即进入CLOSED状态,完成四次挥手