HTTP的三次握手and websocket的原理

2022-04-02 15:22:55 字數 4655 閱讀 1455

在講三次握手之前,希望大家理解乙個概念,什麼概念呢?

就是在我們的客戶端和我們的伺服器之間進行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給服務端,作為第乙個標識位,這樣乙個過程就完成了乙個三次握手

在講三次握手之前,希望大家理解乙個概念,什麼概念呢?

就是在我們的客戶端和我們的伺服器之間進行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給服務端,作為第乙個標識位,這樣乙個過程就完成了乙個三次握手

http三次握手 HTTP三次握手,四次揮手。

三次握手 首先解析伺服器dns,找到ip,然後開始建立連線 1.第一次握手 建立連線,客戶端a傳送syn 1 隨機產生seq client isn的資料報到伺服器b,等待伺服器確認。2.第二次握手 伺服器b收到請求後確認聯機 可以接受資料 發起第二次握手請求,ack a的seq 1 syn 1,隨機...

http的三次握手

syn synchronous 是tcp ip建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的tcp網路連線時,客戶機首先發出乙個syn訊息,伺服器使用syn ack應答表示接收到了這個訊息,最後客戶機再以ack訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的tcp連線,資料才可以在客戶機...

HTTP的三次握手

圖1 圖2 抓包工具 編輯wireshark 前稱ethereal 是乙個網路封包分析軟體。網路封包分析軟體的功能是擷取網路封包,並盡可能顯示出最為詳細的網路封包資料。wireshark使用winpcap作為介面,直接與網絡卡進行資料報文交換。在過去,網路封包分析軟體是非常昂貴的,或是專門屬於盈利用...