面試中應該了解的所有有關計算機網絡的知識
"你準備好接受面試了嗎?"
"當然是。請開始。"
"大。能否談談你對計算機網絡的了解?也許我們可以從TCP是什么以及它如何工作開始。"
"嗯……嗯……嗯……"
"好的,謝謝你今天的時間。請等待未來幾天的進一步通知。"
這看起來和你的經歷相似嗎?
不要放棄, 你絕對可以做得更好。
這是技術面試中會遇到的一些常見計算機網絡問題。它們大多數與應用程序,傳輸和網絡層有關。你可以按照本指南從頭開始學習計算機網絡,并向面試官清楚地解釋它們。
1. 計算機網絡的體系結構是什么?
通常,計算機網絡概念通常分為5個主要層。這是OSI(開放系統互連)模型和TCP / IP模型的組合,分別具有7層和4層。
> Different Models of Computer Networks (Image by Author)
2. 每層的功能是什么?
以下介紹將基于OSI網絡模型:
- 應用程序層:應用程序層的任務是指定主機運行的應用程序進程之間的通信協議或接口。應用層中有一些通用協議,例如HTTP(超文本傳輸協議),DNS(域名系統)和SMTP。
- 表示層:此層主要負責將來自應用程序層的數據轉換為所需的格式(例如ASCII)。此處完成了一些工作,例如數據加密/解密和壓縮。
- 會話層:此層負責在兩個進程之間建立和維護連接或會話。它還允許進程添加檢查點以進行同步。
- 傳輸層:它通過網絡在應用程序之間提供端到端的數據(段)傳輸服務。傳輸層最著名的協議是TCP(傳輸控制協議)和UDP(用戶數據報協議)。
- 網絡層:網絡層負責數據包(數據塊)的路由。具體來說,網絡層選擇合適的傳輸路徑,并從其他網絡發送和接收IP(互聯網協議)數據包。
- 數據鏈路層:該層將來自網絡層的IP數據包封裝為幀,并通過鏈路節點發送它們。幀傳輸取決于MAC(消息訪問控制)地址。可以通過發送ARP(地址解析協議)請求來獲取接收者的MAC地址,以查看是否有任何節點具有所需的IP地址。
- 物理層:負責節點之間的位傳輸,這是物理連接(通過物理數據鏈路),并盡可能消除設備之間的差異。
3. 傳輸層中的TCP和UDP是什么?他們有什么區別?
TCP(傳輸控制協議)是一種面向連接的服務,這意味著它在傳輸數據之前建立連接,并在傳輸之后關閉連接。
TCP的可靠性反映在通過三向握手建立連接,以及一些機制如錯誤檢測,流控制,擁塞控制和重傳。這些功能將花費大量開銷并占用處理器資源。
TCP通常用于文件傳輸,郵件的發送和接收以及遠程登錄。
UDP(用戶數據報協議)不需要在數據傳輸之前建立連接,這意味著遠程主機在接收到UDP段之后不需要進行確認。
盡管UDP無法提供可靠的傳輸,但它在某些情況下(通常是即時消息傳遞)是最有效的服務,例如實時音頻和視頻流。
> TCP v.s. UDP (Image by Author)
4. TCP如何建立和終止連接?
我們首先來看一下如何在客戶端/服務器模型中建立TCP連接,該模型通常稱為三向握手:
- 客戶端:它發送一個SYN段,該段請求服務器將其序列號與客戶端的序列號同步。
- 服務器:從客戶端接收到數據包后,服務器將返回SYN和ACK段,這會通知客戶端已收到該數據包,并要求其提供用于確認的預期序列號。
- 客戶端:它發送回帶有ACK段的數據包,該數據包通知服務器已正確接收了返回的數據包。

