開始—>瀏覽器URL 地址欄中輸入了www.baidu.com
- step1: DNS快取查詢
- 1 瀏覽器查找瀏覽器快取(DNS 快取)
+ chrome 使用 chrome://net-internals/#dns 可查看瀏覽器DNS快取
+ mac 使用 nslookup 命令來查找DNS快取
+ DNS(Domain Name System) 是一個用于維護 URL 和 IP 映射關系的分布式資料庫- 2 瀏覽器快取未查詢到時查詢作業系統快取(getHostName)
- 3 作業系統快取未查詢到時查詢路由器快取
- 4 路由器快取未查詢到時查詢本地通信服務商的快取(ISP)
- 5 如果以上4個快取均未查詢到時,則會發起DNS查詢,
- step2: 發起 DNS 查詢
- DNS 決議器通過向網路中其他 DNS 服務器詢問正確的 IP 地址
- step3: ARP 請求
- 1 瀏覽器會首先查詢 ARP 快取表,如果快取命中,我們回傳結果:目標 IP = MAC
- 2 如果未命中,則進行ARP請求和應答進行MAC地址的獲取,以建立TCP連接
- step4: 封裝 TCP 資料包
- 瀏覽器得到目標服務器的 IP 地址后,根據 URL 中的埠可以知道埠號 (http 協議默認埠號是 80, https 默認埠號是 443),會準備 TCP 資料包,資料包的封裝會經過下面的層層處理,資料到達目標主機后,目標主機會決議資料包,完整的請求和決議程序如下,
- step5: 瀏覽器與目標服務器建立 TCP 連接
- TCP 的連接建立需要經過 TCP/IP 的三次握手,三次握手的程序其實就是瀏覽器和服務器交換 SYN 同步和 ACK 確認訊息的程序,
- 假設圖中左端是客戶端主機,右端是服務端主機,一開始,兩端都處于CLOSED(關閉)狀態
- 服務端行程準備好接收來自外部的 TCP 連接,然后服務端行程處于 LISTEN 狀態,等待客戶端連接請求,
- 客戶端向服務器發出連接請求,請求中首部同步位 SYN = 1,同時選擇一個初始序號 sequence ,簡寫 seq = x,SYN 報文段不允許攜帶資料,只消耗一個序號,此時,客戶端進入 SYN-SEND 狀態,
- 服務器收到客戶端連接后,,需要確認客戶端的報文段,在確認報文段中,把 SYN 和 ACK 位都置為 1 ,確認號是 ack = x + 1,同時也為自己選擇一個初始序號 seq = y,請注意,這個報文段也不能攜帶資料,但同樣要消耗掉一個序號,此時,TCP 服務器進入 SYN-RECEIVED(同步收到) 狀態,
- 客戶端在收到服務器發出的回應后,還需要給出確認連接,確認連接中的 ACK 置為 1 ,序號為 seq = x + 1,確認號為 ack = y + 1,TCP 規定,這個報文段可以攜帶資料也可以不攜帶資料,如果不攜帶資料,那么下一個資料報文段的序號仍是 seq = x + 1,這時,客戶端進入 ESTABLISHED (已連接) 狀態
- 服務器收到客戶的確認后,也進入 ESTABLISHED 狀態,
- step6: 瀏覽器發送 HTTP 請求到 web 服務器
- HTTP 的請求標頭分為四種: 通用標頭、請求標頭、回應標頭 和 物體標頭,
- step7: web服務器處理請求并傳遞給應用服務器
- web服務器會從瀏覽器接收請求并將其傳遞給請求處理程式
- step8: 應用服務器發送回一個 HTTP 回應
- 服務器回應包含你請求的網頁以及狀態代碼,壓縮型別(Content-Encoding),如何快取頁面(Cache-Control),要設定的 cookie,隱私資訊等,
- step9: 瀏覽器顯示 HTML 的相關內容
- 瀏覽器會分階段顯示 HTML 內容,首先,它將渲染裸露的 HTML 骨架,然后它將檢查 HTML 標記并發送 GET 請求以獲取網頁上的其他元素,例如影像,CSS 樣式表,JavaScript 檔案等,這些靜態檔案由瀏覽器快取,因此你再次訪問該頁面時,不用重新再請求一次
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289716.html
標籤:其他



