1. 程式人生 > >TCP的三次握手和四次揮手學習

TCP的三次握手和四次揮手學習

意思 手動 斷開 arch sha etime 揮手 HA 等待

  • 所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送4個包(兩個SYN,兩個ACK);
  • 第一次握手:當客戶端向服務器發起連接請求時,客戶端會發送同步序列標號SYN到服務器,等待服務器確認,這時客戶端的狀態為SYN_SENT。
  • 第二次握手:當服務器收到客戶端發送的SYN後,服務器要做的是確認客戶端發送過來的SYN,在這裏服務器發送確認包ACK,意思是說“我收到了你發送的SYN了”,同時,服務器也會向客戶端發送一個SYN包。這時服務器的狀態為SYN_RECV。服務器端發送SYN和ACK兩個包。
  • 第三次握手:客戶端收到服務器發送的SYN和ACK包後,需向服務器發送確認包ACK,“我也收到你發送的SYN了,我這就給你發個確認過去,然後我們即能合體了”,發送完畢後,客戶端和服務器的狀態為ESTABLISH,即TCP連接成功。
  • 在三次握手中,客戶端和服務器端都發送兩個包SYN和ACK,只不過服務器端的兩個包是一次性發過來的,客戶端的兩個包是分兩次發送的。

  • TCP的連接的拆除需要發送四個包(兩個FIN,兩個ACK),因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
  • 第一次揮手:A端向B端請求斷開連接時會向B端發送一個帶有FIN標記的報文段,這裏的FIN是FINish的意思。
  • 第二次揮手:B端收到A發送的FIN後,B段現在可能現在還有數據沒有傳完,所以B端並不會馬上向A端發送FIN,而是先發送一個確認序號ACK,意思是說“你發的斷開連接請求我收到了,但是我現在還有數據沒有發完,請稍等一下”。
  • 第三次揮手:當B端的處理完,那麽此時B端就可以斷開連接了,此時B端向A端發送FIN序號,意思是這次可以斷開連接了。
  • 第四次揮手:A端收到B端發送的FIN後,會向B端發送確認ACK,然後經過兩個MSL(MSL是Maximum Segment Lifetime,最大報文段生存時間,2個MSL是報文段發送和接收的最長時間。)時長後斷開連接。

參考這裏

還有這裏

TCP的三次握手和四次揮手學習