趣解TCP三次握手四次揮手
學過計算機網絡的同學都知道TCP協議是計算機網絡課程里面最復雜的協議之一,還沒有通信就要搞個什么三次握手,斷開還要什么四次分手,中間還要什么流量控制啦,擁塞控制,滑動窗口什么的,初學者看了就會頭暈。我們這篇短文先對三次握手和四次揮手做個介紹,然后對TCP協議的其他內容在后面的文章陸續介紹。
通信基本流程
我們都知道TCP協議是面向連接的協議,可以保證數據不丟失,不重復,不亂序的到達接收方。TCP的通信過程大概是下圖所示。
上圖為TCP整個完整的通信過程,首先經過三次握手建立連接(綠色部分),連接建立后可以正常通信(藍色部分),通信完畢需要四次揮手斷開連接(紅色部分)。
三次握手
三次握手可以這么理解:
TCP客戶端是男孩子,TCP服務器是女孩子,男孩子要追女孩子,首先要建立戀愛關系。需要一個建立戀愛關系的過程。
男孩:我們可以戀愛嗎?(客戶端請求服務器建立連接)
女孩:你想追我?想清楚了!(服務器要求客戶端確認連接)
男孩:沒錯,你就是我的夢中情人!(客戶端確認連接)
三次握手確立了TCP服務器和客戶端的“戀愛關系”。為什么需要三次握手,兩次握手不行嗎?從通信角度看,對于客戶端兩次就夠了,但對于服務器不夠,因為,兩次握手服務器僅僅知道客戶端和服務器之間的信道是通的,但服務器和客戶端之間還未知,所以需要收到客戶端發來的確認消息雙方才能確認雙方的消息通路都是ok的。
三次握手
四次揮手
對于連接的斷開需要四次揮手,可以理解為男孩和女孩要分手,需要經過一番如下商量。
男孩:我們不合適,我們分手吧。(客戶端已經沒有數據可以傳輸)
女孩:什么?這么快就分手了,不能這么快完,我要給你算總賬!(服務器這端還有未發送完的數據)
女孩給男孩算賬中……(沒有發送完的數據繼續傳輸)
女孩:算好了,分手!(服務器這端數據傳輸完畢)
男孩:好的,我們從今后還是朋友……(等待Time_Wait時間到,恢復單身)
這里有個注意的點是,客戶端在收到服務器發送的數據傳輸完畢的消息后(第三次揮手),不能立即關閉連接(恢復單身,尋找新歡),必須等待2MSL時間才能關閉,因為這期間***一次揮手服務器未必能收到,如果沒有收到,服務器會重新發送第三次揮手的消息,這時候如果客戶端關閉,將無法回應第四次揮手消息,使得四次揮手過程無法完成。