快問快答,計算機網絡面試奪命20問
本文轉載自微信公眾號「愛笑的架構師」,作者雷小帥 。轉載本文請聯系愛笑的架構師公眾號。
在面試中計算機網絡是面試官最喜歡考察的內容之一,下面這奪命 20 問一定要掌握喲!
網絡分層
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更具危險性。