當個人瀏覽器輸入域名後,發生了什麼?(轉)

文章轉自 https://www.cnblogs.com/shy0322/p/9276883.htmlhtml

咱們以百度爲例子,當我在瀏覽器的中輸入網址www.baidu.com時,發生了什麼?瀏覽器

     

1.域名解析緩存

  要知道,數據傳輸時所識別的數據鏈路層封裝的幀,並非經過字符串「www.baidu.com」傳輸的,而是經過對放的MAC地址找到對方的(硬件地址),那麼要想得到MAC地址,天然也是經過IP地址並經過ARP協議轉換而來的。安全

  由於應用層只認識IP地址,因此當務之急,要想獲取數據,必須先了解「www.baidu.com」域名所對應的IP地址。服務器

  想到了什麼?DNS服務器——域名解析服務器網絡

  可是咱們要知道,咱們的網絡環境是錯綜複雜的,因此能本身自立根深解決的問題,儘可能不要去麻煩別人,就比如你不肯定高速路上堵不堵,你能夠在家樓下買到香菸,何須大老遠上高速去上海買呢?分佈式

  

 

 

  a)瀏覽器會從主機的Hosts文件中查看是否有百度域名和IP地址的映射。post

   Hosts文件是一個用於存儲計算機網絡中節點信息的文件,它能夠將主機名映射到相應的IP地址,實現DNS的功能,它能夠由計算機的用戶進行控制。網站

   (PS:因此若是咱們修改它,將www.baidu.com的對應IP改成127.0.0.1,看看會發生什麼?)計算機網絡

 

  b)若是Hosts文件沒有,瀏覽器會查看本身的緩存。(由上面 PS 中的結果能夠得出結論順序爲先 a) 再 b) 仍是先 b) 再 a))。

 

  c)當上面兩個方法都行不通時,只能去請求DNS服務器來獲取IP地址,這個過程用圖片更好理解

  咱們先來看一下分佈式的域名系統DNS:

  

  咱們以m.xyz.com 向 a.abc.com發送郵件爲例,咱們m.xyz.com詢問對方域名解析的方式分別是迭代查詢和遞歸查詢,如圖所示:

  


    

 

2.發起鏈接,構造請求。

  獲取了對方的IP地址後,咱們天然要發送相對的HTTP報文(固然由於百度是https://www.baidu.com/,因此在發送HTTP請求報文前要先發送一個HTTPS報文創建一個安全信道,而且肯定網站的真實性。)

  a)創建TCP鏈接,牢記三次握手的過程。

  

  b)確認鏈接後發送一個HTTP請求報文。

   在這裏要清楚網絡棧模型封裝HTTP數據包的過程,先是寫入HTTP報文的信息——首行、頭部、空行、內容。再是在傳輸層打包,加上TCP首部,再來到IP層加上IP頭部,經過ARP協議知道對方的MAC地址,到數據鏈路層打包封裝成幀,經過路由轉發,抵達目的MAC地址,再自下而上拆包,知道抵達對方服務器。以後對方服務器寫一個響應報文再用一樣的方式傳回。

  HTTP請求報文的格式:

  

  須要注意的是,還有兩個很常見的報文方法是 CONNECT 和 GET 。

  CONNECT表示要求用隧道協議鏈接代理,鏈接https協議下的域名時常常能夠抓到這個類型的包。

  GET表示獲取資源,與POST做用大體相同,最大的不一樣就是POST有body,而GET沒有。

 

3.數據轉發

  咱們在2中有說起過細粒度上的路由轉發。那麼在粗粒度上發生了什麼?

  a)請求抵達運營商維護的CDN服務器,看看是否有該請求對應響應的靜態頁面。

    CDN的一大做用就是貯存一些在它所管理區域會頻發用到的響應靜態頁面,這在很大程度上就很好的減輕了網絡壓力,用戶不用直接去詢問網站的總部服務器,能夠更快獲得響應,增長了用戶體驗的幸福感,還減輕了網絡擁塞,一箭雙鵰。

  b)若是CDN沒有,則先詢問百度入口服務器,若是入口服務器有對應請求響應的靜態頁面,那麼能夠做爲一個反向代理回覆請求報文。

    入口服務器的做用也是爲了提升用戶體驗的幸福感,入口服務器也會貯存一些經常使用的靜態頁面,這也不用再深刻其餘服務器取數據了。

  c)若是入口服務器也沒有,則要深刻去相關的服務器取得數據。

    就好比我要看圖片,還有我登陸了帳號的信息,就會從圖片服務器,用戶管理服務器去取響應數據。

  詳情見圖:

  

相關文章
相關標籤/搜索