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

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

若是你從未思考或瞭解過上述的問題,那麼我相信本文會對你在平常的項目實踐中有必定的幫助,在本文中我將盡量詳細地介紹瀏覽器中輸入 URL 回車後與服務器進行通訊的流程。瀏覽器

當咱們在瀏覽器中輸入 URL 而且回車後,主要發生四個過程:查找 IP創建鏈接相互通訊斷開鏈接。主要流程概述以下:緩存

  1. 客戶端根據域名查找對應的 IP 地址;
  2. 客戶端根據 IP 地址與服務器創建鏈接;
  3. 客戶端與服務器通訊;
  4. 客戶端與服務器斷開鏈接。

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

IP 地址:指互聯網協議地址。是 IP 協議提供的一種統一的地址格式,它爲互聯網上的每個網絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差別。互聯網上每個網絡和每一臺主機都會被分配的一個 IP 地址。咱們能夠把 IP 地址當成具體到門牌號碼的地址,只有經過 IP 地址才能肯定一臺主機的位置。網絡

域名:是由一串用點分隔的名字組成的 Internet上某一臺計算機或計算機組的名稱,用於在數據傳輸時標識計算機的電子方位(有時也指地理位置)。因爲純數字的 IP 地址難以被記憶,因此使用有表明意義的字符(域名)來代替純數字的 IP 地址,但最終仍須要經過域名來查找其對應的 IP 地址纔可以找到相應主機的位置。分佈式

DNS :域名系統,是互聯網的一項服務。它做爲將域名和 IP 地址相互映射的一個分佈式數據庫,可以令人更方便地訪問互聯網。操作系統

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

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

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

查找 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 等資源。

斷開鏈接--四次揮手

客戶端與服務器的相互通訊完成後,便會斷開鏈接,斷開鏈接主要有四個步驟,通常稱爲客戶端與服務器端的四次揮手:

  • 瀏覽器向服務器發送想斷開鏈接的請求「我要走啦」;
  • 服務器向瀏覽器發送收到請求的響應「我知道啦」;
  • 服務器向瀏覽器發送斷開鏈接的請求「能夠了」;
  • 瀏覽器斷開鏈接並向服務器發送一個反饋請求,服務器收到後斷開鏈接「好的,拜拜」。

爲何客戶端與服務器斷開鏈接是四次揮手呢?主要是由於當客戶端告訴服務器想斷開鏈接的時候,服務器的數據不必定已處理完畢,因此服務器是先告訴客戶端說已經收到了它想斷開鏈接的請求,而後當服務器中數據處理完畢時,便通知客戶端並請求斷開鏈接,客戶端收到後便斷開鏈接並通知服務器,服務器收到後才斷開鏈接。

以爲還不錯的小夥伴,能夠關注一波公衆號哦。

相關文章
相關標籤/搜索