1. 程式人生 > 其它 >計算機網路面試題(一)

計算機網路面試題(一)

網路分層

1、說說OSI 七層、TCP/IP 四層的關係和區別?

OSI 七層從下往上依次是:物理層資料鏈路層網路層傳輸層會話層表示層應用層

一張圖給你整明白:

TCP/IP 四層從下往上依次是:網路介面層網路層傳輸層應用層

與 OSI 七層的對映關係如下:

特點:

  • 層與層之間相互獨立又相互依靠
  • 上層依賴於下層,下層為上層提供服務

敲黑板:TCP/IP 四層是 OSI 七層的簡化版,已經成為實事國際標準。

TCP/IP

2、說說TCP 與 UDP 的區別?

總結

  • TCP 向上層提供面向連線的可靠服務 ,UDP 向上層提供無連線不可靠服務
  • UDP 沒有 TCP 傳輸可靠,但是可以在實時性要求高的地方有所作為。
  • 對資料準確性要求高,速度可以相對較慢的,可以選用TCP。

3、TCP 是如何實現資料的可靠性?

一句話:通過校驗和序列號確認應答超時重傳連線管理流量控制擁塞控制等機制來保證可靠性

(1)校驗和

在資料傳輸過程中,將傳送的資料段都當做一個16位的整數,將這些整數加起來,並且前面的進位不能丟棄,補在最後,然後取反,得到校驗和。

傳送方:在傳送資料之前計算校驗和,並進行校驗和的填充。

接收方:收到資料後,對資料以同樣的方式進行計算,求出校驗和,與傳送方進行比較。

(2)序列號

TCP 傳輸時將每個位元組的資料都進行了編號,這就是序列號

序列號的作用不僅僅是應答作用,有了序列號能夠將接收到的資料根據序列號進行排序,並且去掉重複的資料。

(3)確認應答

TCP 傳輸過程中,每次接收方接收到資料後,都會對傳輸方進行確認應答,也就是傳送 ACK 報文,這個 ACK 報文中帶有對應的確認序列號,告訴傳送方,接收了哪些資料,下一次資料從哪裡傳

(4)超時重傳

在進行 TCP 傳輸時,由於存在確認應答與序列號機制,也就是說傳送方傳送一部分資料後,都會等待接收方傳送的 ACK 報文,並解析 ACK 報文,判斷資料是否傳輸成功。

如果傳送方傳送完資料後,遲遲都沒有接收到接收方傳來的 ACK 報文,那麼就對剛剛傳送的資料進行重發

(5)連線管理

就是指三次握手、四次揮手的過程。

(6)流量控制

如果傳送方的傳送速度太快,會導致接收方的接收緩衝區填充滿了,這時候繼續傳輸資料,就會造成大量丟包

,進而引起丟包重傳等等一系列問題。

TCP 支援根據接收端的處理能力來決定傳送端的傳送速度,這就是流量控制機制

具體實現方式:接收端將自己的接收緩衝區大小放入 TCP 首部的『視窗大小』欄位中,通過 ACK 通知傳送端。

(7)擁塞控制

TCP 傳輸過程中一開始就傳送大量資料,如果當時網路非常擁堵,可能會造成擁堵加劇

所以 TCP 引入了慢啟動機制,在開始傳送資料的時候,先發少量的資料探探路。

4、說說 TCP 協議如何提高傳輸效率?

一句話:TCP 協議提高效率的方式有滑動視窗快重傳延遲應答捎帶應答等。

(1)滑動視窗

如果每一個傳送的資料段,都要收到 ACK 應答之後再發送下一個資料段,這樣的話我們效率很低,大部分時間都用在了等待 ACK 應答上了。

為了提高效率我們可以一次傳送多條資料,這樣就能使等待時間大大減少,從而提高效能

視窗大小指的是無需等待確認應答而可以繼續傳送資料的最大值。

(2)快重傳

快重傳也叫高速重發控制

那麼如果出現了丟包,需要進行重傳。

一般分為兩種情況:

情況一:資料包已經抵達,ACK被丟了。這種情況下,部分ACK丟了並不影響,因為可以通過後續的ACK進行確認

情況二:資料包直接丟了。傳送端會連續收到多個相同的 ACK 確認,傳送端立即將對應丟失的資料重傳。

(3)延遲應答

如果接收資料的主機立刻返回ACK應答,這時候返回的視窗大小可能比較小。

  • 假設接收端緩衝區為1M,一次收到了512K的資料;如果立刻應答,返回的視窗就是512K;
  • 但實際上可能處理端處理速度很快,10ms之內就把512K的資料從快取區消費掉了;
  • 在這種情況下,接收端處理還遠沒有達到自己的極限,即使視窗再放大一些,也能處理過來;
  • 如果接收端稍微等一會在應答,比如等待200ms再應答,那麼這個時候返回的視窗大小就是1M;

視窗越大,網路吞吐量就越大,傳輸效率就越高

我們的目標是在保證網路不擁塞的情況下儘量提高傳輸效率。