> TCP Connection Establishment (Image by Author)
SYN段確認從發送方到接收方的路由沒有問題,但是從接收方到發送方的路由應由ACK段確認。
接下來,我們將討論TCP如何在"客戶端/服務器"模型中終止連接,這是一個四次握手過程:
- 客戶端:決定關閉連接后,客戶端將向服務器發送FIN段。然后,客戶端將進入FIN_WAIT_1狀態,等待來自服務器的確認。
- 服務器:一旦接收到來自客戶端的FIN段,它將發送回ACK段。
- 客戶端:從服務器接收到ACK段后,它進入FIN_WAIT_2狀態,服務器正在等待另一端發送的FIN段。
- 服務器:它還會關閉與客戶端的連接,并在發送ACK段后發送FIN段。
- 客戶端:接收到來自服務器的ACK段后,客戶端會發回最終的ACK段進行確認。之后,客戶端將進入TIME_WAIT狀態,如果另一端未收到最終的ACK段,則客戶端將在一段時間后正式關閉。
5. 什么是ARQ(自動重復請求)?
ARQ是一種錯誤控制方法,用于在傳輸層和數據鏈路層中進行數據傳輸。
確認和超時用于確保可靠的數據傳輸。如果接收方在給定時間內沒有收到確認,它將重新發送同一數據包,直到返回確認或超出預定義的重傳時間為止。
有兩種類型的ARQ,包括:
- 停止等待ARQ:停止等待ARQ的基本思想是發送方每次發送數據包后都會停止數據傳輸。如果在給定時間后未收到接收方的確認,則傳輸將被視為失敗。這意味著應該重新傳輸數據,直到收到確認為止。如果接收方收到重復的數據包,則應放棄此數據包并同時發送回確認。
- Go-Back-N ARQ:發件人維護一個滑動窗口,該窗口中的數據包可以連續發送,無需等待確認。接收器通常僅接收有序數據包,并在最后一個數據包到達后發回累積ACK。
6. TCP如何實現流量控制?
流控制的目的是控制數據包發送的速度,以確保接收方可以及時接收到它。
TCP可以通過滑動窗口來實現流控制。發送方的滑動窗口大小可以由接收方返回的ACK段控制,這也可能影響發送速度。
7. TCP如何實現擁塞控制?
當對網絡資源的請求超出其可以處理的數據量時,就會發生網絡擁塞。
擁塞控制是為了防止過多的數據注入網絡,以使網絡鏈接或節點不會過載。
TCP擁塞控制采用多種策略,包括:
- 啟動緩慢:TCP不會首先將少量數據發送并在每個RTT(往返時間)后按指數方式逐漸增加擁塞窗口(cwnd)大小,而不是將大量數據吸收到網絡中。
- 避免擁塞:擁塞窗口(cwnd)大小達到閾值后,它開始累加地增加以避免網絡擁塞。
- 擁塞檢測:這發生在發生擁塞時,擁塞窗口大小將成倍減小。假定在需要重發分組時發生擁塞。
- 快速重傳和恢復(FRR):這是一種擁塞控制算法,可以快速恢復丟失的數據包。如果沒有FRR,TCP將通過計時器暫停傳輸。在暫停期間,不會傳輸新的數據包。使用FRR,如果接收器收到一個分段,它將立即返回一個重復的ACK分段。發送方將在接收到三個重復的ACK段后假定該段丟失。FRR減少了重傳的延遲。
8. 從輸入URL到顯示網頁的過程是什么?
此過程可以分為幾個步驟:
- DNS解析。
- 建立一個TCP連接。
- 發送HTTP請求。
- 服務器處理該請求并返回HTTP響應。
- 瀏覽器呈現網頁。
- 緊密連接。
> The Process of Accessing URL and Protocols Used (Image by Author)
8. HTTP如何保存用戶狀態?
HTTP是一種"無狀態"協議,這意味著它不會保存請求和響應本身之間的連接狀態。
那么我們如何保存用戶狀態?
管理會話以解決此問題。會話的主要功能是從服務器端記錄用戶狀態。
例如,當您將一些產品放入亞馬遜購物車,并考慮以后再購買時。由于實際上是無狀態的,因此系統實際上不知道是誰通過HTTP保存這些項目。因此,服務器將為您創建并保留一個特定的會話,從而可以跟蹤您的購物信息。
9. 什么是計算機網絡中的cookie?Cookies和會話之間有什么區別?
Cookie和會話都可以跟蹤和存儲用戶身份,但是它們通常用于不同的情況。
Cookies通常用于存儲用戶信息。例如,在登錄網站后,下次無需再次登錄,因為我們的安全詳細信息已作為令牌存儲在cookie中。系統僅需根據令牌值查找用戶。
會話通過服務器記錄用戶狀態。使用會話的典型場景是在線購物車。由于HTTP是無狀態的,因此服務器將通過將用戶標記為會話來跟蹤用戶狀態。
Cookie數據存儲在客戶端(瀏覽器)上,而會話數據存儲在服務器端。這意味著與cookie相比,會話具有更高的安全級別。
10. HTTP和HTTPS有什么區別?
HTTP超出了TCP的范圍,并使用純文本傳輸內容。客戶端和服務器端都無法驗證彼此的身份。
HTTPS(安全超文本傳輸協議)是運行在SSL / TLS之外的HTTP,而SSL / TLS運行在TCP / IP之外。傳輸的所有內容均已加密。
因此,HTTPS的安全性高于HTTP,但是HTTPS比HTTP需要更多的資源。
需要明確的是,仍然有許多與計算機網絡有關的知識。由于常見的技術面試,尤其是初級軟件工程師的面試通常集中在網絡層的上半部分,因此我們所看到的那些問題只是該領域的一小部分。