1. 程式人生 > >一次web請求的完整過程

一次web請求的完整過程

Web 頁面請求過程

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 頁面。