天天看點

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

目錄

  • 孤單小弟 HTTP
  • 真實位址查詢DNS
  • 可靠傳輸TCP
  • 遠端定位IP
  • 兩點傳輸MAC
  • 最終

孤單小弟 HTTP

一個URL的組成

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

首先浏覽器需要對URL進行解析,進而生成發送給web伺服器的請求資訊。

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

URL是就是請求伺服器的檔案資源。

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

假如不帶檔案路徑呢?通常伺服器會在根目錄下放置一個預設的Index.html,傳回他即可。

浏覽器解析出URL,确定了對方的web伺服器和檔案名。生成請求。

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

一個孤單的HTTP資料包背起了行囊。

真實位址查詢DNS

通常輸入的伺服器域名是字元串,因為直接輸入IP難以記憶。DNS伺服器(端口為53)專門儲存了web伺服器域名和IP之間的對應關系。

就像外國人說一個地點,xx街道xx區xx市xx省一樣。他們的習慣與我們相反。

輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

根域處于網際網路任意一個DNS伺服器中。

講清楚這些再看。

  • 此時浏覽器發出一個dns請求,詢問本地DNS伺服器,域名對應的IP是啥。假如本地有緩存過它對應的IP,直接傳回。
  • 假如沒有,本地DNS伺服器會向根域DNS伺服器詢問,“大哥,請問這個域名的IP位址是啥”
  • 根域收到它請求,看見字尾為.com,指明一條道路,歸.com管,我給你.com的頂級域伺服器位址,你去問他。
  • 它(本地DNS伺服器)找到了頂級域伺服器,“二哥請問這個域名對應的IP位址是啥”
  • 二哥一看,這個域名,歸權威DNS伺服器管,你去問他
  • 它又找到了權威DNS伺服器,問道"三哥,這個域名對應的IP是啥",權威伺服器一查,本地DNS伺服器拿到對應的IP,傳回給自己的浏覽器。

經過不斷的問路,終于找到了目的地。接下來該怎麼發呢?

可靠傳輸TCP

資料鍊路層确定點到點,中間經過一個個源mac位址,目的mac位址的區間,不斷跳轉

首先,三次握手,建立連結。浏覽器就可以發送自己的請求封包,假如資料大小大于MSS還會進行分段之後加報頭,同時TCP還有保證可靠性,效率的一些機制。

有了TCP的保證,很心安,可是我該往哪走?

遠端定位IP

IP協定将資料拿到,假如資料大小大于MTU,會進行分片後加IP報頭,IP報頭中擁有源IP,目的IP這兩個IP始終是不會變化的。

  • 源IP:用戶端有多個網卡,就有多個IP,經過route-n檢視路由表,根據目的ip按位與子網路遮罩,算出網段。觀察與哪個網卡相比對,填入網卡的IP。假如沒有填預設的。
  • 目的IP:就是之前DNS解析拿到的。

    知道了源IP,目的IP,經過多次路由選擇,就确定了本主機到另一台主機之間的路徑。

    路由選擇:

    目的IP,按位與子網路遮罩。算出網段。觀察本主機路由表,查找目的ip的網絡位址,假如有找到下一跳,假如沒有轉發給預設路由1。路由器1在路由表比對到了轉發給下一跳路由器,路由器比對到了而且發現是自己區域網路主機,将IP資料報經過交換機轉發至目标主機。

    輸入一個URL發生了什麼孤單小弟 HTTP真實位址查詢DNS可靠傳輸TCP遠端定位IP兩點傳輸MAC最終

有了IP,不再迷茫,可是那麼遠,我下一站在哪?

兩點傳輸MAC

資料鍊路層根據MAC位址在一個接一個的區間中進行傳輸,每個區間的起始位址就是源MAC位址,目的位址就是目的MAC位址。

源MAC位址:直接從網卡的ROM裡讀取。經過路徑選擇,我們知道了各個路由器的IP,同時經過ARP協定,拿到他們的MAC位址。然後在兩點之間傳輸資料。是以源MAC,目的MAC是不斷變化的。

ARP協定:以廣播的形式對所有裝置詢問,這個IP位址是誰的,請把你的MAC位址告訴我。同時劃分一個ARP緩存存儲IP位址到MAC位址的映射。

謝謝大家的幫助,現在我終于可以出門了。

最終

自底向上不斷分離報頭,可靠地收到這些資料後,處理請求,傳回響應。經過同樣的步驟,将響應封包送給用戶端浏覽器。浏覽器收到響應後,渲染資料。四次揮手斷開連結。

繼續閱讀