面試題:從輸入url到頁面展示

1.dns解析

爲什麼需要dns解析?

TCP/IP協議只認識ip地址,不認識域名,域名的設計爲了方便記憶,讓你記住一個baidu.com遠比記錄一個180.101.49.12靠譜.

具體什麼是dns解析?

d=domain n=name s=system

域名系統解析,就是把名字轉換成ip

怎麼做dns解析(dns解析的過程)

如果你輸入的是一個ip,那麼顯而易見,你不需要dns解析。

  1. 把輸入的url中的域名(主機名)抽離出來
  2. 判斷host文件是否有這個主機名
  3. 去查本地dns解析緩存
  4. 問老大的老大根服務器(TLD頂級域名服務器)是否能查出來
    1. 返回一個小老大的ip,你去問這個人試試
    2. 這個人不知道,但是他知道A知道,返回A的地址
    3. … 最後返回了一個ip給你

如果是轉發模式,會一級一級往上查找

什麼是dns負載均衡

在地理位置不同的地方訪問同樣的baidu.com,ip地址不一樣。會返回一個你所在的位置適合的ip給你

dns優化策略

使用meta告訴瀏覽器dns預取

<meta http-equiv="x-dns-prefetch-control" content="on" />

可以讓域名不需要點擊就在後臺解析

因爲靜態資源一般都是使用其他域名來存放(爲了解決一個域名只能同時創建6個左右的tcp連接),所以需要dns預解析來性能優化

瀏覽器緩存、系統緩存、路由器緩存、…進行dns優化

dns一般用tcp還是udp,哪個端口

udp傳輸效率高,傳輸字節數小於512字節的報文

因爲一次dns解析可能需要查詢多次,一次兩次tcp連接與udp還差距不大,但是多次就差距很大。

tcp傳輸大於512字節的報文

tcp可以傳輸證書,簽名,比較可靠

53端口

2.tcp協議

簡單介紹一下osi七層協議

應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層

tcp、udp在傳輸層 ip協議在網絡層 http在應用層 arp在數據鏈路層

三次握手與四次揮手

SYN(建立連接) ACK(確認) seq(序列號) FIN(結束)

三次握手:

  • 第一次客戶端發送 SYN=1 seq=x

  • 服務器收到,返回 SYN=1 SEQ=y ACK=1 ACKnumber=x+1

  • 客戶端收到,返回ACK=1 ACKnumber=y+1

  • 在每個階段丟包:在第三次丟包,服務器會超時重傳第二個包,直到收到相應或者超時

四次揮手:

  • FIN=1 SEQ=x 自己處於可以接受數據狀態
  • ACK=1,ACKnumber=x+1 收到了,但是我沒準備好
  • 還是服務端 FIN=1,seq=y
  • 客戶端ACK=1 ACKnumber=y+1 進入TIME_WAIT狀態
    • 這個狀態是主動關閉的一方保持的
    • 爲了解決最後一個包丟包重傳
    • 爲了之前發的包不影響下一次連接

3.https

通俗易懂:https=http+ssl/tls(鑑權/認證)

爲了解決http竊聽篡改冒充

基本流程:公鑰(非對稱)加密算法:加密和解密的key不一致

客戶端要一個公鑰,加密完成發給你。你收到了,拿自己的私鑰解密

  • 怎麼保證公鑰是你發的公鑰
    • 使用證書
  • 公鑰加密整個信息太耗時。
    • 使用對話密鑰(對稱加密)加密信息,公鑰加密對話祕鑰本身
  1. 客戶端向服務器要公鑰並驗證

  2. 雙方生成對話密鑰

  3. 通信

  4. ClientHello 我支持A、B、C、D·····加密方法,支持協議版本是1.0,再帶一個隨機數給你

  5. 那我們用C方法吧,帶一個隨機數,我的證書包裹着我的公鑰給你。

  6. 收到證書,看一下是不是你,是的話拿出公鑰,再公鑰把一個隨機數加密傳給服務器,並且告訴對方我們要加密說話了

    • 證書是B帶着公鑰去機構C申請,然後發給A。A確認是不是B,是B則用這個公鑰
  • 爲什麼要再生成一個隨機數。因爲前兩次的隨機數是公開的,這一次的隨機數是加密的,不容易被猜出
  1. 收到,組成一個對話密鑰,然後告訴對方接下來要開始加密說話了。

4.瀏覽器解析和渲染

瀏覽器通過前面鋪墊這麼多次終於拿到了html

瀏覽器開始解析html,並將元素轉換成一個個dom,構建成dom樹和css樹

  1. 構建dom樹
  2. 構建cssom樹
  3. 加載js(遇到script標籤,阻塞dom樹的創建)等js運行完成,纔會繼續創建dom樹
    • 主要是因爲js有可能會對dom操作,瀏覽器無法知道dom節點最後的內容,爲了不造成無意義的操作,阻塞dom樹
  4. 構建渲染樹
    1. 由dom和cssom樹合併,(三者一邊加載一邊解析一邊渲染),根據選人數計算可見元素佈局,繪製到屏幕上
  5. 重排和重繪
    1. 重繪就是重新繪製,比如把顏色改了一下
    2. 重排就是重新排列,樹節點改變,需要重新佈局,生成渲染樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章