從輸入URL到瀏覽器顯示頁面發生了哪些事情---個人理解


經典面試題:從輸入URL到頁面顯示發生了哪些事情

以前一直都記不住,這次自己理解了一下

用自己的話總結了一次,不對的地方希望大佬給我指出來

1.主機首先讀緩存,看看緩存內有沒有IP地址,如果沒有則通過DHCP協議獲取客戶端的IP地址、子網掩碼和DNS服務器的IP地址

2.然后開始向服務器發生請求,發生請求需要生產一個TCP套接字,生成這個套接字是需要網站域名對應的IP地址,要獲取IP地址需要解析域名,這時候就用到了DNS解析協議

3.要使用DNS解析協議,需要通過網關路由器轉發DNS解析請求,這時候通過ARP協議將DHCP獲取到的網關路由器IP解析成網關路由器的MAC地址,通過網關路由器發生DNS查詢請求,DNS服務器響應后,通過UDP協議傳輸 [ 其中間的路程:路由器反向轉發->網關路由器->以太網交換機->主機(客戶端) ]

4.這時候取到了HTTP服務器的IP地址,能夠成功生成TCP套接字,具備了與服務器通信的容器。這時候就開始TCP/IP三次握手建立連接,建立成功后,就通過TCP套接字進行數據讀取傳輸,傳輸結束后進行四次揮手,關閉連接,瀏覽器渲染---PS:這里又可以引出DOM渲染,JS和CSS阻塞之類的知識點

以下為參考資料:附原文地址

https://github.com/CyC2018/CS-Notes/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%20-%20%E5%BA%94%E7%94%A8%E5%B1%82.md#%E5%8A%A8%E6%80%81%E4%B8%BB%E6%9C%BA%E9%85%8D%E7%BD%AE%E5%8D%8F%E8%AE%AE

1. DHCP 配置主機信息

  • 假設主機最開始沒有 IP 地址以及其它信息,那么就需要先使用 DHCP 來獲取。

  • 主機生成一個 DHCP 請求報文,並將這個報文放入具有目的端口 67 和源端口 68 的 UDP 報文段中。

  • 該報文段則被放入在一個具有廣播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 數據報中。

  • 該數據報則被放置在 MAC 幀中,該幀具有目的地址 FF:FF:FF:FF:FF:FF,將廣播到與交換機連接的所有設備。

  • 連接在交換機的 DHCP 服務器收到廣播幀之后,不斷地向上分解得到 IP 數據報、UDP 報文段、DHCP 請求報文,之后生成 DHCP ACK 報文,該報文包含以下信息:IP 地址、DNS 服務器的 IP 地址、默認網關路由器的 IP 地址和子網掩碼。該報文被放入 UDP 報文段中,UDP 報文段有被放入 IP 數據報中,最后放入 MAC 幀中。

  • 該幀的目的地址是請求主機的 MAC 地址,因為交換機具有自學習能力,之前主機發送了廣播幀之后就記錄了 MAC 地址到其轉發接口的交換表項,因此現在交換機就可以直接知道應該向哪個接口發送該幀。

  • 主機收到該幀后,不斷分解得到 DHCP 報文。之后就配置它的 IP 地址、子網掩碼和 DNS 服務器的 IP 地址,並在其 IP 轉發表中安裝默認網關。

2. ARP 解析 MAC 地址

  • 主機通過瀏覽器生成一個 TCP 套接字,套接字向 HTTP 服務器發送 HTTP 請求。為了生成該套接字,主機需要知道網站的域名對應的 IP 地址。

  • 主機生成一個 DNS 查詢報文,該報文具有 53 號端口,因為 DNS 服務器的端口號是 53。

  • 該 DNS 查詢報文被放入目的地址為 DNS 服務器 IP 地址的 IP 數據報中。

  • 該 IP 數據報被放入一個以太網幀中,該幀將發送到網關路由器。

  • DHCP 過程只知道網關路由器的 IP 地址,為了獲取網關路由器的 MAC 地址,需要使用 ARP 協議。

  • 主機生成一個包含目的地址為網關路由器 IP 地址的 ARP 查詢報文,將該 ARP 查詢報文放入一個具有廣播目的地址(FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送該以太網幀,交換機將該幀轉發給所有的連接設備,包括網關路由器。

  • 網關路由器接收到該幀后,不斷向上分解得到 ARP 報文,發現其中的 IP 地址與其接口的 IP 地址匹配,因此就發送一個 ARP 回答報文,包含了它的 MAC 地址,發回給主機。

3. DNS 解析域名

  • 知道了網關路由器的 MAC 地址之后,就可以繼續 DNS 的解析過程了。

  • 網關路由器接收到包含 DNS 查詢報文的以太網幀后,抽取出 IP 數據報,並根據轉發表決定該 IP 數據報應該轉發的路由器。

  • 因為路由器具有內部網關協議(RIP、OSPF)和外部網關協議(BGP)這兩種路由選擇協議,因此路由表中已經配置了網關路由器到達 DNS 服務器的路由表項。

  • 到達 DNS 服務器之后,DNS 服務器抽取出 DNS 查詢報文,並在 DNS 數據庫中查找待解析的域名。

  • 找到 DNS 記錄之后,發送 DNS 回答報文,將該回答報文放入 UDP 報文段中,然后放入 IP 數據報中,通過路由器反向轉發回網關路由器,並經過以太網交換機到達主機。

4. HTTP 請求頁面

  • 有了 HTTP 服務器的 IP 地址之后,主機就能夠生成 TCP 套接字,該套接字將用於向 Web 服務器發送 HTTP GET 報文。

  • 在生成 TCP 套接字之前,必須先與 HTTP 服務器進行三次握手來建立連接。生成一個具有目的端口 80 的 TCP SYN 報文段,並向 HTTP 服務器發送該報文段。

  • HTTP 服務器收到該報文段之后,生成 TCP SYN ACK 報文段,發回給主機。

  • 連接建立之后,瀏覽器生成 HTTP GET 報文,並交付給 HTTP 服務器。

  • HTTP 服務器從 TCP 套接字讀取 HTTP GET 報文,生成一個 HTTP 響應報文,將 Web 頁面內容放入報文主體中,發回給主機。

  • 瀏覽器收到 HTTP 響應報文后,抽取出 Web 頁面內容,之后進行渲染,顯示 Web 頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM