1. 程式人生 > >TCP三次握手四次揮手介紹

TCP三次握手四次揮手介紹

通訊基本流程

我們都知道TCP協議是面向連線的協議,可以保證資料不丟失,不重複,不亂序的到達接收方。TCP的通訊過程大概是下圖所示。
TCP三次握手四次揮手介紹TCP三次握手四次揮手介紹
上圖為TCP整個完整的通訊過程,首先經過三次握手建立連線(綠色部分),連線建立後可以正常通訊(藍色部分),通訊完畢需要四次揮手斷開連線(紅色部分)。

三次握手

三次握手可以這麼理解:

TCP客戶端是男孩子,TCP伺服器是女孩子,男孩子要追女孩子,首先要建立戀愛關係。需要一個建立戀愛關係的過程。

男孩:我們可以戀愛嗎?(客戶端請求伺服器建立連線)

女孩:你想追我?想清楚了!(伺服器要求客戶端確認連線)

男孩:沒錯,你就是我的夢中情人!(客戶端確認連線)

三次握手確立了TCP伺服器和客戶端的“戀愛關係”。為什麼需要三次握手,兩次握手不行嗎?從通訊角度看,對於客戶端兩次就夠了,但對於伺服器不夠,因為,兩次握手伺服器僅僅知道客戶端和伺服器之間的通道是通的,但伺服器和客戶端之間還未知,所以需要收到客戶端發來的確認訊息雙方才能確認雙方的訊息通路都是ok的。
TCP三次握手四次揮手介紹TCP三次握手四次揮手介紹

四次揮手

對於連線的斷開需要四次揮手,可以理解為男孩和女孩要分手,需要經過一番如下商量。

男孩:我們不合適,我們分手吧。(客戶端已經沒有資料可以傳輸)

女孩:什麼?這麼快就分手了,不能這麼快完,我要給你算總賬!(伺服器這端還有未傳送完的資料)

女孩給男孩算賬中……(沒有傳送完的資料繼續傳輸)

女孩:算好了,分手!(伺服器這端資料傳輸完畢)

男孩:好的,我們從今後還是朋友……(等待Time_Wait時間到,恢復單身)
TCP三次握手四次揮手介紹TCP三次握手四次揮手介紹
這裡有個注意的點是,客戶端在收到伺服器傳送的資料傳輸完畢的訊息後(第三次揮手),不能立即關閉連線(恢復單身,尋找新歡),必須等待2MSL時間才能關閉,因為這期間最後一次揮手伺服器未必能收到,如果沒有收到,伺服器會重新發送第三次揮手的訊息,這時候如果客戶端關閉,將無法迴應第四次揮手訊息,使得四次揮手