震驚!!!輸入www.baidu.com竟然會發生這些事情?

我們假設你想要訪問 www.baidu.com 查找一些你所需要的東西。

  1. 你將 www.baidu.com 鍵入瀏覽器的地址欄。
  2. 瀏覽器檢查緩存中的DNS記錄,以查找 www.baidu.com 的相應IP地址。
    DNS(域名系統)是一個數據庫,用於維護網站名稱(URL)及其鏈接的特定IP地址。互聯網上的每個URL都有一個唯一的IP地址。IP地址屬於託管我們請求訪問的網站的服務器的計算機。例如, www.baidu.com 的IP地址爲 183.232.231.174。因此,如果你願意,可以在瀏覽器中輸入 183.232.231.174 來訪問www.baidu.com。DNS是一個URL列表及其IP地址,就像電話簿是一個名稱列表及其相應的電話號碼一樣。

DNS的主要目的是人性化導航。你可以通過在瀏覽器上鍵入正確的IP地址輕鬆訪問網站,但想象一下,我們必須記住我們經常訪問的所有網站的不同數字集?因此,使用URL更容易記住網站的名稱,讓DNS爲我們工作,並將其映射到正確的IP。
爲了找到DNS記錄,瀏覽器檢查四個緩存。

  • 首先,它檢查瀏覽器緩存。瀏覽器爲您之前訪問過的網站維護一段固定時間的DNS記錄存儲庫。因此,它是第一個運行DNS查詢的地方。
  • 其次,瀏覽器檢查操作系統緩存。如果在瀏覽器緩存中找不到它,瀏覽器將在底層計算機操作系統上進行系統調用(即Windows上的gethostname)以獲取記錄,因爲操作系統還會維護DNS記錄的緩存。
  • 第三,它檢查路由器緩存。如果在您的計算機上找不到它,瀏覽器將與維護其自己的DNS記錄緩存的路由器通信。
  • 第四,它檢查ISP緩存。如果所有步驟都失敗,瀏覽器將轉移到ISP。您的ISP維護其自己的DNS服務器,其中包括DNS記錄的緩存,瀏覽器將檢查該記錄,最後希望找到您請求的URL。
    您可能想知道爲什麼在如此多的級別上維護瞭如此多的緩存。雖然我們在某處緩存的信息並沒有讓我們感到非常舒服,但在緩存方面,緩存對於調節網絡流量和改善數據傳輸時間非常重要。
  1. 如果請求的URL不在緩存中,ISP的DNS服務器將啓動DNS查詢以查找託管www.baidu.com的服務器的IP地址。
    如前所述,爲了讓我的計算機與託管www.baidu.com的服務器連接,我需要www.baidu.com的IP地址。DNS查詢的目的是搜索Internet上的多個DNS服務器,直到找到網站的正確IP地址。這種類型的搜索稱爲遞歸搜索,因爲搜索將從DNS服務器重複繼續到DNS服務器,直到它找到我們需要的IP地址或返回錯誤響應,說它無法找到它。
    在這種情況下,我們將ISP的DNS服務器稱爲DNS recursor,其職責是通過詢問互聯網上的其他DNS服務器來尋找答案,從而找到目標域名的正確IP地址。其他DNS服務器稱爲名稱服務器,因爲它們基於網站域名的域架構執行DNS搜索。
    在沒有進一步混淆的情況下,我想使用下圖來解釋域架構。
    在這裏插入圖片描述
    我們今天遇到的許多網站網址都包含第三級域名,第二級域名和頂級域名。這些級別中的每一個都包含自己的名稱服務器,在DNS查找過程中會對其進行查詢。
    對於www.baidu.com,首先,DNS recursor將聯繫根名稱服務器。根名稱服務器將其重定向到.com域名服務器。.com名稱服務器會將其重定向到google.com名稱服務器。baidu.com名稱服務器將在其“DNS記錄”中找到www.baidu.com的匹配IP地址,並將其返回到你的DNS recursor,然後將其發送回您的瀏覽器。
    這些請求使用小數據包發送,這些數據包包含諸如請求內容和目的地IP地址之類的信息(DNS recursor的IP地址)。這些數據包在到達正確的DNS服務器之前通過客戶端和服務器之間的多個網絡設備傳輸。該設備使用路由表來確定數據包到達其目的地的最快方式。如果這些數據包丟失,您將收到請求失敗錯誤。否則,他們將到達正確的DNS服務器,獲取正確的IP地址,然後返回瀏覽器。

  2. 瀏覽器啓動與服務器的TCP連接。
    一旦瀏覽器收到正確的IP地址,它將與服務器建立連接,以匹配IP地址以傳輸信息。瀏覽器使用Internet協議來構建此類連接。可以使用許多不同的Internet協議,但TCP是用於任何類型的HTTP請求的最常用協議。
    爲了在您的計算機(客戶端)和服務器之間傳輸數據包,建立TCP連接很重要。使用稱爲TCP / IP三次握手的過程建立此連接。這是一個三步過程,客戶端和服務器交換SYN(同步)和ACK(確認)消息以建立連接。

  • 客戶機通過互聯網向服務器發送SYN數據包,詢問它是否爲新連接打開。
  • 如果服務器具有可以接受和發起新連接的開放端口,則它將使用SYN / ACK數據包響應SYN數據包的確認。
  • 客戶端將從服務器接收SYN / ACK數據包,並通過發送ACK數據包來確認它。然後建立TCP連接以進行數據傳輸!
  1. 瀏覽器向Web服務器發送HTTP請求。
    建立TCP連接後,就可以開始傳輸數據了!瀏覽器將發送GET請求,要求提供www.baidu.com網頁。如果您輸入憑據或提交表單,則可能是POST請求。此請求還將包含其他信息,例如瀏覽器標識(User-Agent標頭),它將接受的請求類型(Accept標頭),以及連接標頭,要求它保持TCP連接爲其他請求保持活動狀態。它還將傳遞從瀏覽器爲此域存儲的cookie中獲取的信息。
    示例GET請求(標題突出顯示):
    在這裏插入圖片描述

(如果您對幕後發生的事情感到好奇,可以使用 Firebug, Fiddler 等工具來查看HTTP請求。在我們不知情的情況下查看客戶端和服務器之間傳遞的信息總是很有趣)。

Fidder 界面展示:
在這裏插入圖片描述

  1. 服務器處理請求併發迴響應。
    服務器包含一個Web服務器(即Apache,IIS),它接收來自瀏覽器的請求並將其傳遞給請求處理程序以讀取和生成響應。請求處理程序是一個程序(用ASP.NET,PHP,Ruby等編寫),它讀取請求,其標題和cookie以檢查請求的內容,並在需要時更新服務器上的信息。然後它將以特定格式(JSON,XML,HTML)組合響應。

  2. 服務器發出HTTP響應。
    服務器響應包含您請求的網頁以及狀態代碼,壓縮類型(Content-Encoding),如何緩存頁面(Cache-Control),要設置的任何cookie,隱私信息等。
    HTTP服務器響應示例:
    在這裏插入圖片描述
    如果查看上面的響應,第一行顯示狀態代碼。這非常重要,因爲它告訴我們響應的狀態。使用數字代碼詳細說明了五種類型的狀態。

  • 1xx 僅表示信息性消息
  • 2xx 表示某種成功
  • 3xx 將客戶端重定向到另一個URL
  • 4xx 表示客戶端出錯
  • 5xx 表示服務器部分出錯
    因此,如果您遇到錯誤,可以查看HTTP響應以檢查您收到的狀態代碼類型。
  1. 瀏覽器顯示HTML內容(對於最常見的HTML響應)。
    瀏覽器分階段顯示HTML內容。首先,它將呈現裸骨HTML骨架。然後它將檢查HTML標記併發送對網頁上其他元素的GET請求,例如圖像,CSS樣式表,JavaScript文件等。這些靜態文件由瀏覽器緩存,因此它不必再次獲取它們下次訪問該頁面時。最後,你會看到www.baidu.com出現在您的瀏覽器上。
    而已!
    雖然這似乎是一個非常繁瑣的延長過程,但我們知道在我們按下鍵盤後輸入網頁所需的時間不到幾秒鐘。所有這些步驟都在我們甚至沒有注意到之前的幾毫秒內發生。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章