如图5.10和图5.11所示,在TCP协议中通常采用四次挥手(Four-Way Handshake)的方法来释放一个TCP连接,其中:
◆ 第一次挥手(主动方发送连接释放请求报文FIN):主动方发送设置了FIN位的连接释放请求报文,表示希望主动终止从主动方到远端的单向连接。此时,主动方进入FIN_WAIT1状态(已经发送关闭请求FIN,等待确认),等待远端回复对该FIN报文的确认报文ACK。
◆ 第二次挥手(远端发送确认报文ACK):远端收到FIN报文之后,会立即发送一个ACK报文,然后进入CLOSE-WAIT状态(收到对方关闭请求,已经确认),此时,从本地到远端的单向连接正式终止,远端将不再从该连接接收报文。而主动方在收到远端回送的ACK报文后将进入FIN WAIT2状态(收到对方关闭确认报文ACK,等待对方关闭请求报文FIN),在该状态下,主动方不再通过该连接发送报文,但仍可以接收来自远端的报文,因此,实际上是处于一种HALF-CLOSE连接状态。
◆ 第三次挥手(远端发送连接释放请求报文FIN):当远端进行了最终的数据发送之后,将发送一个FIN报文,表示从远端到主动方的单向连接也将要关闭,同时,远端进入到LAST ACK状态(等待主动方的最终确认报文到来)。
◆ 第四次挥手(主动方发送确认报文ACK):主动方在收到远端回复的FIN报文之后,回应一个ACK报文,远端就此进入CLOSED状态,该TCP连接正式完全关闭。而为了防止主动方最后发出的ACK丢失,由此导致远端因LAST_ACK超时而出现重发FIN的情形,主动方会在发送完ACK报文之后进入到TIME_WAIT状态。
图5.10 使用四次挥手法释放TCP连接的过程
图5.11 使用四次挥手法释放TCP连接过程的形象示意
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。