三、傳輸層面試題(Transmission Layer)
傳輸層位于 OSI 七層模型的第四層,它的核心任務是為兩個主機之間的應用層提供可靠的數據傳輸服務。它不僅承擔了數據的端到端傳輸,而且還實現了諸如差錯檢測、數據流控制、擁塞控制等機制,是網絡面試中非常關鍵的一層。
1. TCP 和 UDP 的區別詳解及應用場景分析
概述:TCP 和 UDP 是傳輸層的兩種協議,各有優缺點,使用場景不同。
特性 | TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) |
---|---|---|
是否連接 | 是,面向連接(需要三次握手建立連接) | 否,無連接 |
可靠性 | 可靠,確保數據無差錯、無重復、按序到達 | 不可靠,可能出現丟包、亂序、重復 |
流控制和擁塞控制 | 有滑動窗口機制,進行流量控制和擁塞控制 | 無此機制 |
傳輸效率 | 較低,但保證可靠性 | 高效,但不保證可靠性 |
開銷 | 較大,需要維護連接狀態、確認機制等 | 小,無連接狀態,報文頭較短 |
應用場景 | 適合對可靠性要求高的應用,如網頁瀏覽、文件傳輸、電子郵件 | 適合對實時性要求高但可容忍丟包的應用,如視頻通話、直播、在線游戲 |
總結:
如果應用需要精確的數據傳輸、數據完整性,選擇 TCP。
如果更看重時效性,且可以接受部分數據丟失,比如音視頻通信,選擇 UDP。
2. TCP 三次握手(Three-Way Handshake)詳解
過程描述:
第一次握手:客戶端發送 SYN 報文,表示請求建立連接,并發送初始序列號(seq=x)。
第二次握手:服務器收到 SYN 報文后,回復一個 SYN-ACK 報文,表示接受連接請求,發送自己的初始序列號(seq=y),并確認客戶端的序列號(ack=x+1)。
第三次握手:客戶端收到 SYN-ACK 報文后,發送 ACK 報文,確認服務器的序列號(ack=y+1),此時連接建立完成。
重點問題解析:
為什么需要三次握手?
防止失效的連接請求報文造成錯誤連接。
需要雙方都確認收發能力正常。
圖示:
客戶端 服務器| ———— SYN ————> || <—— SYN+ACK —— || ———— ACK ————> |
連接建立完成
3. TCP 四次揮手(Four-Way Handshake)詳解
過程描述:
客戶端發送 FIN 報文,請求關閉連接。
服務器接收后回復 ACK,表示收到關閉請求。
服務器處理完數據后,發送 FIN 報文,表示可以關閉連接。
客戶端收到后發送 ACK 報文,進入 TIME_WAIT 狀態。
重點:
TCP 是全雙工協議,必須雙方都關閉連接。
為什么需要 TIME_WAIT:確保最后 ACK 能到達服務器,防止老數據污染新連接。
4. TCP 狀態變遷及 TIME_WAIT 深入解析
TCP 在連接和斷開過程中,會經歷多種狀態,包括:
LISTEN
SYN_SENT
SYN_RECEIVED
ESTABLISHED
FIN_WAIT_1
FIN_WAIT_2
CLOSE_WAIT
CLOSING
LAST_ACK
TIME_WAIT
CLOSED
重點分析 TIME_WAIT:
等待兩倍最大報文壽命(MSL)時間,確保服務端已收到 ACK。
防止舊連接報文影響新連接。
如何優化 TIME_WAIT 過多問題?
操作系統調優(如
tcp_tw_reuse
)。使用短連接或連接池。
5. TCP 的可靠性機制詳解
1. 序列號與確認號(SEQ/ACK)
每個 TCP 報文都有 SEQ(數據序號)與 ACK(確認號)。
確保報文按順序傳輸。
2. 重傳機制:
超時重傳(Timeout Retransmission)
快速重傳(Fast Retransmit):連續收到三個相同 ACK 時立即重傳
3. 滑動窗口機制(Sliding Window)
控制發送速率,實現流量控制。
接收方窗口通知發送方可接收的數據量。
4. 擁塞控制機制:
慢啟動(Slow Start)
擁塞避免(Congestion Avoidance)
快速重傳(Fast Retransmit)
快速恢復(Fast Recovery)
6. TCP 粘包與拆包問題及解決方法
出現原因:
粘包:多條小數據連續發送,接收方一次性接收。
拆包:一條大數據被拆分成多段接收。
解決方式:
固定長度分隔
特殊分隔符(如 \n)
報文頭部添加長度字段(常用)
四、應用層面試題(Application Layer)
應用層是 OSI 模型的第七層,直接為用戶提供服務。常見的協議如 HTTP、DNS、SMTP、FTP、DHCP 等。面試中考查頻率極高,尤其是 HTTP 協議相關內容。
1. HTTP 和 HTTPS 的區別(深入詳解)
特性 | HTTP | HTTPS |
安全性 | 明文傳輸,容易被竊聽或篡改 | 使用 TLS/SSL 加密傳輸,確保數據安全 |
數據完整性 | 無保障 | 使用數字簽名與證書校驗數據完整性 |
端口 | 默認端口 80 | 默認端口 443 |
握手開銷 | 無需額外握手 | 需 TLS 握手(增加延遲) |
數字證書 | 不需要 | 需要 CA 簽發的數字證書 |
TLS 握手過程簡述:
客戶端發起請求,包含支持的加密算法等信息;
服務端返回證書和公鑰;
客戶端驗證證書有效性,生成對稱密鑰并用公鑰加密;
服務端用私鑰解密對稱密鑰,之后使用該密鑰進行加密通信。
2. HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0 對比
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
連接 | 短連接 | 默認長連接 | 單連接多路復用 | 基于 UDP 的 QUIC 協議 |
請求數 | 一次請求一次連接 | 持久連接 | 多個請求復用連接 | 同上,更快恢復丟包 |
壓縮 | 無 | 無 | 頭部壓縮 | 更高效 |
服務器推送 | 不支持 | 不支持 | 支持 | 支持 |
3. HTTP 狀態碼分類與詳解
1xx:信息性(如 100 Continue)
2xx:成功(如 200 OK, 204 No Content)
3xx:重定向(如 301 Moved Permanently, 302 Found)
4xx:客戶端錯誤(如 400 Bad Request, 403 Forbidden, 404 Not Found)
5xx:服務器錯誤(如 500 Internal Server Error, 502 Bad Gateway)
面試技巧: 掌握常見狀態碼的語義與使用場景。
4. Cookie、Session、Token 與 JWT 區別
特性 | Cookie | Session | Token(如 JWT) |
存儲位置 | 客戶端 | 服務端 | 客戶端(本地存儲) |
安全性 | 易被竊取偽造 | 相對安全 | 安全,簽名校驗 |
狀態性 | 有狀態 | 有狀態 | 無狀態 |
適用場景 | 瀏覽器本地記住信息 | 服務端保持用戶會話 | 前后端分離、移動端認證 |
JWT 結構: Header.Payload.Signature
Header:聲明類型和算法
Payload:用戶信息、權限等
Signature:對前兩者進行簽名,防篡改
5. DNS 的解析過程詳解
瀏覽器緩存:是否解析過該域名?
系統緩存(如 /etc/hosts 文件)
本地 DNS 服務器
根域名服務器
頂級域服務器(如 .com、.cn)
權威域名服務器(提供最終 IP)
最終解析出 IP 地址返回給客戶端,客戶端發起請求。
面試加分點:
DNS 輪詢負載均衡(RR)
DNS 緩存機制
CDN 與 DNS 的結合優化訪問路徑
本文為計算機網絡面試題進階總結,涵蓋傳輸層與應用層的高頻知識點及深入解析。適合面試前系統復習,幫助應對實際面試中可能出現的綜合性網絡問題。