(4)捎帶應答

在延遲應答的基礎上,很多情況下,客戶端伺服器在應用層也是一發一收的。

這時候常常採用捎帶應答的方式來提高效率,而ACK響應常常伴隨著資料報文共同傳輸。如:三次握手。

5、你知道 TCP 如何處理擁塞嗎?

網路擁塞現象是指到達通訊網路中某一部分的分組數量過多,使得該部分網路來不及處理,

以致引起這部分乃至整個網路效能下降的現象,嚴重時甚至會導致網路通訊業務陷入停頓,即出現死鎖現象

擁塞控制是處理網路擁塞現象的一種機制

擁塞控制的四個階段:

  • 慢啟動
  • 擁塞避免
  • 快速重傳
  • 快速恢復

6、講一下三次握手和四次揮手全過程

7、為什麼 TCP 連結需要三次握手,兩次不可以麼,為什麼?

8、IP地址是怎樣分類的,你知道嗎?

先說一下 IP 的基本特點:

  • IP地址由四段組成,每個欄位是一個位元組,8位,最大值是255
  • IP地址由兩部分組成,即網路地址和主機地址網路地址表示其屬於網際網路的哪一個網路,主機地址表示其屬於該網路中的哪一臺主機。

IP 地址主要分為A、B、C三類及特殊地址D、E這五類,甩一張圖:

A類:(1.0.0.0-126.0.0.0)一般用於大型網路。

B類:(128.0.0.0-191.255.0.0)一般用於中等規模網路。

C類:(192.0.0.0-223.255.255.0)一般用於小型網路。

D類:是多播地址,地址的網路號取值於224~239之間一般用於多路廣播使用者。

E類:是保留地址。地址的網路號取值於240~255之間。

HTTP協議

9、講一下 http1.1 和 http2 有什麼區別?

HTTP1.1

  • 持久連線
  • 請求管道化
  • 增加快取處理新的欄位如cache-control)
  • 增加 Host 欄位、支援斷點傳輸等

HTTP2.0

  • 二進位制分幀
  • 多路複用或連線共享)
  • 頭部壓縮
  • 伺服器推送

10、說說 HTTP 和HTTPS 的區別?

(1)HTTPS 協議需要到 CA 申請證書,一般免費證書較少,因而需要一定費用。

(2)HTTP 是超文字傳輸協議,資訊是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。

(3)HTTP 和 HTTPS 使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

(4)HTTP 的連線很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網路協議,比 HTTP 協議安全。

11、你知道對稱加密和非對稱加密的區別和原理嗎?

對稱金鑰加密是指加密和解密使用同一個金鑰的方式,這種方式存在的最大問題就是金鑰傳送問題,即如何安全地將金鑰發給對方;

非對稱加密是指使用一對非對稱金鑰,即公鑰私鑰公鑰可以隨意釋出,但私鑰只有自己知道傳送密文的一方使用對方的公鑰進行加密處理,對方接收到加密資訊後,使用自己的私鑰進行解密。

由於非對稱加密的方式不需要傳送用來解密的私鑰,所以可以保證安全性

但是和對稱加密比起來,它比較,所以我們還是要用對稱加密來傳送訊息對稱加密所使用的金鑰我們可以通過非對稱加密的方式傳送出去

12、常見的狀態碼有哪些?

1×× : 請求處理中,請求已被接受,正在處理

2×× : 請求成功,請求被成功處理 200 OK

3×× : 重定向,要完成請求必須進行進一步處理, 301 : 永久性轉移 302 :暫時性轉移 304 :已快取

4×× : 客戶端錯誤,請求不合法, 400:Bad Request,請求有語法問題 403:拒絕請求 404:客戶端所訪問的頁面不存在

5×× : 伺服器端錯誤,伺服器不能處理合法請求500 :伺服器內部錯誤 503 :服務不可用,稍等

13、http中常見的header欄位有哪些?

cookie,請求時傳遞給服務端的cookie資訊

set-cookie,響應報文首部設定要傳遞給客戶端的cookie資訊

allow,支援什麼HTTP方法

last-modified,資源的最後修改時間

expires,設定資源快取的失敗日期

content-language,實體的資源語言

content-encoding,實體的編碼格式

content-length,實體主體部分的大小單位是位元組

content-range,返回的實體的哪些範圍

content-type,哪些型別

accept-ranges,處理的範圍請求

age,告訴客戶端伺服器在多久前建立了響應

vary,代理伺服器的快取資訊

location,用於指定重定向後的URI

If-Match,值是資源的唯一標識

User-Agent,將建立請求的瀏覽器和使用者代理名稱等資訊傳遞給伺服器

Transfer-Encoding,傳輸報文的主體編碼方式

connection,管理持久連線,

keep-alive ,

close Cache-Control,控制瀏覽器的強快取

14、Get與POST的區別

(1)GET 一般用來從伺服器上獲取資源,POST 一般用來建立資源;

