創建 TCP 須要三次握手才能創建,而斷開鏈接則須要四次握手。整個過程以下圖所示:
html
首先 Client 端發送鏈接請求報文,Server 段接受鏈接後回覆 ACK 報文,併爲此次鏈接分配資源。Client 端接收到 ACK 報文後也向 Server 段發生 ACK 報文,並分配資源,這樣 TCP 鏈接就創建了。swift
斷開鏈接端能夠是 Client 端,也能夠是 Server 端。假設 Client 端發起中斷鏈接請求,就先發送 FIN 報文。Server 端接到 FIN 報文後,可是若是還有數據沒有發送完成,則沒必要急着關閉 Socket,能夠繼續發送數據。因此服務器端先發送 ACK,告訴 Client 端:請求已經收到了,可是我還沒準備好,請繼續等待中止的消息。這個時候 Client 端就進入 FIN_WAIT 狀態,繼續等待 Server 端的 FIN 報文。當 Server 端肯定數據已發送完成,則向 Client 端發送 FIN 報文,告訴 Client 端:服務器這邊數據發完了,準備好關閉鏈接了。Client 端收到 FIN 報文後,就知道能夠關閉鏈接了,可是他仍是不相信網絡,因此發送 ACK 後進入 TIME_WAIT 狀態, Server 端收到 ACK 後,就知道能夠斷開鏈接了。Client 端等待了 2MSL 後依然沒有收到回覆,則證實 Server 端已正常關閉,最後,Client 端也能夠關閉鏈接了至此,TCP 鏈接就已經徹底關閉了!關閉鏈接的過程以下圖所示:
服務器