三次握手和四次揮手


今天來聊一下事實標準協議TCP/IP中傳輸層裏TCP協議中,主機與服務器建立連接時的三次握手,和斷開連接時的四次揮手。

本博文分兩部分介紹,

   一:狀態詳解

   二:三次握手和四次揮手狀態介紹


這裏總共涉及到十種狀態,其實總共有十一種狀態,接下來分別介紹一下它們;

一:狀態詳解

CLOSED:關閉—>即沒有任何連接狀態

LISTEN:監聽狀態—>服務器隨時監聽着,看有沒有誰發來連接請求

SYN_SENT:同步發送—>客戶端在第一次握手時向服務器發送請求建立連接後的狀態

SYN_RECEIVED:同步接收—>服務器收到客戶端的請求後,在第二次握手中回覆客戶端確認信息並向其發送建立連接請求後的狀態(簡寫SYN_RCVD)

ESTABLISHED:已建立連接—>在客戶端收到服務端的確認及請求信號後,進行第三次握手即立刻回覆確認信息,並且雙方都立即進入到已建立連接狀態,準備數據傳輸

FIN_WAIT_1:關閉等待1—>第一次揮手中,客戶端主動向服務器端發送斷開連接請求後進入此狀態

FIN_WAIT_2:關閉等待2—>第二次握手中,客戶端收到來自服務器端發來的斷開連接確認信息後,進入關閉等待2狀態,等待服務器端發來斷開連接請求

TIME_WAIT:時間等待—>第三次揮手中,客戶端也收到服務器端發來的斷開連接請求後,立即回覆確認信息(第四次揮手),並進入此狀態

CLOSE_WAIT:等待關閉—>第一次揮手中,服務器端收到客戶端發來的斷開連接請求後,回覆其確認信息(第二次揮手),並進入此狀態

LAST_ACK:最後確認—>第三次揮手中,服務器端將數據整理結束後,發送斷開連接信號給客戶端,並等待其確認信息

CLOSING:關閉中—>雙方同時發送斷開連接,等待對方確認(這種狀態在三次握手和四次揮手裏並沒有表現)


二:三次握手和四次揮手狀態介紹

我在這裏將他們分爲服務器端和客戶端介紹 ,如下圖所示(圖是自己畫的,有點醜*-*,但畢竟是自己總結的,可以加深印象),圖一是客戶端的狀態裝換圖,圖二是服務器端的狀態裝換圖。

wKioL1nfLryQWdoiAADkgdsN2jw558.png

        圖一

wKiom1nfMZPiPIM7AAIGUeS7z9U600.png        圖二


紅色圈住的是客戶端的三次握手,黃色圈住的是四次揮手。

其實,我們可以想象一下,這就像談戀愛一樣(雖然我是單身,但大概過程還是瞭解的*-*),必須有一方是主動的,所以當你中意對方時,是不是要去試探一下對方是否也喜歡你呀,這時你就想用某種方式去表達,(就像是第一次握手中我們客戶端主動給服務器端發信號,說我想與你建立連接,即(SYN=1),然後就進入一個SYN_SENT發送信號的狀態),這時對方若對你也有意思的話是不是會給你個迴應呀,(這時就像第二次握手中,服務器端收到客戶端的請求信號後,若是想與他建立連接,就會給客戶端一個確認信號(ACK=1即收到了它發來的請求信號)並且也給客戶端一個請求連接信號(即我也想與你建立連接),然後進入SYN_RECEIVED(簡寫RCVD)接收狀態),然後這時,你們兩情相悅,是不是就可以建立正常男女朋友關係了?!!就可以明目張膽的來往了!!!(就像第三次握手中,客戶端也收到了服務器發來的確認信號和建立連接請求,一看服務器端也挺樂意與它建立連接的,那就趕緊建立連接唄,就立即給服務器端一個確認信號(ACK=1),並且雙方立即進入ESTABLISHED狀態,開始數據傳輸了)。這樣想想就簡單了是不是,


當然關閉連接的過程也一樣。我們就想象一下分手的時候(當然還是希望有情人終成眷屬,可以白頭偕老的,但是,總會有那麼些不愉快的事情發生是不是),分手也分很多種,有一方主動提出分手另一方被動接收的、有還沒說出分手就已經分開的(我的意思你懂的^-^)、還有雙方都準備分手的…….太多種,但今天就講一下,其中一方先主動分手的。我與你不愉快了,要分手了,那我就要主動給你一個分手信號“咱們不合適,分手吧”(就像第一次揮手,客戶端主動向服務器端發送了斷開連接信號(FIN=1分手信號),隨後客戶端就會進入FIN_WAIT_1關閉等待狀態1,而服務器進入CLOSE_WAIT等待關閉狀態),那你收到我的分手信息了,不管同不同意分手,是不是要給我一個迴應啊(比如說挽留啊、那剛好我也同意分手啊之類的),你說你收到了我的分手信息,讓我先屢屢(就像第二次揮手中,服務器端收到了客戶端的分手信號,就給她一個迴應(ACK=1),說我收到了,客戶端就會進入FIN_WAIT_2關閉等待2狀態),那要是你也考慮清楚了,反正想分手了,以後在一起也不開森,就開始將我們之間的帳算算(服務器回給客戶端確認信號後,就開始整理數據,該發的發完,該收的收回來),省的以後因爲某些東西拌嘴,分就分清楚,等你整理清楚了,那你也給我說了“好,那咱們就分手吧”(這時進入第三次揮手,服務器端也給客戶端一個分手信號(FIN=1),確定也要與它斷開連接,此時服務器端會進入LAST_ACK最後確認狀態(即等待客戶端回覆)),我已經下定決心跟你分手並且已經主動提出來了,所以當聽到你給我說分手後,我這邊會立即給你回覆“好”(第四次握手,客戶端收到服務器端發來的分手信息後,立即給出一個確認信息(ACK=1),並且客戶端會進入TIME_WAIT時間等待狀態(時間較長),然後再進入CLOSED狀態,服務器端收到客戶端的確認後,立即進入CLOSED狀態,隨機進入LISTEN監聽狀態,隨時等待其他主機訪問),分手結束,好聚好散。

本篇博客是從之前的178上挪過來的,http://www.178linux.com/85837這是之前的地址。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章