(2)GET 是冪等的,即讀取同一個資源,總是得到相同的資料,而 POST 不是冪等的。GET 不會改變伺服器上的資源,而 POST 會對伺服器資源進行改變;

(3)從請求引數形式上看,GET 請求的資料會附在URL之後;而 POST 請求會把提交的資料則放置在是HTTP請求報文的請求體中。

(4)POST 的安全性要比 GET 的安全性高,因為 GET 請求提交的資料將明文出現在 URL 上,而 POST 請求引數則被包裝到請求體中,相對更安全。

(5)GET 請求的長度受限於瀏覽器或伺服器對URL長度的限制,允許傳送的資料量比較小,而POST請求則是沒有大小限制的。

15、DNS 的定址過程你知道嗎?

(1)在瀏覽器中輸入www.baidu.com域名,作業系統會先檢查自己本地的 hosts 檔案是否有這個網址對映關係,如果有就先呼叫這個IP地址對映,完成域名解析

(2)如果 hosts 裡沒有這個域名的對映,則查詢本地 DNS 解析器快取,是否有這個網址對映關係,如果有直接返回,完成域名解析。

(3)如果 hosts 與本地 DNS 解析器快取都沒有相應的網址對映關係,首先會找 TCP/IP 引數中設定的首選 DNS 伺服器,在此我們叫它本地 DNS 伺服器,

·  此伺服器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。

(4)如果要查詢的域名,不由本地 DNS 伺服器區域解析,但該伺服器已快取了此網址對映關係,則呼叫這個 IP 地址對映,完成域名解析,此解析不具有權威性。

(5)如果本地 DNS 伺服器本地區域檔案與快取解析都失效,則根據本地 DNS 伺服器的設定(是否設定轉發器)進行查詢,

  如果未用轉發模式,本地 DNS 就把請求發至13臺根 DNS ,根 DNS 伺服器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名伺服器的一個IP。

  本地 DNS 伺服器收到IP資訊後,將會聯絡負責 .com 域的這臺伺服器。這臺負責 .com 域的伺服器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS伺服器地址(baidu.com)給本地 DNS 伺服器

  當本地 DNS 伺服器收到這個地址後,就會找 baidu.com 域伺服器,重複上面的動作,進行查詢,直至找到 www.baidu.com 主機。

(6)如果用的是轉發模式此 DNS 伺服器就會把請求轉發至上一級 DNS 伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根 DNS 或把轉請求轉至上上級,以此迴圈。不管是本地 DNS 伺服器用是是轉發,還是根提示,最後都是把結果返回給本地 DNS 伺服器,由此 DNS 伺服器再返回給客戶機。

16、在瀏覽器中輸入一個www.baidu.com後執行的全部過程?

總體流程

域名解析 -> 建立TCP連線(三次握手)-> 發起http請求 -> 伺服器響應http請求,瀏覽器得到html程式碼 -> 瀏覽器解析html程式碼,並請求html程式碼中的資源(如 js、css、圖片等)-> 瀏覽器對頁面進行渲染呈獻給使用者。

17、Session、Cookie 的區別

  • session 在伺服器端,cookie 在客戶端(瀏覽器)
  • session 預設被儲存在伺服器的一個檔案裡(不是記憶體)
  • session 的執行依賴 session id,而 session id 是存在 cookie 中的,也就是說,如果瀏覽器禁用了 cookie ,同時 session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 session_id)
  • session 可以放在 檔案、資料庫、或記憶體中都可以。
  • 使用者驗證這種場合一般會用 session

18、有哪些 web 效能優化技術?

  • DNS查詢優化
  • 客戶端快取
  • 優化TCP連線
  • 避免重定向
  • 網路邊緣的快取
  • 條件快取
  • 壓縮和程式碼極簡化
  • 圖片優化

網路安全

19、什麼是 XSS 攻擊?

XSS 即(Cross Site Scripting)中文名稱為:跨站指令碼攻擊

XSS的重點不在於跨站點,而在於指令碼的執行。

XSS的原理是:

惡意攻擊者在web頁面中會插入一些惡意的script程式碼。當用戶瀏覽該頁面的時候,那麼嵌入到web頁面中script程式碼會執行,因此會達到惡意攻擊使用者的目的。

XSS攻擊最主要有如下分類反射型儲存型、及DOM-based型

反射性和DOM-baseed型可以歸類為非永續性XSS攻擊。儲存型可以歸類為永續性XSS攻擊

20、什麼是跨站攻擊CSRF?

CSRF(Cross Site Request Forgery,跨站域請求偽造)是一種網路的攻擊方式,它在 2007 年曾被列為網際網路 20 大安全隱患之一,也被稱為『One Click Attack』或者 『Session Riding』,通常縮寫為CSRF或者XSRF是一種對網站的惡意利用。

聽起來像跨站指令碼(XSS),但它與XSS非常不同,並且攻擊方式幾乎相左。

XSS利用站點內的信任使用者,而CSRF則通過偽裝來自受信任使用者的請求來利用受信任的網站

與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性

參考