四次挥手,为什么是四次?
上一篇博客说了三次握手为什么是是三次( 点这里 ),那么现在就介绍一下四次挥手。大家都知道TCP是全双工的,再建立连接时的三次握手中的FIN和ACK一起发送,这里就会有疑问,为什么在四次挥手的时候没有将FIN和ACK一起发送呢?带着这个问题继续向下看,答案就在其中。 说到四次挥手,顾名思义,就是在关闭连接的时候双方一共要操作四次,来看一下这四次都是怎么操作的: 从图中可以看出来,在四次挥手的时候双方一共进入了六种状态,这六种状态就是理解四次挥手的关键所在,我们来看一下 四次挥手的状态 FIN_WAIT_1:这个状态和FIN_WAIT_2状态都在再等待对方的回复,但是这两种状态是有区别的, FIN_WAIT_1就是主动方在ESTABLISHED状态的时候,想要主动关闭连接,向对方发送FIN报文,这时候就进入了FIN_WAIT_1状态。当他收到对方回复的ACK报文后,就进入了FIN_WAIT_2状态。 但是在实际操作中是很难遇到FIN_WAIT_1状态的,因为无论对方是什么情况都应该立刻回应ACK报文,但是FIN_WAIT_2状态还是可以在主动方中用netstat看到的。 FIN_WAIT_2:上面已经对FIN_WAIT_2讲解过了,当主动方进入FIN_WAIT_2时,就表示着半连接状态,也就是主动方还有数据要发给对方,这个数据就是之后的ACK,所有他要等一会儿才关闭连接。