http請求是如何先建立的三次握手?
先清楚一個概念http請求與tcp連結之間的關係,在客戶端向服務端請求和返回的過程中,是需要去建立一個TCP connection,因為http是不存在連結這樣一個概念的,它只有請求和響應這樣一個概念,請求和響應都是一個資料包,中間要透過一個傳輸通道,這個傳輸通道就是在TCP裡面建立了一個從客戶端發起和服務端接收的一個連結,TCP連結在建立的時候是有一個三次握手(三次網路傳輸)這樣一個消耗在的。
三次握手時序圖
第一次握手: 建立連線,客戶端A傳送SYN=1、隨機產生Seq=client_isn的資料包到伺服器B,等待伺服器確認。
第二次握手: 伺服器B收到請求後確認聯機(可以接受資料),發起第二次握手請求,ACK=(A的Seq+1)、SYN=1,隨機產生Seq=client_isn的資料包到A。
第三次握手: A收到後檢查ACK是否正確,若正確,A會在傳送確認包ACK=伺服器B的Seq+1、ACK=1,伺服器B收到後確認Seq值與ACK值,若正確,則建立連線。
TCP標示
- SYN(synchronous建立聯機)
- ACK(acknowledgement 確認)
- Sequence number(順序號碼)
三次握手資料包詳細內容分析
這裡採用的是,是一個很好的網路資料包抓取和分析軟體。
示例採用的網址,windows下開啟cmd、Mac下開啟終端ping下得到ip可以利用wireshark工具進行一次ip地址過濾,只分析指定的資料。
- 第一次握手,客戶端傳送一個TCP,標誌位為SYN,Seq(序列號)=0,代表客戶端請求建立連結,如下圖所示
- 第二次握手,伺服器發回資料包,標誌位為[SYN, ACK],ACK設定為客戶端第一次握手請求的Seq+1,即ACK=0+1=1,在隨機產生一個Seq的資料包到客戶端。
- 第三次握手請求,客戶端在次傳送確認資料包,標識位為ACK,把伺服器發來的Seq+1,即ACK=0+1,傳送給伺服器,伺服器成功收到ACK報文段之後,連線就建立成功了。
總結
至於為什麼要經過三次握手呢,是為了防止服務端開啟一些無用的連結,網路傳輸是有延時的,中間可能隔著非常遠的距離,透過光纖或者中間代理伺服器等,客戶端傳送一個請求,服務端收到之後如果直接建立一個連結,返回內容給到客戶端,因為網路傳輸原因,這個資料包丟失了,客戶端就一直接收不到伺服器返回的這個資料,超過了客戶端設定的時間就關閉了,那麼這時候服務端是不知道的,它的埠就會開著等待客戶端傳送實際的請求資料,服務這個開銷也就浪費掉了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/36/viewspace-2812611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Http協議詳解之三次握手HTTP協議
- HttpRunner3的HTTP請求是怎麼發出去的HTTP
- TCP 的 三次握手 四次握手TCP
- TCP建立連線三次握手和釋放連線四次握手TCP
- HTTP協議三次握手和四次揮手HTTP協議
- 如何在Swift語言中建立http請求SwiftHTTP
- TCP三次握手原理TCP
- 三次握手機制
- 前端系列-三次握手前端
- TCP的三次握手過程TCP
- 自己理解的TCP三次握手TCP
- 瀏覽器三次握手瀏覽器
- TCP:三次握手、四次握手、backlog及其他TCP
- 面試最常問的tcp三次握手策略面試TCP
- 在Linux中,如何理解Tcp/ip協議三次握手?LinuxTCP協議
- 判斷請求是否為Ajax請求的小妙招
- 小白都能看懂的tcp三次握手TCP
- TCP的三次握手四次揮手TCP
- MPTCP 原始碼分析(一) MPTCP的三次握手TCP原始碼
- TCP的三次握手與四次分手TCP
- TCP三次握手的正確使用姿勢TCP
- tcp三次握手和SYN攻擊TCP
- TCP三次握手四次分手TCP
- Wireshark除錯TCP三次握手流程除錯TCP
- TCP協議 連線三次握手TCP協議
- 用 Wireshark 圖解 TCP 三次握手圖解TCP
- TCP的三次握手與四次揮手TCP
- 可靠的TCP連線為何是三次握手TCP
- 一起看看 Linux的TCP 三次握手LinuxTCP
- TCP三次握手四次揮手TCP
- TCP三次握手&四次揮手TCP
- TCP/IP 為什麼要三次握手TCP
- TCP 三次握手四次揮手TCP
- 為什麼必須使用三次握手?
- 簡析TCP的三次握手與四次分手TCP
- TCP三次握手和四次揮手TCP
- TCP 三次握手 與 四次揮手TCP
- TCP 、 UDP、三次握手、四次揮手TCPUDP