計算機網絡TCP“三次握手”


終於有時間寫這篇文章了,最近真的比較忙!

TCP協議  三次握手

  引言:我們知道,TCP是面向連接的協議(相較於UDP無連接的協議),會在傳送數據之前先在 發送端 & 接收端 之間建立一條連接,所以實現了可靠傳輸。而運輸鏈接是用來傳送TCP報文的。TCP運輸連接的建立,是面向連接的通信協議傳送數據之前必需的一個步驟。

 一次傳輸涉及到三個步驟:

  • 建立連接(本篇所涉及)
  • 傳送數據
  • 釋放連接

  在建立連接時,有趣的“三次握手”就粉墨登場了。

  所謂三次握手,其實是發送端&接收端在傳送數據之前的 一次握手,發送了三次報文而已。下面具體說明連接建立(握手)的過程。

  Notice:發送端以及接收端 通常指 客戶端和它所請求的服務器,書上一般是這樣寫的,但這里我還是采用 發送端&接收端 來敘述。

  在傳送之初,發送端進程(應用層) 先創建傳輸控制塊(Transmission Control Block, TCB)。當要向某端發送數據(TCP報文段)時:

發送端:--------------------1

  發出連接請求報文段(規定不能攜帶數據,但要消耗序號,以便識別應答報文段)先將報文段首部的 同步位SYN = 1, 並選擇一個初始序號 seq = x, 發出此報文段(發送端口&目的端口等也要設置好),進入 SYN-SENT(同步請求已發送)狀態。

接收端:(此前一直處於Liscen 偵聽狀態,就像服務器一樣)----------------------2

  收到連接請求報文段后,若同意連接(就像服務器允許訪問,不允許就返回錯誤碼),向發送端 發送確認連接報文段:同樣 同步位SYN = 1,確認位 ACK = 1(表明確認報文段有效/這是有效回答報文段), 同樣需要選擇報文序號 seq = y, 應答號ack = x+1(表明是對序號x的請求報文段的確認應答),向原發送端發出此報文段(端口要綁定好),進入SYN-RCVD(同步接受)狀態。

發送端:--------------------3

  收到確認連接報文段后,再次向接收端給出確認(Why?后續文章會解釋):已經達到了同步,於是此報文段就不再需要SYN,直接 確認ACK = 1 seq = x+1ack = y+1,發送報文段。發送端進入ESTABLISHED(運輸連接已建立)狀態。

接收端

  收到發送端的確認后,進入ESTABLISHED(運輸連接已建立)狀態。(未發送報文,不算在內)

  傳送數據......

  釋放連接......(后面文章)。

  其實,在我看來,“三次握手”即“三報文握手”,就像是 表白 一樣。下面是有趣的理解:

“三次握手”------表白版

男生:---------------------1

  “小姐姐, 我喜歡你, 你喜歡我嗎?”  SYN=1, seq=x                進入表白發送完成狀態

漂亮姐姐: --------------2

  (如果同意)“啊!是嗎!我也喜歡你呢!”  SYN=1, ACK=1, seq=y, ack=x+1   進入表白接受狀態

男生:---------------------3

  “那小姐姐以后就是我的啦!” ACK=1, seq=x+1, ack=y+1            進入戀愛狀態

漂亮姐姐:進入戀愛狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM