1. 程式人生 > >計算機網路高頻面試題解析(含書籍推薦)

計算機網路高頻面試題解析(含書籍推薦)

網路原理是工程師的必須瞭解的計算機基礎知識,先推薦下兩本好書,《圖解HTTP》和《圖解TCP/IP》。

《圖解TCP/IP》講解網路基礎知識、TCP/IP基礎知識、資料鏈路、IP協議、IP協議相關技術、TCP與UDP、路由協議、應用協議、網路安全等內容,《圖解HTTP》對HTTP協議進行了全面系統的介紹,這兩本書的特點都是在講解的同時,配上了大量漫畫通訊圖例,讀起來比較輕鬆。

高頻面試題解析

1、OSI七層網路模型的結構與功能

OSI是一個開放性的通訊系統互連參考模型,OSI 七層模型通過七個層次化的結構模型使不同的系統不同的網路之間實現可靠的通訊。

OSI是一個定義得非常好的協議規範,但是比較複雜所以一般使用TCP/IP 的四層模型來描述。

就目前來說,TCP/IP 的四層模型更受廣泛認可,在計算機網路中,大家更多喜歡使用 TCP/IP 模型來進行劃分和理解。因為表示層、會話層以及應用層之間的界限在實際應用中並不清晰,讓人不好區分。

2、TCP/IP四層協議有哪些結構與功能

TCP/IP 參考模型是一個包含了不同網路層次的一系列網路協議的集合。一般 TCP/IP 參考考模型分為四層,從下到上分別是,資料鏈路層、網路層、傳輸層和應用層。

也有將它分為五層的,也就是加上物理層,不過對於大部分的計算機網路應用,軟體工程師一般都是不關心物理層。

應用層提供了不同應用資料包的處理協議。常見的有 HTTP、FTP、DNS、Email、Telnet 等。

傳輸層為應用程式提供了端到端的通訊服務,該層的協議有兩個:TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Datagram Protocol,使用者資料包協議)。其中 TCP 提供的是有連線可靠服務,UDP 提供的是無連線不可靠服務。

網路層也稱網際網路層,核心協議是 IP 協議,是路由演算法工作的主要層。

資料鏈路層包括了邏輯鏈路控制層(Logical Link Control,LLC)和介質訪問控制層(Media Access Control,MAC)兩個子層。LLC 負責識別網路層協議,然後對它們進行封裝。LLC 報頭告訴資料鏈路層一旦幀被接收到時,應當對資料包做何處理。資料鏈路層還包括了裝置驅動程式部分的內容。

3、五層協議的體系結構,都有哪些協議

上面說了四層協議,我們在四層協議的基礎上再來詳細的說明下五層協議。

(1)應用層

應用層(application-layer)的任務是通過應用程序間的互動來完成特定網路應用。應用層協議定義的是應用程序(程序:主機中正在執行的程式)間的通訊和互動的規則。對於不同的網路應用需要不同的應用層協議。在網際網路中應用層協議很多,如域名系統 DNS,支援全球資訊網應用的 HTTP 協議,支援電子郵件的 SMTP 協議等等。我們把應用層互動的資料單元稱為報文。

(2)運輸層

運輸層(transport layer)的主要任務就是負責向兩臺主機程序之間的通訊提供通用的資料傳輸服務。應用程序利用該服務傳送應用層報文。“通用的”是指並不針對某一個特定的網路應用,而是多種應用可以使用同一個運輸層服務。由於一臺主機可同時執行多個執行緒,因此運輸層有複用和分用的功能。所謂複用就是指多個應用層程序可同時使用下面運輸層的服務,分用和複用相反,是運輸層把收到的資訊分別交付上面應用層中的相應程序。

運輸層主要使用以下兩種協議:
傳輸控制協議 TCP(Transmisson Control Protocol)--提供面向連線的,可靠的資料傳輸服務。
使用者資料協議 UDP(User Datagram Protocol)--提供無連線的,盡最大努力的資料傳輸服務(不保證資料傳輸的可靠性)。

(3)網路層

網路層(network layer)負責為分組交換網上的不同主機提供通訊服務。 在傳送資料時,網路層把運輸層產生的報文段或使用者資料報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由於網路層使用 IP 協議,因此分組也叫 IP 資料報 ,簡稱 資料報。
這裡要注意:不要把運輸層的“使用者資料報 UDP ”和網路層的“ IP 資料報”弄混。另外,無論是哪一層的資料單元,都可籠統地用“分組”來表示。
網路層的另一個任務就是選擇合適的路由,使源主機運輸層所傳下來的分株,能通過網路層中的路由器找到目的主機。
這裡強調指出,網路層中的“網路”二字已經不是我們通常談到的具體網路,而是指計算機網路體系結構模型中第三層的名稱.
網際網路是由大量的異構(heterogeneous)網路通過路由器(router)相互連線起來的。網際網路使用的網路層協議是無連線的網際協議(Intert Prococol)和許多路由選擇協議,因此網際網路的網路層也叫做網際層或IP層。

(4)資料鏈路層

資料鏈路層(data link layer)通常簡稱為鏈路層。兩臺主機之間的資料傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送資料時,資料鏈路層將網路層交下來的 IP 資料報組裝程幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括資料和必要的控制資訊(如同步資訊,地址資訊,差錯控制等)。
在接收資料時,控制資訊使接收端能夠知道一個幀從哪個位元開始和到哪個位元結束。這樣,資料鏈路層在收到一個幀後,就可從中提出資料部分,上交給網路層。
控制資訊還使接收端能夠檢測到所收到的幀中有誤差錯。如果發現差錯,資料鏈路層就簡單地丟棄這個出了差錯的幀,以避免繼續在網路中傳送下去白白浪費網路資源。如果需要改正資料在鏈路層傳輸時出現差錯(這就是說,資料鏈路層不僅要檢錯,而且還要糾錯),那麼就要採用可靠性傳輸協議來糾正出現的差錯。這種方法會使鏈路層的協議複雜些。

(5)物理層

在物理層上所傳送的資料單位是位元。
物理層(physical layer)的作用是實現相鄰計算機節點之間位元流的透明傳送,儘可能遮蔽掉具體傳輸介質和物理裝置的差異。 使其上面的資料鏈路層不必考慮網路的具體傳輸介質是什麼。“透明傳送位元流”表示經實際電路傳送後的位元流沒有發生變化,對傳送的位元流來說,這個電路好像是看不見的。

4、TCP和UPD的主要特點對比

UDP 的主要特點
UDP 是無連線的;
UDP 使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態(這裡面有許多引數);
UDP 是面向報文的;
UDP 沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如 直播,實時視訊會議等);
UDP 支援一對一、一對多、多對一和多對多的互動通訊;
UDP 的首部開銷小,只有8個位元組,比TCP的20個位元組的首部要短。

TCP 的主要特點
TCP 是面向連線的。(就好像打電話一樣,通話前需要先撥號建立連線,通話結束後要掛機釋放連線);
每一條 TCP 連線只能有兩個端點,每一條TCP連線只能是點對點的(一對一);
TCP 提供可靠交付的服務。通過TCP連線傳送的資料,無差錯、不丟失、不重複、並且按序到達;
TCP 提供全雙工通訊。TCP 允許通訊雙方的應用程序在任何時候都能傳送資料。TCP 連線的兩端都設有傳送快取和接收快取,用來臨時存放雙方通訊的資料;
面向位元組流。TCP 中的“流”(Stream)指的是流入程序或從程序流出的位元組序列。“面向位元組流”的含義是:雖然應用程式和 TCP 的互動是一次一個資料塊(大小不等),但 TCP 把應用程式交下來的資料僅僅看成是一連串的無結構的位元組流。

5、TCP 三次握手和四次揮手

為了準確無誤地把資料送達目標處,TCP協議採用了三次握手策略。
我們看一下《圖解HTTP》的漫畫圖解:

具體操作的示意圖:

客戶端–傳送帶有 SYN 標誌的資料包–一次握手–服務端
服務端–傳送帶有 SYN/ACK 標誌的資料包–二次握手–客戶端
客戶端–傳送帶有帶有 ACK 標誌的資料包–三次握手–服務端

6、為什麼要三次握手?

三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收是正常的。
第一次握手:Client 什麼都不能確認;Server 確認了對方傳送正常
第二次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己接收正常,對方傳送正常
第三次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己傳送、接收正常,對方傳送接收正常
所以三次握手就能確認雙發收發功能都正常,缺一不可。

7、三次握手為什麼要傳回 SYN,為什麼要ACK

SYN 是 TCP/IP 建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的 TCP 網路連線時,客戶機首先發出一個 SYN 訊息,伺服器使用 SYN-ACK 應答表示接收到了這個訊息,最後客戶機再以 ACK(Acknowledgement 確認字元 )訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的TCP連線,資料才可以在客戶機和伺服器之間傳遞。
接收端傳回傳送端所傳送的 SYN 是為了告訴傳送端,我接收到的資訊確實就是你所傳送的訊號了。
雙方通訊無誤必須是兩者互相傳送資訊都無誤。傳了 SYN,證明發送方到接收方的通道沒有問題,但是接收方到傳送方的通道還需要 ACK 訊號來進行驗證。

8、為什麼要四次揮手

斷開一個 TCP 連線需要四次揮手:

  • 客戶端-傳送一個 FIN,用來關閉客戶端到伺服器的資料傳送
  • 伺服器-收到這個 FIN,它發回一 個 ACK,確認序號為收到的序號加1 。和 SYN 一樣,一個 FIN 將佔用一個序號
  • 伺服器-關閉與客戶端的連線,傳送一個FIN給客戶端
  • 客戶端-發回 ACK 報文確認,並將確認序號設定為收到序號加1

任何一方都可以在資料傳送結束後發出連線釋放的通知,待對方確認後進入半關閉狀態。當另一方也沒有資料再發送的時候,則發出連線釋放通知,對方確認後就完全關閉了TCP連線。
舉個例子:A 和 B 打電話,通話即將結束後,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的話,A 不能要求 B 跟著自己的節奏結束通話,於是 B 可能又巴拉巴拉說了一通,最後 B 說“我說完了”,A 回答“知道了”,這樣通話才算結束。

9、TCP、UDP 協議的區別

UDP 在傳送資料之前不需要先建立連線,遠地主機在收到 UDP 報文後,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用於即時通訊),比如: QQ 語音、 QQ 視訊 、直播等等。

TCP 提供面向連線的服務。在傳送資料之前必須先建立連線,資料傳送結束後要釋放連線。
TCP 不提供廣播或多播服務。由於 TCP 要提供可靠的,面向連線的運輸服務(TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源),這一難以避免增加了許多開銷,如確認,流量控制,計時器以及連線管理等。這不僅使協議資料單元的首部增大很多,還要佔用許多處理機資源。TCP 一般用於檔案傳輸、傳送和接收郵件、遠端登入等場景。

10、TCP 協議如何保證可靠傳輸

1)確認和重傳:接收方收到報文就會確認,傳送方傳送一段時間後沒有收到確認就會重傳。
2)資料校驗:TCP報文頭有校驗和,用於校驗報文是否損壞
3)資料合理分片和排序:
tcp會按最大傳輸單元(MTU)合理分片,接收方會快取未按序到達的資料,重新排序後交給應用層。
而UDP:IP資料報大於1500位元組,大於MTU。這個時候傳送方的IP層就需要分片,把資料報分成若干片,是的每一片都小於MTU。而接收方IP層則需要進行資料報的重組。由於UDP的特性,某一片資料丟失時,接收方便無法重組資料報,導致丟棄整個UDP資料報。
4)流量控制:當接收方來不及處理髮送方的資料,能通過滑動視窗,提示傳送方降低傳送的速率,防止包丟失。
5)擁塞控制:當網路擁塞時,通過擁塞視窗,減少資料的傳送,防止包丟失。

11、TCP 利用滑動視窗實現流量控制的機制

流量控制是為了控制傳送方傳送速率,保證接收方來得及接收。
TCP 利用滑動視窗實現流量控制。
滑動視窗(Sliding window)是一種流量控制技術。早期的網路通訊中,通訊雙方不會考慮網路的擁擠情況直接傳送資料。由於大家不知道網路擁塞狀況,同時傳送資料,導致中間節點阻塞掉包,誰也發不了資料,所以就有了滑動視窗機制來解決此問題。
TCP 中採用滑動視窗來進行傳輸控制,滑動視窗的大小意味著接收方還有多大的緩衝區可以用於接收資料。傳送方可以通過滑動視窗的大小來確定應該傳送多少位元組的資料。當滑動視窗為 0 時,傳送方一般不能再發送資料報,但有兩種情況除外,一種情況是可以傳送緊急資料,例如,允許使用者終止在遠端機上的執行程序。另一種情況是傳送方可以傳送一個 1 位元組的資料報來通知接收方重新宣告它希望接收的下一位元組及傳送方的滑動視窗大小。

接收方傳送的確認報文中的視窗欄位可以用來控制傳送方視窗大小,從而影響傳送方的傳送速率。將視窗欄位設定為 0,則傳送方不能傳送資料。

12、TCP擁塞控制的機制以及演算法

在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變壞。這種情況就叫擁塞。
擁塞控制就是為了防止過多的資料注入到網路中,這樣就可以使網路中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提,就是網路能夠承受現有的網路負荷。擁塞控制是一個全域性性的過程,涉及到所有的主機,所有的路由器,以及與降低網路傳輸效能有關的所有因素。相反,流量控制往往是點對點通訊量的控制,是個端到端的問題。流量控制所要做到的就是抑制傳送端傳送資料的速率,以便使接收端來得及接收。
為了進行擁塞控制,TCP 傳送方要維持一個 擁塞視窗(cwnd) 的狀態變數。擁塞控制視窗的大小取決於網路的擁塞程度,並且動態變化。傳送方讓自己的傳送視窗取為擁塞視窗和接收方的接受視窗中較小的一個。
TCP的擁塞控制採用了四種演算法,即 慢開始 、 擁塞避免 、快重傳 和 快恢復。在網路層也可以使路由器採用適當的分組丟棄策略(如主動佇列管理 AQM),以減少網路擁塞的發生。

慢開始: 慢開始演算法的思路是當主機開始傳送資料時,如果立即把大量資料位元組注入到網路,那麼可能會引起網路阻塞,因為現在還不知道網路的符合情況。經驗表明,較好的方法是先探測一下,即由小到大逐漸增大發送視窗,也就是由小到大逐漸增大擁塞視窗數值。cwnd初始值為1,每經過一個傳播輪次,cwnd加倍。

擁塞避免: 擁塞避免演算法的思路是讓擁塞視窗cwnd緩慢增大,即每經過一個往返時間RTT就把傳送放的cwnd加1.
快重傳與快恢復:
在 TCP/IP 中,快速重傳和恢復(fast retransmit and recovery,FRR)是一種擁塞控制演算法,它能快速恢復丟失的資料包。沒有 FRR,如果資料包丟失了,TCP 將會使用定時器來要求傳輸暫停。在暫停的這段時間內,沒有新的或複製的資料包被髮送。有了 FRR,如果接收機接收到一個不按順序的資料段,它會立即給傳送機傳送一個重複確認。如果傳送機接收到三個重複確認,它會假定確認件指出的資料段丟失了,並立即重傳這些丟失的資料段。有了 FRR,就不會因為重傳時要求的暫停被耽誤。  當有單獨的資料包丟失時,快速重傳和恢復(FRR)能最有效地工作。當有多個數據信息包在某一段很短的時間內丟失時,它則不能很有效地工作。

13、在瀏覽器中輸入url地址後顯示主頁的過程

一次完整的http請求過程,總體來說分為以下幾個過程:
1.DNS域名解析
2.建立TCP連線
3.傳送HTTP請求
4.伺服器處理請求
5.返回HTTP報文
6.關閉TCP連線
7.瀏覽器解析HTML
8.瀏覽器佈局渲

14、常見的Http狀態碼

http狀態返回程式碼:1xx(臨時響應)、2xx (成功)、3xx (重定向)、4xx(請求錯誤)、5xx(伺服器錯誤)

2XX 成功

200 OK,表示從客戶端發來的請求在伺服器端被正確處理
201 Created 請求已經被實現,而且有一個新的資源已經依據請求的需要而建立
202 Accepted 請求已接受,但是還沒執行,不保證完成請求
204 No content,表示請求成功,但響應報文不含實體的主體部分
206 Partial Content,進行範圍請求

3XX 重定向

301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
302 found,臨時性重定向,表示資源臨時被分配了新的 URL
303 see other,表示資源存在著另一個 URL,應使用 GET 方法丁香獲取資源
304 not modified,表示伺服器允許訪問資源,但因發生請求未滿足條件的情況
307 temporary redirect,臨時重定向,和302含義相同

4XX 客戶端錯誤

400 bad request,請求報文存在語法錯誤
401 unauthorized,表示傳送的請求需要有通過 HTTP 認證的認證資訊
403 forbidden,表示對請求資源的訪問被伺服器拒絕
404 not found,表示在伺服器上沒有找到請求的資源
408 Request timeout, 客戶端請求超時
409 Confict, 請求的資源可能引起衝突

5XX 伺服器錯誤

500 internal sever error,表示伺服器端在執行請求時發生了錯誤
501 Not Implemented 請求超出伺服器能力範圍,例如伺服器不支援當前請求所需要的某個功能,或者請求是伺服器不支援的某個方法
503 service unavailable,表明伺服器暫時處於超負載或正在停機維護,無法處理請求
505 http version not supported 伺服器不支援,或者拒絕支援在請求中使用的 HTTP 版本

15、HTTP有哪些方法?

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT

GET: 通常用於請求伺服器傳送某些資源
HEAD: 請求資源的頭部資訊, 並且這些頭部與 HTTP GET 方法請求時返回的一致. 該請求方法的一個使用場景是在下載一個大檔案前先獲取其大小再決定是否要下載, 以此可以節約頻寬資源
OPTIONS: 用於獲取目的資源所支援的通訊選項
POST: 傳送資料給伺服器
PUT: 用於新增資源或者使用請求中的有效負載替換目標資源的表現形式
DELETE: 用於刪除指定的資源
PATCH: 用於對資源進行部分修改
CONNECT: HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器
TRACE: 回顯伺服器收到的請求,主要用於測試或診斷

16、HTTP長連線、短連線

在HTTP/1.0中預設使用短連線。也就是說,客戶端和伺服器每進行一次HTTP操作,就建立一次連線,任務結束就中斷連線。當客戶端瀏覽器訪問的某個HTML或其他型別的Web頁中包含有其他的Web資源(如JavaScript檔案、影象檔案、CSS檔案等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。

而從HTTP/1.1起,預設使用長連線,用以保持連線特性。使用長連線的HTTP協議,會在響應頭加入這行程式碼:
Connection:keep-alive
在使用長連線的情況下,當一個網頁開啟完成後,客戶端和伺服器之間用於傳輸HTTP資料的TCP連線不會關閉,客戶端再次訪問這個伺服器時,會繼續使用這一條已經建立的連線。Keep-Alive不會永久保持連線,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。實現長連線需要客戶端和服務端都支援長連線。
HTTP協議的長連線和短連線,實質上是TCP協議的長連線和短連線。

17、HTTPS是如何保證安全的?

HTTP協議是一個應用層協議,通常執行在TCP協議之上。它是一個明文協議,客戶端發起請求,服務端給出響應的響應。
由於網路並不是可信任的,HTTP協議的明文特性會存在以下風險:

  • 通訊資料有被竊聽和被篡改的風險
  • 目標網站有被冒充的風險

HTTPS其實就是secure http的意思,也就是HTTP的安全升級版。HTTP是應用層協議,位於HTTP協議之下是傳輸協議TCP。TCP負責傳輸,HTTP則定義了資料如何進行包裝。
HTTPS相對於HTTP有哪些不同呢?其實就是在HTTP跟TCP中間加多了一層加密層TLS/SSL。

HTTPS使用非對稱加密,加密資料用的金鑰(公鑰),跟解密資料用的金鑰(私鑰)是不一樣的。

18、HTTPS的中間人攻擊是什麼?

HTTPS從協議上解決了HTTP時代的中間人攻擊問題,但是HTTPS在使用者主動信任了偽造證書的時候也會發生中間人攻擊(比如早期的12306需要手動信任證書),HTTPS中間人攻擊流程如下:

客戶端用HTTPS連線伺服器的443埠
伺服器下發自己的數字證書給客戶端
黑客劫持了伺服器的真實證書,並偽造了一個假的證書給瀏覽器
瀏覽器可以發現得到的網站證書是假的,但是瀏覽器選擇信任
瀏覽器生成隨機對稱金鑰A,用偽造的證書中的公鑰加密發往伺服器
黑客同樣可以劫持這個請求,得到瀏覽器的對稱金鑰A,從而能夠竊聽或者篡改通訊資料
黑客利用伺服器的真實公鑰將客戶端的對稱金鑰A加密發往伺服器
伺服器利用私鑰解密這個對稱金鑰A之後與黑客通訊
黑客利用對稱金鑰A解密伺服器的資料,篡改之後利用對稱金鑰A加密發給客戶端
客戶端收到的資料已經是不安全的了

以上就是HTTPS中間人攻擊的原理,這也就是HTTPS抓包為什麼要信任證書的原因。

19、如何理解HTTP協議是無狀態的?

http協議時無狀態的,指的是協議對事物沒有記憶能力,伺服器不知道客戶端是什麼狀態,http是同一個無狀態面向連線的協議。

20、ping命令基於哪一層協議的原理是什麼?

ping命令基於網路層的命令,是基於ICMP協議工作的