計算機網絡知識面試彙總(超詳細)

1、http和https的區別

  • http協議運行在TCP之上,明文傳輸,客戶端和服務端都無法驗證對方的身份。

  • https是在http基礎上和ssl/tls證書結合起來的一種協議,保證了傳輸過程中的安全性,減少了被惡意劫持的可能性,很好的解決了http的三個缺點,(被監聽,被篡改,被僞裝)。
    Https是身披SSL(Secure SocketLayer)外殼的Http,運行於SSL上,SSL運行於TCP之上,是添加了加密和認證機制的HTTP。

    區別

  • 端口不同:Http與Https使用不同的連接方式,用的端口也不一樣,前者是80,後者是443;

  • 資源消耗:和HTTP通信相比,Https通信會由於加減密處理消耗更多的CPU和內存資源;

  • 開銷:Https通信需要證書,而證書一般需要向認證機構購買;

2、對稱加密和非對稱加密

對稱加密

  • 加密的密鑰和解密的密鑰相同

非對稱加密

  • 非對稱加密將密鑰分爲公鑰和私鑰,公鑰可以公開,私鑰需要保密,客戶端公鑰加密的數據,服務端可以通過私鑰來解密

3、建立連接

  • http和https都需要建立在連接的基礎上進行數據傳輸。
  • 當客戶在瀏覽器中輸入網址,按下回車鍵的時候,瀏覽器會在瀏覽器的dns緩存,本地的dns緩存,和hosts中查找相應的記錄,如果沒有獲取到則會請求dns服務獲取相應的ip
  • 當獲取到ip後,tcp連接會進行三次捂手建立連接。

4、三次握手和四次分手

  • 握手(我要和你建立連接,你確定要和我建立連接麼?,確定)
  • 分手(我要和你斷開連接,好吧,斷。我也要和你斷開連接,好,斷)

三次握手的必要性,爲什麼兩次不行?
爲了保證服務器能接收到客戶端的請求並作出正確的響應而進行前兩次,(第一次和第二次)
爲了保證客戶端能接受到服務端的信息並做出正確的響應而進行後兩次,(第二次和第三次)
爲了防止已失效的鏈接請求報文突然又傳回服務端。而產生錯誤。

5、一次完整的HTTP事務流程

  • 域名解析

  • 發起TCP三次捂手

  • 建立TCP連接後發起http請求

  • 服務器返回http請求,瀏覽器得到HTML代碼

  • 瀏覽器解析HTML代碼,並請求HTML代碼中的資源

  • 瀏覽器對頁面進行渲染呈現個用戶

  • 連接結束

6、DNS域名解析

dns服務器中保存着域名和ip的對應關係,爲人們提供域名解析服務

解析過程:
本地DNS緩存 > 根DNS服務器 > 頂級DNS服務器 > 權威DNS服務器 > 二級域名的DNS服務器j
解析後將域名和ip的對應關係保存在本地緩存,供下次使用

7、TCP協議如何來保證傳輸的可靠性

TCP提供一種面向連接的、可靠的字節流服務。其中,面向連接意味着兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據之前必須先建立一個TCP連接。在一個TCP連接中,僅有兩方進行彼此通信;而字節流服務意味着兩個應用程序通過TCP鏈接交換8bit字節構成的字節流,TCP不在字節流中插入記錄標識符。

對於可靠性,TCP通過以下方式進行保證:

  • 數據包校驗:目的是檢測數據在傳輸過程中的任何變化,若校驗出包有錯,則丟棄報文段並且不給出響應,這時TCP發送數據端超時後會重發數據;

  • 對失序數據包重排序:既然TCP報文段作爲IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。TCP將對失序數據進行重新排序,然後才交給應用層;

  • 丟棄重複數據:對於重複數據,能夠丟棄重複數據;

  • 應答機制:當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒;

  • 超時重發:當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段;

  • 流量控制:TCP連接的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的數據,這可以防止較快主機致使較慢主機的緩衝區溢出,這就是流量控制。TCP使用的流量控制協議是可變大小的滑動窗口協議。

8、Get與POST的區別

GET與POST是我們常用的兩種HTTP Method,二者之間的區別主要包括如下五個方面:

(1). 從功能上講,GET一般用來從服務器上獲取資源,POST一般用來更新服務器上的資源;

(2). 從REST服務角度上說,GET是冪等的,即讀取同一個資源,總是得到相同的數據,而POST不是冪等的,因爲每次請求對資源的改變並不是相同的;進一步地,GET不會改變服務器上的資源,而POST會對服務器資源進行改變;

(3). 從請求參數形式上看,GET請求的數據會附在URL之後,即將請求數據放置在HTTP報文的 請求頭 中,以?分割URL和傳輸數據,參數之間以&相連。特別地,如果數據是英文字母/數字,原樣發送;否則,會將其編碼爲 application/x-www-form-urlencoded MIME 字符串(如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII);而POST請求會把提交的數據則放置在是HTTP請求報文的 請求體 中。

(4). 就安全性而言,POST的安全性要比GET的安全性高,因爲GET請求提交的數據將明文出現在URL上,而且POST請求參數則被包裝到請求體中,相對更安全。

(5). 從請求的大小看,GET請求的長度受限於瀏覽器或服務器對URL長度的限制,允許發送的數據量比較小,而POST請求則是沒有大小限制的。

9、瀏覽器緩存機制

在這裏插入圖片描述

10、客戶端使用HTTPS方式與web服務器通信的步驟:

(1)客戶使用HTTPS的URL訪問web服務器,要求與web服務器建立SSL連接

(2)web服務器收到客戶端請求後,將網站的證書信息(證書中包含公鑰)傳送一份給客戶端

(3)客戶端的瀏覽器與web服務器開始協商SSL連接的安全等級,也就是信息的加密等級

(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話祕鑰,然後利用網站的公鑰將會話祕鑰加密,並傳送給網站

(5)web服務器利用自己的私鑰解密出會話祕鑰

(6)web服務器利用會話祕鑰加密與客戶端之間的通信

11、如何從http切換到https?

  • 需要將頁面中的所有鏈接(js,css,圖片地址等)都由http改爲https
  • 去掉頁面連接頭中的http頭部,這樣自動匹配http頭和https頭

12、OSI與TCP/IP各層的結構與功能,都有哪些協議?

在這裏插入圖片描述

12、前端優化方案

  • 減少請求數量:合併腳本和樣式表,css,劃分區域
  • 減低請求帶寬:使用GZip,精簡js,移除重複腳本,圖像優化,儘可能減少DOM節點數。
  • 緩存利用:使用CDN,使用外部的js和css,減少DNS查找,添加Expires頭,配置ETag,使Ajax可緩存
  • 頁面結構:將樣式表放在頭部,將腳本放在底部,儘早刷新文檔的輸出
  • 代碼校驗:避免css表達式,避免重定向
    - 移動端優化方案
    在上述的前端優化方案的基礎上,可以做以下優化:保持單個內容小於25KB,打包組件成符合文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章