大白話學習HTTP請求

 

三次握手

  1. 客戶端發起一個我要創建的連接數據包的請求發送到服務端,這裏面有個標誌位syn=1(創建請求的數據包),seq=X
  2. 服務端接收到數據包之後知道了我有一個客戶要跟我創建連接了,創建連接之後呢,開啓TCP Socket的端口,端口開啓之後呢,返回給客戶端,返回給客戶端數據裏也是一個syn的標誌位,返回ack=X+1,seq=Y再發送一個seq,服務端的seq
  3. 客戶端拿到了之後說服務端允許我創建這個TCP連接了,它再去發送它的ack=Y+1,seq=Z(seq又等於一個新的數字)這就是創建一個TCP連接的過程

 

爲什麼要進行三次握手

爲了防止服務端開啓一些無用的連接,因爲我們知道網絡傳輸是有延時的,因爲我們中間可能隔着非常遠的距離,要通過光纖,然後還有各種中間的代理服務器,來進行一個傳輸,傳輸的過程當中,比如說客戶端這邊發起了一個syn=1創建連接的請求,如果服務端這邊就直接創建了這個連接,返回的這個內容給客戶端,這個數據包因爲網絡傳輸的原因丟失了,丟失了之後,客戶端就一直沒有接收到服務器返回的這個東西,它這邊有設置了一個超時時間說我關閉了,超過了這個時間之後連接創建就關閉了,我可能再發起一個新的創建連接的請求,這個時候服務端,如果我們沒有第三次握手在這裏的話服務端是根本不知道客戶端它到底有沒有接收到我返回的信息,並且它沒有給我一個確認要創建還是要關閉這個請求,那麼它這邊的端口就一直開着等着,客戶端來發送實際的請求數據了,那這個時候服務端開銷就浪費了,因爲它不知道連接已經創建失敗了,客戶端可能去創建別的新的連接了,所以我們需要三次握手來確認這個過程,讓客戶端和服務端能夠及時的察覺到說我們因爲一些網絡原因的問題導致數據端沒有查到,這個端口連接就已經關閉了,我們不需要一直等在那邊,所以這種情況。三次握手主要是爲了規避網絡傳輸當中延時而導致的一些服務器開銷的問題。

 

   HTTP請求創建TCP連接的過程當中三次握手數據包的一個詳細內容

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章