TCP/IP的三次握手與四次揮手詳解

原文:http://blog.csdn.net/whuslei/article/details/6667471

TCP((Transmission Control Protocol)傳輸控制協議,是一個面向連接的協議。在運用此協議進行數據傳輸前都會進行連接的建立工作(三次握手);當數據傳輸完畢,連接的雙方都會通知對方要釋放此連接(四次揮手)。

認識TCP標誌位

tcp標誌位有6種標示:

SYN(synchronous建立聯機)

ACK(acknowledgement 確認)

PSH(push傳送)

FIN(finish結束)

RST(reset重置)

URG(urgent緊急)

圖解TCP與UDP的三次握手與四次揮手過程
這裏寫圖片描述
三次握手過程:

第一次握手:host1發送一個TCP標誌位SYN=1、ACK=0的數據包給host2,並隨機會產生一個Sequence number=3233.當host2接收到這個數據後,host2由SYN=1可知客戶端是想要建立連接;

第二次握手:host2要對客戶端的聯機請求進行確認,向host1發送應答號ACK=1、SYN=1、

確認號Acknowledge number=3234,此值是host1的序列號加1,還會產生一個隨機的序列號Sequence number=36457,這樣就告訴host1可以進行連接;

第三次握手:host1收到數據後檢查Acknowledge number是否是3233+1的值,以及ACK的值是否爲1,若爲1,host1會發送ACK=1、確認號碼Acknowledge number=36457,告訴host2,你的請求連接被確認,連接可以建立。

四次揮手過程:

第一次揮手:當傳輸的數據到達尾部時,host1向host2發送FIN=1標誌位;可理解成,host1向host2說,我這邊的數據傳送完成了,我準備斷開了連接;

第二次揮手:因TCP的連接是全雙工的雙向連接,關閉也是要從兩邊關閉;當host2收到host1發來的FIN=1的標誌位後,host2不會立刻向host1發送FIND=1的請求關閉信息,而是先向host1發送一個ACK=1的應答信息,表示:你請求關閉的請求我已經收到,但我可能還有數據沒有完成傳送,你再等下,等我數據傳輸完成了我就告訴你;

第三次揮手:host2數據傳輸完成,向host1發送FIN=1,host1收到請求關閉連接的請求後,host1就明白host2的數據已傳輸完成,現在可以斷開連接了,

第四次揮手:host1收到FIND=1後,host1還是怕由於網絡不穩定的原因,怕host2不知道他要斷開連接,於是向host2發送ACK=1確認信息進行確認,把自己設置成TIME_WAIT狀態並啓動定時器,如果host2沒有收到ACK,host2端TCP的定時器到達後,會要求host1重新發送ACK,當host2收到ACK後,host2就斷開連接;當host1等待2MLS(2倍報文最大生存時間)後,沒有收到host2的重傳請求後,他就知道host2已收到了ACK,所以host1此時才關閉自己的連接。這一點我覺得設計得非常巧妙!

整個過程host1端所經歷的狀態如下:
這裏寫圖片描述

host2所經歷的過程如下:
這裏寫圖片描述

總結:以前對TCP的三次握手與四次揮手沒有進行深入的理解,只是一知半解,現在參照網上的一些資料寫了此博文,對此知識點有了深刻認識。在TCP連接的建立與釋放的過程中,host1與host2並沒有嚴格的客戶端與服務器之分,誰先發起請求,那就是客戶端。

發佈了9 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章