HTTP的三次握手
阿新 • • 發佈:2018-11-26
在講三次握手之前,希望大家理解一個概念,什麼概念呢? 就是在我們的客戶端和我們的伺服器之間進行http請求,傳送和返回的過程當中,我們是需要去建立一個tcp connection的東西,因為 http是不存在連線這麼一個概念的,它只有一個請求和響應這麼一個概念,那麼請求和響應都是一個數據包,它們之間是需要一個傳輸的通道的,那麼這個傳輸的通道在哪裡呢?就在tcp裡面,去建立了這麼一個從客戶端發起,服務端接收的這麼一個連線,這個連線呢,是可以一直保持在那邊,然後我們的http請求是在連線這個基礎上面去傳送的,那這裡就有一個概念,就是在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去建立的一個過程
接下來看下三次握手資料包的相信內容,Wireshark抓包工具
13789是本機的一個埠,80是伺服器端的一個埠,因為有三次握手,客戶端和伺服器之間有三個來回,只要找到同一個埠的來回,就可以找到這三次握手
如圖,這三次是完整的三次握手的過程,第一次握手可以看到傳送了一個SYN標示位,為了簡單演示,說SYN=1,其實,就是SYN佔據了第一個標識位,用圖片只是為了更形象的展示這三個過程,返回的時候是一個SYN,再加上一個ACK。最後客戶端再發送一個ACK給服務端,作為第一個標識位,這樣一個過程就完成了一個三次握手