日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

建立TCP连接时的三次握手与四次挥手问题

發布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 建立TCP连接时的三次握手与四次挥手问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 字段含義

1.1 狀態字段

  • ACK 報文是用來應答的,SYN 報文是用來同步的
  • LISTEN:偵聽來自遠方TCP端口的連接請求
  • SYN-SENT:在發送連接請求后等待匹配的連接請求
  • SYN-RECETVED:在收到和發送一個連接請求后等待對連接請求的確認
  • ESTABLISHED:代表一個打開的連接,數據可以傳送給用戶
  • FIN-WAIT-1:等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認
  • FIN-WAIT-2:從遠程TCP等待連接中斷請求
  • CLOSE-WAIT:等待從本地用戶發來的連接中斷請求
  • CLOSING:等待遠程TCP對連接中斷的確認
  • LAST-ACK:等待原來發向遠程TCP的連接中斷請求的確認
  • TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
  • CLOSED:沒有任何連接狀態

1.2 傳輸中的涉及字段(重點字段)

  • 序號:Seq序號,占32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記

  • 確認序號:Ack 序號,占32位,只有 ACK 標志位 為1時,確認序號字段才有效,Ack = Seq+1

  • 標志位

    • URG:緊急指針(urgent pointer)有效
    • ACK:確認序號有效(用來應答的)
    • SYN:發起一個新連接(用來同步的)
    • PSH:接收方應該盡快將這個報文交給應用層
    • RST:重置連接
    • FIN:釋放一個連接

注意

不要將確認序號 Ack 與標志位中的 ACK 搞混了

確認方Ack=發起方Req+1,兩端配對

2. 三次握手

2.1 原理

剛開始客戶端處于 Closed 的狀態,服務端處于 Listen 狀態。

第一次握手:客戶端給服務端發一個 SYN 報文,并指明客戶端的初始化序列號 ISN?,此時客戶端處于 SYN_SEND 狀態。

第二次握手:服務器收到客戶端的 SYN 報文之后,會以自己的 SYN 報文作為應答,并且也是指定了自己的初始化序列號 ISN(s) ,同時會把客戶端的 ISN + 1 作為 ACK 的值,表示自己已經收到了客戶端的 SYN,此時服務器處于SYN_RCVD 的狀態。

第三次握手:客戶端收到 SYN 報文之后,會發送一個 ACK 報文,當然,也是一樣把服務器的 ISN + 1 作為 ACK 的值,表示已經收到了服務端的 SYN 報文,此時客戶端處于 ESTABLISHED 狀態。服務器收到 ACK 報文之后,也處于 ESTABLISHED 狀態,此時,雙方已建立起了鏈接。

2.2 作用

(1)確認雙方的接受能力、發送能力是否正常。

(2)指定自己的初始化序列號,為后面的可靠傳送做準備。

(3)如果是 HTTPS 協議的話,三次握手這個過程,還會進行數字證書的驗證以及加密密鑰的生成。

2.3 涉及問題

  • 為什么需要三次握手,兩次不行嗎?
  • 第三次握手的必要性
  • (ISN)是固定的嗎?
  • 什么是半連接隊列?
  • 三次握手過程中可以攜帶數據嗎?
  • 如果第三次握手丟失了,客戶端服務端會如何處理?
  • SYN攻擊
    什么是SYN攻擊(SYN Flood)?如何檢測SYN攻擊?如何防御SYN攻擊?
  • 3. 四次揮手

    3.1 原理

    剛開始雙方都處于 ESTABLISHED 狀態,假如是客戶端先發起關閉請求

    第一次揮手:客戶端發送一個 FIN 報文,報文中會指定一個序列號。此時客戶端處于 FIN_WAIT1 狀態。

    第二次揮手:服務端收到 FIN 之后,會發送 ACK 報文,且把客戶端的序列號值 +1 作為 ACK 報文的序列號值,表明已經收到客戶端的報文了,此時服務端處于 CLOSE_WAIT 狀態。

    第三次揮手:如果服務端也想斷開連接了,和客戶端的第一次揮手一樣,發給 FIN 報文,且指定一個序列號。此時服務端處于 LAST_ACK 的狀態。

    第四次揮手:客戶端收到 FIN 之后,一樣發送一個 ACK 報文作為應答,且把服務端的序列號值 +1 作為自己 ACK 報文的序列號值,此時客戶端處于 TIME_WAIT 狀態。

    需要過一陣子以確保服務端收到自己的 ACK 報文之后,就處于關閉連接了,進入 CLOSED 狀態。

    3.2 涉及問題

  • (TIME WAIT)為什么客戶端發送 ACK 之后不直接關閉,而是要等一陣子才關閉?
  • 揮手為什么需要四次?
  • 四次揮手釋放連接時,等待 2MSL 的意義?
  • 為什么 TIME_WAIT 狀態需要經過2MSL(最大報文段生存時間)才能返回到 CLOSE 狀態?
  • 總結

    以上是生活随笔為你收集整理的建立TCP连接时的三次握手与四次挥手问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。