目錄
- 孤單小弟 HTTP
- 真實位址查詢DNS
- 可靠傳輸TCP
- 遠端定位IP
- 兩點傳輸MAC
- 最終
孤單小弟 HTTP
一個URL的組成
首先浏覽器需要對URL進行解析,進而生成發送給web伺服器的請求資訊。
URL是就是請求伺服器的檔案資源。
假如不帶檔案路徑呢?通常伺服器會在根目錄下放置一個預設的Index.html,傳回他即可。
浏覽器解析出URL,确定了對方的web伺服器和檔案名。生成請求。
一個孤單的HTTP資料包背起了行囊。
真實位址查詢DNS
通常輸入的伺服器域名是字元串,因為直接輸入IP難以記憶。DNS伺服器(端口為53)專門儲存了web伺服器域名和IP之間的對應關系。
就像外國人說一個地點,xx街道xx區xx市xx省一樣。他們的習慣與我們相反。
根域處于網際網路任意一個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資料報經過交換機轉發至目标主機。
有了IP,不再迷茫,可是那麼遠,我下一站在哪?
兩點傳輸MAC
資料鍊路層根據MAC位址在一個接一個的區間中進行傳輸,每個區間的起始位址就是源MAC位址,目的位址就是目的MAC位址。
源MAC位址:直接從網卡的ROM裡讀取。經過路徑選擇,我們知道了各個路由器的IP,同時經過ARP協定,拿到他們的MAC位址。然後在兩點之間傳輸資料。是以源MAC,目的MAC是不斷變化的。
ARP協定:以廣播的形式對所有裝置詢問,這個IP位址是誰的,請把你的MAC位址告訴我。同時劃分一個ARP緩存存儲IP位址到MAC位址的映射。
謝謝大家的幫助,現在我終于可以出門了。
最終
自底向上不斷分離報頭,可靠地收到這些資料後,處理請求,傳回響應。經過同樣的步驟,将響應封包送給用戶端浏覽器。浏覽器收到響應後,渲染資料。四次揮手斷開連結。