TCP/IP四次挥手

TCP/IP四次挥手

TCP/IP四次挥手流程图:

图片.png

名词解释:
FIN(finish)结束

TCP状态解释:
ESTABLISHED (表示TCP连接已经成功建立)
FIN_WAIT_1 (结束等待1:表示客户端已向服务端发送了FIN连接释放报文段)
FIN_WAIT_2 (结束等待2:表示客户端已收到服务端的ACK确认报文段)
CLOSE-WAIT (关闭等待:表示服务端已向客户端发送ACK确认报文段,正在确认是否还有数据向客户端发送)
LAST-ACK   (最后确认:表示服务端已向客户端发送FIN连接释放报文段)
TIME-WAIT  (时间等待:表示客户端已向服务端发送ACK确认报文段,正在等待2MSL时间)
CLOSED (表示连接已关闭)

其他解释:
MSL (Maximum Segment Lifetime)(报文最大生存时间)
2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当客户端发起主动关闭,在客户端发出最后一个ACK确认报文段后,即第3次挥手完成后发送了第四次挥手的ACK确认报文段后,客户端就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕客户端的最后一个ACK确认报文段服务端没收到,那么服务端没收到客户端ACK确认报文段后将重发第三次挥手的FIN连接释放报文段,客户端接到服务端重发的FIN连接释放报文段后可以再发一个ACK确认报文段。如果直到2MSL结束,客户端都没有再次收到服务端的FIN连接释放报文段,那么客户端推断ACK已经被成功接收,则结束TCP连接。

说明:
TCP/IP四次挥手是可以两端任意发起的,因为TCP是全双工通信的,下面流程以客户端发起为例

第一次挥手
客户端向服务端发送(FIN=1 seq=u)连接释放报文段,等待服务端确认,客户端进入FIN_WAIT_1状态。(当客户端主动发起连接释放报文段时,客户端即无法发送数据给服务端

第二次挥手
服务端收到客户端(FIN=1 seq=u)连接释放报文段后,即发出确认报文段(ACK=1 seq=v ack=u+1),服务端进入CLOSE-WAIT状态,此时TCP处于半关闭状态。(客户端已没有数据发送到服务端,但服务端若有数据发送,客户端依然可以接收。

第三次挥手
客户端收到服务端(ACK=1 seq=v ack=u+1)确认报文段后,客户端进入FIN-WAIT-2状态,等待服务端的连接释放报文段(此时服务端正在确认是否有数据向客户端发送,有则发送,无则发送连接释放报文段
服务端确认无数据发送到客户端后,即发送连接释放报文段(FIN=1 ACK=1 seq=w ack=u+1),服务端进入LAST-ACK状态,等待客户端的确认报文段。

第四次挥手
客户端收到服务端(FIN=1 ACK=1 seq=w ack=u+1)连接释放报文段后,即发送确认报文段(ACK=1 seq=u+1 ack=w+1),客户端进入TIME-WAIT状态,此时TCP未释放,需要经过时间等待计时器设置的时间2MSL后,客户端才会进入CLOSED状态,而服务端收到客户端(ACK=1 seq=u+1 ack=w+1)确认报文段后,立即进入CLOSED状态。(可以发现服务端比客户端早进入CLOSED状态,因为客户端还需要等待2MSL时间才能进入CLOSED状态

猜你喜欢

转载自blog.51cto.com/jiay1/2590519