HTTP請求過程-域名解析和TCP三次握手建立鏈接


  我們在瀏覽器輸入http://www.baidu.com想要進入百度首頁,但是這是個域名,沒法准確定位到服務器的位置,所以需要通過域名解析,把域名解析成對應的ip地址,然后通過ip地址查找目的主機。整個訪問過程可以概括為:

  1. 域名解析
  2. 發起TCP三次握手建立連接
  3. 建立連接后發起http請求
  4. 服務器響應請求,瀏覽器獲取html源碼
  5. 瀏覽器解析html代碼,並請求相關css,js和圖片資源
  6. 瀏覽器渲染頁面

一、域名解析過程

  在瀏覽器輸入一串域名要訪問某網站的時候,瀏覽器幫我們做了如下事情(以Chrome瀏覽器和windows系統為例):

  1. Chrome瀏覽器首先檢查自己本地是緩存是否有對應的域名,有則直接使用。【查看Chrome瀏覽器dns緩存地址:chrome://net-internals/#dns
  2. 如果瀏覽器緩存中沒有,則查詢系統DNS緩存中的域名表,有則直接使用。【windows查看域名表的命令:ipconfig /displaydns】
  3. 系統緩存中還是沒有,則檢查hosts文件中的映射表。【windows中hosts文件路徑:C:\Windows\System32\drivers\etc】
  4. 本地實在找不到,則向DNS域名服務器發起請求查詢。【DNS服務器IP是本地配置的首選服務器,一般常用的有114.114.114.114(電信運營商提供)和8.8.8.8(Google提供)】
      • DNS服務器首先查找自身的緩存,有對應的域名ip則返回結果
      • 如果緩存中查找不到,DNS服務器則發起迭代DNS請求,首先向根域服務器發起請求查詢,假如本次請求的是www.baidu.com,根域服務器發現這是一個com的頂級域名,就把com域的ip地址返回給DNS服務器
      • DNS服務器向com域ip地址發起請求,查詢該域名的ip,此時該服務器返回了baidu.com的DNS地址。
      • 最后DNS服務器又向baidu.com的DNS地址發起查詢請求,最后找到了完整的ip路徑返回給DNS服務器,DNS再把ip信息返回給windows內核,內核再返回給瀏覽器,於是瀏覽器就知道該域名對應的ip地址了,可以開始進一步請求了。

  --------------------------------------------------------------------------------------------------------------------------

  DNS請求原理:

  

 

  每個域名用小數點分隔開變成多級,從右到左等級逐級遞減,所以最右邊的等級最高,每個域都有用一個域名服務器,管理則下屬域名,分布如下圖:

  

  所以DNS發送查詢請求的時候,先從根服務器獲對應頂級域名的ip,然后再逐級從定義域名ip向下查找各個下屬域服務的,找到完整的域名ip。這是一個迭代查詢的過程

  --------------------------------------------------------------------------------------------------------------------------

  總的來說:域名解析的過程就是一個由近及遠的過程,采取就近原則,再自頂向下搜索。

 

 

   【如果連DNS服務器也沒解析成功,那么進行如下步驟:】

  ⑤ 操作系統就會查找NetBIOS name Cache(NetBIOS名稱緩存,就存在客戶端電腦中的),那這個緩存有什么東西呢?凡是最近一段時間內和我成功通訊的計算機的計算機名和Ip地址,就都會存在這個緩存里面。什么情況下該步能解析成功呢?就是該名稱正好是幾分鍾前和我成功通信過,那么這一步就可以成功解析。

  ⑥ 如果第⑤步也沒有成功,那會查詢WINS 服務器(是NETBIOS名稱和IP地址對應的服務器)

  ⑦ 如果第⑥步也沒有查詢成功,那么客戶端就要進行廣播查找

  ⑧ 如果第⑦步也沒有成功,那么客戶端就讀取LMHOSTS文件(和HOSTS文件同一個目錄下,寫法也一樣)

如果第八步還沒有解析成功,那么就宣告這次解析失敗,那就無法跟目標計算機進行通信。只要這八步中有一步可以解析成功,那就可以成功和目標計算機進行通信。

二、建立TCP連接

  

  第一次握手:客戶端向服務器發送SYN報文,並發送客戶端初始序列號Seq=X;等待服務器確認,

  第二次握手:服務器接收客戶端的SYN報文,然后向客戶端返回一個包SYN+ACK響應報文,並發送初始序列號Seq=Y

  第三次握手:客戶端接受SYN+ACK報文,並向服務器發送一個ACK確認報文,至此連接建立

  【建立連接的最重要目是讓連接的雙方交換初始序號(ISN, Initial Sequence Number),所以再響應的ACK報文中會包含序列號遞增序列】

三、http請求和瀏覽器渲染過程

  請參考:http://www.cnblogs.com/caijh/p/7661402.html

 


免責聲明!

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



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