前端面試必備的網絡知識

五層網絡模型

  • 組成
    • 應用層
      • 組成
        • 應用層
        • 表示層
          • 做用:用來作數據格式化或者加密等操做
        • 會話層
      • 做用:爲應用軟件提供了不少服務,構建於協議之上。
      • 應用層協議(類比暗號)
        • 分類
          • HTTP協議
          • DNS協議(域名解析)
          • FTP協議(文件傳輸)
          • SMTP協議(郵件傳輸)
        • 做用:就像是能識別HTTP協議的程序才能解讀HTTP協議裏傳輸的數據內容
    • 傳輸層
      • 做用:對數據傳輸鏈接的創建和管理,在網絡的世界聞名稱之爲傳輸層。
      • 傳輸層協議
        • UDP協議
          • UDP協議是盡最大努力保證數據送到,可是不保證數據必定可以送到。咱們常常用到的Ping命令,來測試主機之間是否聯通,原理就是UDP協議。這種在送信過程途中把信弄丟了的狀況,在網絡世界咱們稱之爲:丟包。
        • TCP協議
          • TCP協議是會保證數據的正確性,也會保證數據的順序性。
    • 網絡層
      • 做用:爲數據在節點之間傳輸建立邏輯鏈路
      • 網絡層協議
        • IP協議
          • 這裏的每一棟樓房都至關於鏈接到網絡中的一臺計算機,每一個屋子都至關於計算機上的一個端口,而交通網絡就像是計算機世界的網絡。
          • 在網絡的世界中,咱們稱之爲網絡層。在現實世界中咱們要找到一我的的住址咱們須要的地址和門牌號,地址和門牌號具備必定的格式,這種格式類比到網絡世界中就是一種協議,咱們稱之爲網絡層協議。
          • 咱們在網絡世界中一般用IP加端口來定位一個程序的位置,這種方式就是一種網絡層協議,咱們稱之爲IP協議。
    • 數據鏈路層
      • 做用:爲通信在實體間建立邏輯鏈路
      • 數據鏈路層又分爲兩個部分或者稱爲兩個子層,一個是地圖上顯示的路線咱們稱之爲:邏輯鏈路控制子層。
      • 另外一個是現實世界的路線,咱們稱之爲:媒體訪問控制子層,這層的縮寫你們確定熟悉--MAC,也就是人們常說的MAC地址。
    • 物理層
      • 做用:是定義物理設備如何傳輸數據(光纜丶網線)
  • 過程
    • 五層網絡模型在數據運輸的過程當中,先是從A處的應用層到運輸層到網絡層到數據鏈路層到物理層,將數據運送到B處,而後再從B處的物理層到數據鏈路層到網絡層到運輸層到運用層。
    • 每層協議本質上就是在外面套一層特殊格式的數據。因此在將數據送到的時候,須要將這一層層的協議拆開,如何才能獲得裏面的數據。

TCP協議

  • TCP三次握手
    • 做用:三次握手主要目的是爲了確認兩臺主機都具有收和發的能力
    • 過程
      • 第一次握手
        • 主要傳遞兩個信息,一個是請求創建鏈接(SYN=1),二是發出一個序列號(seq=n)。
        • 做用:第一次握手讓B主機知道A能夠發出信息
      • 第二次握手
        • 此次回覆三個信息,以是贊成創建鏈接(SYN=1),二是確認收到了剛纔的信息(ack=剛纔的seq+1),三是發出本身的序列號(seq=x)。
        • 做用:第二次握手讓A知道了B能收到也能發出。
      • 第三次握手
        • 此次回覆三個信息,一是表示如今開始發送(SYN=0),二是成功收到了剛纔的信息(ack=剛纔的seq+1),三是發出本身的序號(最開始發出序號+1)。
        • 做用:第二次握手讓A知道了B能收到也能發出。
  • TCP四次握手
    • 核心在於四個時間點,分別是:發完了,知道發完了,收完了,知道收完了。
    • 過程
      • 第一次揮手
        • A告訴B數據發送完了
      • 第二次揮手
        • B知道A發完了
      • 第三次揮手
        • B告訴A接收完了
      • 第四次揮手
        • A知道B接收完了
  • 爲何握手只須要三次而揮手須要四次?
    • 就是由於A告訴B發完了的時候,B還有可能沒有接收完信息,因此只能先回復一部分,告訴A已經知道發完了的消息了。當消息徹底接收完畢以後,纔會告訴A已經接收完了。

