四次挥手的流程
1.主动方打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,即FIN报文,之后主动方进入FIN_WAIT_1状态。
2.被动方收到该报文后,就立刻向主动方发送ACK应答报文(因为后面要处理完数据再回复FIN,这里立刻先回复一个ACK是为了防止主动方的FIN超时重传),接着被动方进入CLOSE_WAIT状态。
3.主动方收到被动方的ACK应答报文后,进入FIN_WAIT_2状态。
4.等待被动方处理完数据后,也向主动方发送FIN报文,之后被动方进入LAST_ACK状态。
5.主动方收到被动方的FIN报文后,回复一个ACK应答报文,之后进入TIME_WAIT状态。
6.被动方收到ACK应答报文后,就进入了CLOSED状态,至此被动方已经完成了连接的关闭。
7.主动方在TIME_WAIT状态后经过2MSL(两倍的报文段最大存活时间)的时间,自动进入CLOSED状态至此主动方也已经完成连接的关闭。
2MSL是什么?为什么要等待2MSL再关闭?
2MSL是两倍的报文段最大存活时间是,等待2MSL再关闭因为要防止回复的ACK丢失,如果丢失那么被动方就会不断重传FIN,而如果此时主动方直接关闭了,也就不会再接收到这个FIN不会再回复ACK,那么被动方就无法完成关闭的操作,等2MSL,如果ACK丢失被动方再发送一个FIN主动方就会收到,再重新发一个ACK。
为什么被动方收到主动方的FIN报文后要立刻回复一个ACK报文?
因为后面要处理完数据再回复FIN,这里立刻先回复一个ACK是为了防止主动方的FIN超时重传
三次握手和四次挥手的本质是什么?
三次握手的本质是确认通信双方收发数据的能力 。 四次挥手的目的是关闭一个连接 。