天天看點

三次握手和四次揮手

  三次握手(Three-Way Handshake):

(1)序号:Seq序号,占32位,用來辨別從TCP源端向目的端發送的位元組流,發起方發送資料時對此進行标記。

  (2)确認序号:Ack序号,占32位,隻有ACK标志位為1時,确認序号字段才有效,Ack=Seq+1。

  (3)ACK:确認序号有效。

  (4)SYN:發起一個新連接配接。

  (5)FIN:釋放一個連接配接。

注意:

  (1)不要将确認序号Ack與标志位中的ACK搞混了。

  (2)确認方Ack=發起方Seq+1,兩端配對。 

建立一個TCP連接配接時,需要用戶端和服務端總共發送3個包以确認連接配接的建立。

<a href="https://s4.51cto.com/wyfs02/M01/9D/7F/wKioL1mBNinxc2EHAAByTR2Kx88033.png-wh_500x0-wm_3-wmp_4-s_2583951537.png" target="_blank"></a>

(1)第一次握手:用戶端發送一個SYN段指明客戶打算連接配接的伺服器端口,将标志位SYN置為1,随機産生一個值seq=x,并将該資料包發送給伺服器

(2)第二次握手:伺服器收到資料包後由标志位SYN=1知道用戶端請求建立連接配接,伺服器将确認序列号設定為用戶端的Seq加1以對客戶的SYN封包段進行确認,并随機産生一個值seq=y,并将該資料包發送給用戶端以确認連接配接請求

(3)第三次握手:用戶端收到後,必須将确認序列号設定為伺服器的Seq加1以對伺服器的SYN封包段進行确認,用戶端和伺服器進入ESTABLISHED狀态,完成三次握手,随後Client與Server之間可以開始傳輸資料了。

          四次揮手(Four-Way Wavehand)

指斷開一個TCP連接配接時,需要用戶端和服務端總共發送4個包以确認連接配接的斷開。

(1)第一次揮手:首先主動方發送第一個FIN執行主動關閉,用來關閉用戶端到伺服器的資料傳送。

(2)第二次揮手:被動方收到主動方主動關閉的資料後,發送一個ACK給主動方,确認序号為收到序号+1(與SYN相同,一個FIN占用一個序号)。

(3)第三次揮手:伺服器發送一個FIN,用來關閉伺服器到用戶端的資料傳送。

(4)第四次揮手:用戶端收到FIN後,接着發送一個ACK給S伺服器,确認序号為收到序号+1,到此,四次揮手完成。

<a href="https://s5.51cto.com/wyfs02/M01/9D/7F/wKioL1mBNnjwwEHEAAAyslf8DnU669.png-wh_500x0-wm_3-wmp_4-s_2707053153.png" target="_blank"></a>

本文轉自 towardly 51CTO部落格,原文連結:http://blog.51cto.com/brighttime/1952909

繼續閱讀