HTTP

  • 定義web

    • HTTP全稱是HyperText Transfer Protocal,即超文本傳輸協議,是因特網上應用最爲普遍的一種網絡傳輸協議,全部的WWW文件都必須遵照這個標準。
    • HTTP是一個基於TCP/IP通訊協議來傳輸數據
  • HTTP工做原理瀏覽器

    • HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向WEB服務器發送全部的請求。
  • 特色緩存

    • HTTP是無鏈接。
      • 無鏈接的含義是限制每次鏈接只處理一個請求。
      • 服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。
      • 採用這種方式能夠節省傳輸時間。
    • HTTP是媒體獨立的
      • 這意味着,只要客戶端和服務器知道如何處理的數據內容,如何類型的數據均可以經過HTTP發送。
      • 客戶端以及服務器指定使用合適的MIME-type內容類型。
    • HTTP是無狀態的
      • HTTP協議是無狀態協議。無狀態協議是指對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。
      • 另外一方面,在服務器不須要先前信息時它的應答就較快。
  • 組成安全

    • 請求行
    • 首部
    • 實體
  • HTTP狀態碼服務器

    • 定義:
      • 用來描述返回的結果,記住狀態碼,咱們能夠知道的處理了請求仍是處理了錯誤,狀態碼響應類別一共有五種。好比200,數字中的第一位指響應類別,後兩位爲分類。
    • 五種類型分別是
      1XX(信息性狀態碼) 接受的請求正在處理,不常見
      2XX(成功狀態碼) 請求正常處理完畢
      3XX(重定向狀態碼) 須要進行附加操做已完成請求
      4XX(客戶端錯誤碼) 服務器沒法請求類別
      5XX(服務端錯誤狀態碼) 服務器處理請求出錯
    • 經常使用狀態碼
      • 2XX 成功
        200 客戶端請求在服務端正常處理
        204 請求成功可是沒有資源返回
        206 表示了客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求,首部字段中有content-rage意思是客戶端進行了範圍請求
      • 3XX 重定向
        301 永久性重定向
        302 臨時性重定向
        303 請求的資源存在另外一個URI,應使用GET方法定向獲取請求資源
        304 當瀏覽器屢次訪問同一個資源的時候,若是第一次請求的結果還在緩存,尚未過時,那麼在此訪問這個資源的時候,爲了減小網絡傳輸的消耗,若是這個資源尚未被修改過,則可讓瀏覽器繼續使用以前緩存的內容,這樣就不用將資源再發送一遍了,因此減小了不少網絡開銷。
        307 臨時重定向
      • 4XX 客戶端錯誤碼
        400 請求報文存在語法錯誤
        401 發送的請求須要經過HTTP認證的認證信息,若是以前請求過一次,則表示用戶認證失敗。
        403 不容許訪問該資源
        404 服務器上沒有該資源
      • 5XX 服務器錯誤
        500 服務器端在執行請求時發生錯誤
        503 服務器暫時處於超負荷或正在停機維護,沒法處理請求。
  • HTTP請求方式網絡

    get 從服務器取出資源
    post 在服務器新建一個資源
    put 在服務器更新資源
    delete 從服務器刪除資源
    • GET和POST真正區別
      • 在本質上,GET請求和POST請求都能拉取數據。
      • 咱們常說的HTTP協議其實是基於RFC規範的,實際上GET和POST請求的語法是徹底相同的,可是在RFC規範中,給GET請求和POST請求規定了語法,規定GET用來獲取信息,POST用來發送信息。
      • 若是什麼前提都沒有,也就是不用任何規範的話,咱們只考慮語法來講,這兩個方式是沒有任何區別的,只是名字不同。
      • 若是是基於RFC規範的,那麼問題就又來了。是基於RFC理論 的,仍是基於具體的實現的。
        • 若是是基於RFC理論的,咱們稱這個爲Specification。那麼GET和POST是具備相同的語法,可是不具有相同的語義,GET方式用做獲取信息,POST方式用做發送信息。
        • 若是是基於RFC的具體實現的,咱們稱之爲implementation。其實要區分是具體的哪種實現,咱們一般默認指的是瀏覽器少先隊額RFC。固然不止瀏覽器,咱們任何人均可以設計一種HTTP協議的接口,使用RFC規範,固然這些是咱們不用考慮的,由於並不通用。
          • GET的數據在URL中對全部人都是可見的。POST的數據不會顯示在URL中。
          • GET對數據長度有限制,當發送數據時,GET方法向URL添加數據;URL的長度是受限制的(URL是最大長度是2048個字符)。POST無限制。
          • GET可收藏爲書籤,POST不可收藏爲書籤。
          • GET後退按鈕/刷新無影響,POST數據會被從新提交(瀏覽器應該告知用戶數據會被從新提交)
          • GET編碼類型aplication/x-www-form-url,POST編碼類型encodeapplication/x-www-form-urlencoded或multipart/form-data。爲二進制數據使用多重編碼。
          • GET歷史參數會保留在瀏覽器歷史中。POST參數不會保存在瀏覽器歷史中。
          • GET只容許SCII字符。POST沒有限制。也容許二進制數據。
          • 與POST相比,GET的安全性比較差,由於所發送的數據是URL的一部分。在發送密碼或其餘敏感信息的時候毫不要要善於GET!POST比GET更安全,由於參數不會。被保存在瀏覽器歷史或web服務器日誌中。
          • GET請求只會有一次TCP鏈接,而POST請求會有兩次 TCP鏈接。
  • HTTP緩存機制架構

    • cache-control
      • max-age
        • 做用:緩存的資源,超過必定時間就不要了,就要從新請求。
        • max-age後面一般跟着一串數字,表示緩存的秒數。
      • max-stale
        • 做用:過時一點的時間無所謂。
        • max-stale後面也跟着秒數,表示過時多長時間的東西也能夠繼續使用。
        • max-stale多數的時候會跟着max-age一塊兒使用
      • no-cache
        • 做用:不會直接使用緩存,而是每次使用資源以前,都要先向服務器詢問一下這個資源還能不能用,若是能用就繼續用,若是不能用就從新請求。
      • no-store
        • 做用:每次都要向服務器請求資源。
      • public
        • 做用:表示任何地方均可以緩存資源。
      • private
        • 做用:只容許客戶端進行緩存,代理服務器不能緩存這個資源。
      • must-revalidation
        • max-age和must-revalidation都是本地過時以後去服務端從新請求資源。
        • 可是區別在於,若是使用max-age,那麼若是資源沒過時,新開的窗口也會使用這個資源。若是是must-revalidation,每次新打開窗口,都會向服務器去請求資源。
      • no-transform
        • 做用:一般當傳輸圖片或資源時,有時代理服務器爲了有更好的性能,會對圖片或者資源進行壓縮,或者格式的轉換。可是若是在響應頭中帶有這個字段,就表示不容許在傳輸的中途對資源作任何修改。
  • HTTP報文信息app

  • HTTP首部字段dom

