天天看點

http面試之——http3次握手和4次揮手

面試官常問的關于http建立連接配接的高頻問題:

1、說一說http建立連接配接的過程 ?

2、你剛講到了3次握手,為什麼是3次,2次不行嗎 ?

3、SYN攻擊是什麼 ?

4、那斷開連接配接呢,需要幾次 ?

5、為什麼是4次呢 ?

以下是各個問題的回答

http3次握手的過程以及每次握手的作用

三次握手:是指建立一個TCP連接配接時,需要用戶端與伺服器總共發送3個包

主要目的:确認用戶端和服務端接受和發送是否正常

每次握手的目的:

  • 第一次握手:客服端發送一個封包(SYN),伺服器接收到了,說明:用戶端的發送能力 和 伺服器的接受能力沒有問題
  • 第二次握手:伺服器回應用戶端發送一個封包(ACK),用戶端接收到了。說明:伺服器的發送能力和接收能力沒有問題,用戶端的發送和接收能力沒有問題
  • 第三次握手:用戶端回應伺服器并發送一個封包,伺服器接收到了。說明: 通過這次接收,伺服器确認用戶端的接收能力和發送能力沒有問題
  • 握手過程如下圖
http面試之——http3次握手和4次揮手
  • 為什麼需要三次握手,兩次不行嗎
  • 三次握手是為了防止當已失效的連接配接請求封包段突然又傳到服務端,造成雙方的不一緻,導緻資源的浪費
  • 三次握手過程中可以攜帶資料嗎
  • 第三次握手的時候,可以攜帶資料,但是第一二次握手不可以攜帶資料
  • SYN攻擊是什麼 ?

伺服器的資源配置設定是在二次握手的時候;用戶端的資源配置設定是在完成第三次握手時配置設定的

所有伺服器容易受到SYN的洪泛攻擊,SYN攻擊就是Client在短時間内僞造大量不存在的IP位址并向Server不斷地發送SYN包,Server則回應發送确認包,并等待Client确認,由于源IP位址不存在,因為Server需要不斷重複的發送直至逾時,這些僞造的SYN包将長時間占用半連接配接隊列,導至正常的SYN請求因為隊列已滿而丢棄,進而引起網絡擁塞甚至系統癱瘓。

四次揮手

  • 揮手過程如下圖:
http面試之——http3次握手和4次揮手
  • TCP揮手為什麼需要四次
  1. 因為TCP是全雙工通信的
  2. 關閉連接配接時,當服務端收到FIN封包時僅代表用戶端不會再發送資料封包了,但用戶端仍可以接收資料封包,且伺服器此時可能還有資料封包需要發送,是以隻能先回複一個ACK封包,告訴用戶端,“你發的FIN封包我收到了”,當用戶端處理完資料封包後,便發送給主動方FIN封包,這樣可以保證資料通信正常可靠地完成,是以不能一起發送。故需要四次揮手。

繼續閱讀