面試官:瀏覽器請求時,背後都幹了些啥?

  1、面試題用瀏覽器請求一個鏈接的時候,經歷了哪些過程(DNS解析過程)?2、面試官心裏分析

  這個問題,其實就是跟之前的那個一樣,他就是考察考察你的基本功,看你對基本的網絡通信知識有沒有了解。

  而且話說回來,考察一個人的基本功,就這個問題應該是相當經典和直接的一個問題,你理解清楚了,那麼網絡通信這塊的一些基本概念,你基本都瞭解了。

  3、面試題剖析

  如果你閱讀過昨天發佈文章,就應該知道網絡七層模型大概都是怎麼回事了,然後四層模型其實就是會話層、表示層和應用層,合併爲了一個應用層,同時沒把物理層算在內

  並且我們也大概知道每一層的協議和作用,網絡通信的時候都是怎麼回事了,現在我們來看看假設通過瀏覽器發送一個請求,你訪問到那個網站對應的機器,然後人家再給你一個響應的全過程。

  現在我們先假設,我們給電腦設置了幾個東西:ip地址:192.168.31.37子網掩碼:255.255.255.0網關地址:192.168.31.1DNS地址:8.8.8.8這時,我們打開一個瀏覽器,請求www.baidu.com地址,這個時候找DNS服務器,DNS服務器解析域名之後,返回一個ip地址,比如172.194.26.108。

  接着會判斷兩個ip地址是不是一個子網的,用子網掩碼255.255.255.0,對兩個ip地址做與運算,拿到192.168.31.0和172.194.26.0,明顯不是一個子網的。

  如圖:

  


  那就得發送一個數據包給網關,其實你就認爲是我們的路由器吧,就是192.168.31.1,而且我們是可以拿到網關ip地址的mac地址的,現在我們從應用層出發,通過瀏覽器訪問一個網站,是走應用層的http協議的,並且要把瀏覽器發出的請求打包成數據包,要把哪些東西給放到數據包中去呢?

  http協議分爲幾個部分:

  請求方法+URL地址+http版本

  比如

  GEThttp://172.194.26.108/testHTTP/1.1,類似這種請求頭,類似下面這種:

  Host:upload.jiangsu.ioProxy-Connection:keep-aliveUser-Agent:Mozilla/5.0

  等等。。。

  請求體,比如常見的可以放一個json這就構成了一個http請求報文瀏覽器請求一個地址,先按照應用層的http協議,封裝一個應用層數據包,數據包裏就放了http請求報文,這個時候會將這個http請求報文打包成一個數據包,僅僅只是數據包的數據部分,此時是數據包是沒有頭的。上面根據http協議搞一個http請求報文,然後搞一個數據包出來,就是網絡模型中到的應用層乾的事兒了。接着就是跑傳輸層來了,這個層是tcp協議,這個tcp協議會讓你設置端口,發送方的端口隨機選一個,接收方的端口一般是默認的80端口。

  這個時候,會把應用層數據包給封裝到tcp數據包中去,而且會加一個tcp頭,這個tcp數據包是對應一個tcp頭的,這個tcp頭裏就放了端口號信息。如圖:

  

  接着跑到網絡層來了,走ip協議,這個時候會把tcp頭和tcp數據包,放到ip數據包裏去,然後再搞一個ip頭,ip頭裏本機和目標機器的ip地址。這裏本機ip地址是192.168.31.37,

  目標機器是172.194.26.108。

  因爲,通過ip協議,可以判斷說,兩個ip地址不是在一個子網內的,所以此時只能將數據包先通過以太網協議廣播到網關上去,通過網關再給他發送出去,如圖:

  

http://img1.sycdn.imooc.com/5e634a7e0001d8ef06920197.jpg


  接着是數據鏈路層,這塊走以太網協議,這裏是把ip頭和ip數據包封到以太網數據包裏去,然後再加一個以太網數據包的頭,頭裏放了本機網卡mac地址,和網關的mac地址。但是以太網數據包的限制是1500個字節,但是假設這個時候ip數據包都5000個字節了,那麼需要將ip數據包切割一下。這個時候一個以太網數據包要切割爲4個數據包,每個數據包包含了以太網頭、ip頭和切割後的ip數據包,4個數據包的大小分別是1500,1500,1500,560。ip頭裏包含了每個數據包的序號。如圖:

  

  這4個以太網數據包都會通過交換機發到你的網關上,然後你的路由器是可以聯通別的子網的,這個是時候你的路由器就會轉發到別的子網的可能也是某個路由器裏去,然後以此類推吧,N多個路由器或者你叫網關也行,N多個網關轉發之後,就會跑到百度的某臺服務器,接收到4個以太網數據包。百度服務器接收到4個以太網數據包以後,根據ip頭的序號,把4個以太網數據包裏的ip數據包給拼起來,就還原成一個完整的ip數據包了。接着就從ip數據包裏面拿出來tcp數據包,再從tcp數據包裏取出來http數據包,讀取出來http數據包裏的各種協議內容,接着就是做一些處理,然後再把響應結果封裝成htp響應報文,封裝在http數據包裏,再一樣的過程,封裝tcp數據包,封裝ip數據包,封裝以太網數據包,接着通過網關給發回去。如下圖:

  

http://img4.sycdn.imooc.com/5e634a7f0001f82c08300367.jpg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章