(DNS協議)域名解析過程

  • 定義:從咱們輸入域名開始直到咱們得到要訪問的ip地址的過程
  • 過程
    • 當咱們輸入一個URL的時候,瀏覽器會先從本地的緩存中看,有沒有這個域名對應。
    • 當要訪問的URL沒有命中本地的瀏覽器緩存時,就要查看計算機本地的HOST指向,有沒有相關的記錄。計算機本地的HOST是一個文件,記錄着域名和IP的映射關係。
    • 當瀏覽器緩存和計算機HOST都沒有命中的時候,就要求助於本地的DNS解析服務器了。本地的DNS解析服務器咱們稱之爲LDNS。這些這些服務器距離咱們比較近,可能在每一個城市都會有。
      • 每一個城市的DNS也不可能記住全世界全部的網址,全部的LDNS也有可能找不到相應的域名對應的IP。
      • 當本地的DNS解析找不到的時候,就會求助更權威的機構。也就是gTLD Server。gTLD Server全稱是Generic top-level domain Server,通用頂級域Server。
      • 咱們常見的域名後綴有.com的,有.net的,有.org的等等不少。每一個頂級域名都有一個記錄者全部註冊過相應域名的記錄。好比.com域名的服務器就會記錄着所有註冊過的.com的域名。
        • 每一個域名後綴的頂級域名也不可能只有一臺,畢竟一臺機器 沒法承受這麼大的訪問量,可能有好多臺。
        • 可是LDNS只會訪問其中的一臺,當被訪問的狀態gTLD Server收到了這個域名以後,會告訴LDNS你應該去詢問哪臺機器,而後LDNS再去相應的機器去詢問這個域名對應的IP。
      • 當LDNS從gTLD獲取到了域名對應的IP以後就會把這個信息返回到發出請求的計算機,而後LDNS會在本地進行緩存,相應的瀏覽器也會對這個域名和IP進行緩存,以保證下次再有訪問這個域名的時能夠很快的響應。

你的點贊是我持續輸出的動力 但願能幫助到你們 互相學習 有任何問題下面留言 必定回覆

相關文章
相關標籤/搜索