瀏覽器輸入URL回車後...

Pivot發表於2018-06-29

前言

當我們想瀏覽某一個網頁時,一般都會輸入對應的URL,這個其實就是請求對應資源的過程。那麼這個過程實質上經歷了什麼呢?

流程概述

  1. 查詢IP - 客戶端根據域名查詢對應的IP
  2. 建立連線 - 客戶端根據IP地址與伺服器連結
  3. 相互通訊 - 客戶端與資源伺服器通訊
  4. 斷開連線 - 客戶端與資源伺服器斷開連線

具體流程詳解

1.查詢IP

  • 瀏覽器搜尋自己的 DNS 快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
  • 搜尋系統中的 DNS 快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
  • 搜尋系統中的 hosts 檔案,查詢成功返回其對應 IP 地址,失敗則進行下一步;
  • 系統傳送一個請求到路由器上,路由器查詢其快取,查詢成功返回其對應 IP 地址,失敗則進行下一步;
  • 系統將域名傳送至 LDNS(本地域名伺服器),查詢成功返回其對應 IP 地址,失 敗則 LDNS 向 Root Name Server(根域名伺服器)發起請求獲得域的頂級域名 伺服器地址,然後依次請求獲得各級域名伺服器地址,最後獲得域名對應 IP 地址;
  • LDNS 將 IP 地址返回給作業系統並快取起來;
  • 系統將 IP 地址返回給瀏覽器並快取起來;
  • 瀏覽器獲得 IP 地址,發起建立連線的請求。

2.建立連線 - 三次握手

瀏覽器獲取相應的IP之後,就會對目標伺服器發起建立連線的請求,建立連線主要分三步,就是常說的三次握手:

  • 瀏覽器傳送想和伺服器建立連線的請求(你好,可以認識一下麼?)
  • 伺服器傳送同意建立連線的響應(你好,當然可以啊!)
  • 瀏覽器向伺服器傳送確認受到響應的請求,並建立連線。(很高興認識你。)

3.相互通訊

建立連線之後,本次連線的主要目的來了,就是資料互動,這裡主要說客戶端請求資料

  • 客戶端傳送一個請求頁面資源的請求
  • 伺服器返回對應的資源
  • 客戶端請求到相應的資源之後,進行頁面渲染之類的活,可能會繼續請求css、js等資源

4.斷開連線

資料通訊之後,要通過“四次揮手”斷開連線

  • 瀏覽器向伺服器傳送想斷開連線的請求 (我要走啦);
  • 伺服器向瀏覽器傳送收到請求的響應 (我知道啦);
  • 伺服器向瀏覽器傳送斷開連線的請求;(可以了,我走啦)
  • 瀏覽器斷開連線,並向伺服器傳送一個反饋請求,伺服器收到後斷開連線 (好的,拜拜)。

注意

斷開連線為為什麼必須這麼繁瑣的四次揮手?

主要是因為當客戶端告訴伺服器想斷開連線的時候,伺服器的資料不一定已處理完畢,所以伺服器是先告訴客戶端說已經收到了它想斷開連線的請求,然後當伺服器中資料處理完畢時,便斷開請求並通知客戶端,客戶端收到後也斷開請求並通知伺服器。

參考:juejin.im/post/59e2e9…

相關文章