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

淘淘笙悅發表於2017-10-15

你知道當我們在瀏覽器中輸入 URL 後到獲得我們需要的網頁資源,這中間需要經歷怎樣的流程嗎?客戶端(瀏覽器)是如何找到目標伺服器並從伺服器獲得所需要的資源的?

如果你從未思考或瞭解過上述的問題,那麼我相信本文會對你在日常的專案實踐中有一定的幫助,在本文中我將盡可能詳細地介紹瀏覽器中輸入 URL 回車後與伺服器進行通訊的流程。

當我們在瀏覽器中輸入 URL 並且回車後,主要發生四個過程:查詢 IP建立連線相互通訊斷開連線。主要流程概述如下:

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

在詳細介紹各個流程前,讓我們先來了解一下接下來需要接觸到的一些名詞概念。

IP 地址:指網際網路協議地址。是 IP 協議提供的一種統一的地址格式,它為網際網路上的每一個網路和每一臺主機分配一個邏輯地址,以此來遮蔽實體地址的差異。網際網路上每一個網路和每一臺主機都會被分配的一個 IP 地址。我們可以把 IP 地址當成具體到門牌號碼的地址,只有通過 IP 地址才能確定一臺主機的位置。

域名:是由一串用點分隔的名字組成的 Internet上某一臺計算機或計算機組的名稱,用於在資料傳輸時標識計算機的電子方位(有時也指地理位置)。由於純數字的 IP 地址難以被記憶,所以使用有代表意義的字元(域名)來代替純數字的 IP 地址,但最終仍需要通過域名來查詢其對應的 IP 地址才能夠找到相應主機的位置。

DNS :域名系統,是網際網路的一項服務。它作為將域名和 IP 地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路。

URL :統一資源定位符,有時也被俗稱為網頁地址(網址)。指的是因特網上各種資源的地址。

這裡需要區分一下域名(或者 IP 地址)與 URL 的區別,域名確定的是因特網中某臺主機的位置;而 URL 則要更為具體,指某臺主機中某個資源的具體位置。如 ttsy.com 是一個域名,通過這個域名可以找到其相對應 IP 地址的主機,而 ttsy.com/a/b.jpg 是一個 URL,通過這個 URL 可以找到這臺主機上的路徑為 /a 的 b.jpg 圖片資源。

那麼接下來詳細介紹上述四個流程~

查詢 IP

在我們輸入 URL 並且按下回車時,瀏覽器首先要做的便是通過域名查詢對應的 IP 地址,這個過程也稱作 DNS 解析。具體的查詢過程如下:

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

建立連線--三次握手

瀏覽器獲得 IP 地址後,就會對目標伺服器發起建立 TCP 連線的請求,建立連線主要有三個步驟,一般稱為客戶端與伺服器端的三次握手:

  • 瀏覽器向伺服器傳送想建立連線的請求「你好,可以認識一下嗎」;
  • 伺服器向瀏覽器傳送同意建立連線的響應「你好,當然可以啊」;
  • 瀏覽器向伺服器傳送確認收到響應的請求,客戶端和伺服器建立連線「非常高興認識你」。

相互通訊

客戶端與伺服器建立連線後,便會開始進行通訊,這裡以客戶端向伺服器請求網頁資源的過程為例:

  • 瀏覽器向伺服器發起一個請求網頁資源的請求;
  • 伺服器返回對應網頁資源;
  • 瀏覽器渲染、構建網頁,在構建網頁的過程中,可能會繼續請求 CSS、JavaScript 等資源。

斷開連線--四次揮手

客戶端與伺服器的相互通訊完成後,便會斷開連線,斷開連線主要有四個步驟,一般稱為客戶端與伺服器端的四次揮手:

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

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

覺得還不錯的小夥伴,可以關注一波公眾號哦。

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

相關文章