TCP協議是傳輸控制協議,是以=一個面向連接,在運用此協議進行數據傳輸的時候會進行連接工作 ,(三次握手)當傳輸完畢後,雙方都會通知彼此釋放連接(四次揮手)。
TCP標誌位:
SYN (建立聯機)
ACK (確認)
PUSH (傳送)
FIN (結束)
RST (重置)
URG (緊急)
Sequence number (順序號碼)
Acknowledge number (確認號碼)
圖解TCP 三次握手與揮手:
三次握手過程:
第一次握手:
hsot1發送一個TCP標誌位,SYN =1 的數據包 ,並隨機產生一個 seq number 的數據包發送給host2, 當host2接收到這個數據後,host2根據SYN=1 可知客戶端(host1)想要建立連接。
第二次握手:host2 要對客戶端(host1)請求進行確認,向host1 發送 ack number=(host1的 seq number+1),ACK = 1,SYN=1 並隨機產生一個seq number 的數據包,這樣就告訴host1 可以進行連接。
第三次握手:
host1收到後會檢查ack number 是否正確 ,即第一次發送的seq number+1 以及碼 ACK =1 ,若正確host1會發送ACK=1和 ack number =(host2 的seq+1),若主機B 收到確認seq number 值與ack=1 則連接建立成功。
一個完整的三次握手就是 請求-----應答------再次確認
四次揮手的過程:
由於TCP 連接是全雙功的,因此每一個方向都必須進行單獨關閉,這個原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向上的連接。
第一次揮手:
當傳輸的數據到達數據的尾部的時候,host1 向host2 發送FIN=1 標誌位,可以理解成host1 向host2說,我這邊數據已經傳輸完成,準備斷開連接。
第二次揮手:
因爲TCP的連接需要從兩邊關閉,當host2收到host1發送的FIN=1 標誌位後,host2不會立刻向host1發送FIN=1的請求關閉信息,而是向host1發送一個ACK應答信息,表示 :你請求關閉請求我已經收到,但我可能還有數據沒有完成,你在等下,等待數據除傳輸完畢後就會告訴你。
第三次揮手:
當host2 數據傳輸完後,向host1發送FIN=1,host1收到請求關閉連接的請求後,host1 就明白host2數據已經傳輸完成,可以斷開連接。
第四次揮手:
Host1收到FIN=1 ,hos1還是怕有與網絡不穩定的原因,怕host2不知道自己要斷開連接,於是向host2發送ACK=1 ,確認信息進行確認,把自己設置爲TIME_WITE狀態並啓動定時器,如果host2沒有收到ACK ,host2端的定時器到達後,會要求host1重新發送ACK,當host2收到ACK後就會斷開連接,當host1等待2mls(兩倍報文最大生存時間)後沒有收到重傳請求,就知道host2已收到ACK,所以host1此時關閉自己。
在TCP 連接的建立與釋放的過程中,host1 與host2 並沒有嚴格客戶端與服務器端之分,誰先發起請求誰就是客戶端。
本篇博文主要參考http://zhaochj.blog.51cto.com/368705/1317226 感謝,感謝 感謝。