HTTP的三次握手


 

在講三次握手之前,希望大家理解一個概念,什么概念呢?
就是在我們的客戶端和我們的服務器之間進行http請求,發送和返回的過程當中,我們是需要去創建一個tcp connection的東西,因為 http是不存在連接這么一個概念的,它只有一個請求和響應這么一個概念,那么請求和響應都是一個數據包,它們之間是需要一個傳輸的通道的,那么這個傳輸的通道在哪里呢?就在tcp里面,去創建了這么一個從客戶端發起,服務端接收的這么一個連接,這個連接呢,是可以一直保持在那邊,然后我們的http請求是在連接這個基礎上面去發送的,那這里就有一個概念,就是在tcp連接上面,是可以發送多個http請求的,在不同的版本里面,這個模式是不一樣的

 

在http/1.0里面,這個連接是在http請求創建的時候,就去創建這個tcp連接,然后連接創建完之后,然后請求發送過去,然后服務器響應之后呢,這個tcp連接它就關閉了
然后在http/1.1里面,這個連接我們可以通過某種方式去申明這個連接可以一直保持在那邊,然后保持在那邊是什么意思呢?就是我們這個請求,第一個請求發送之后,這個連接沒有關,然后第二個請求進來的時候,它還可以在這個連接上面進行發送,這有什么好處呢?就是因為tcp連接,我們這節課要講的,在創建過程當中,是有三次握手這么一個消耗的,三次握手就是代表着有三次網絡傳輸,客戶端發送一次,然后服務端返回一次,然后客戶端再發送一次,這個時候才創建了tcp連接,然后才能去發送http請求,所以如果把連接一直保持在那邊,那么第二個http請求就沒有三次握手的開銷
在http2里面還有一個好處就是,http2里面tcp連接上面的http請求是可以並發的,這就導致什么呢,就是說我們同一個用戶對同一個服務器發起一個網頁請求的時候,它只需要一個tcp連接,那么具體什么含義呢,我們后期課程會詳細的講,現在要清楚tcp連接和http請求之間的關系


 

 

在http的三次握手當中,首先客戶端發起一個我要發送一個數據包的請求,發送到服務端,這里面呢會有一個標志SYN=1,Seq=X,syn是一個標識,就是我這是一個創建請求的數據包,然后seq等於一個數字,一般來說都是1,然后服務端接收之后,知道了我有一個客戶要跟我創建連接了,那創建這個連接之后呢,服務端就會開啟一個tcp,socket的一個端口,然后這個端口開啟了之后,它返回給客戶端,它返回的數據里面也是一個SYN=1,ACK=X+1,Seq=Y,然后它會返回一個ACK,ACK就等於第一次發送過來的Seq,就是X,然后+1,然后它再發送一個Seq,這個是服務器端的一個Seq,然后客戶端拿到之后,服務端允許我們打開創建這個連接,然后客戶端再去發送它的ACK=Y+1,Seq=Z,它再發送一個Seq,等於一個新的數字Z,這就是tcp去創建的一個過程

 

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

 

接下來看下三次握手數據包的相信內容,Wireshark抓包工具

13789是本機的一個端口,80是服務器端的一個端口,因為有三次握手,客戶端和服務器之間有三個來回,只要找到同一個端口的來回,就可以找到這三次握手

如圖,這三次是完整的三次握手的過程,第一次握手可以看到發送了一個SYN標示位,為了簡單演示,說SYN=1,其實,就是SYN占據了第一個標識位,用圖片只是為了更形象的展示這三個過程,返回的時候是一個SYN,再加上一個ACK。最后客戶端再發送一個ACK給服務端,作為第一個標識位,這樣一個過程就完成了一個三次握手


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM