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