大廠面試網路協定高頻15問:TCP/IP+HTTP+DNS全覆蓋
涵蓋TCP、HTTP、DNS等15道網路協定高頻面試題,每題含考察點與答案方向,助你全面備戰網路協定面試。
背景介紹
網路協定這塊,說實話我之前是有點輕敵的。覺得TCP三次握手四次揮手背下來就行了,結果面試官一問「為什麼是三次不是兩次」、「TIME_WAIT太多怎麼辦」,我就傻眼了。後來我把網路協定的高頻題全部整理了一遍,發現其實套路很固定,關鍵是理解每個協定設計的「為什麼」,而不是死記硬背。這15道題是我面試過程中遇到頻率最高的,分享給大家。
一、TCP(5題)
1. 三次握手和四次揮手的過程?
考察點:TCP連線管理
三次握手:客戶端發SYN→服務端回SYN+ACK→客戶端發ACK。為什麼是三次?因為三次握手保證了雙方都能確認對方的傳送和接收能力正常,兩次無法確認服務端的傳送能力和客戶端的接收能力。四次揮手:主動方發FIN→被動方回ACK→被動方發FIN→主動方回ACK。為什麼是四次?因為TCP是全雙工的,被動方收到FIN後可能還有資料沒發完,所以ACK和FIN分開發。面試官最愛追問的就是這些「為什麼」。
2. TCP擁塞控制機制?
考察點:流量調節演算法
四個階段:慢啟動(cwnd從1開始指數增長)、擁塞避免(cwnd線性增長)、快重傳(收到3個重複ACK立即重傳,不等超時)、快恢復(cwnd減半而非降為1)。關鍵概念:慢啟動閾值ssthresh,cwnd超過ssthresh後進入擁塞避免階段。面試官可能追問:BBR演算法瞭解嗎?BBR是基於頻寬和RTT的擁塞控制,不像傳統演算法基於丟包判斷,在高速長肥網路中表現更好。
3. TCP流量控制機制?
考察點:接收端速率控制
流量控制通過滑動視窗實現,接收端在ACK中攜帶視窗大小rwnd告知傳送端還能接收多少資料。零視窗問題:接收端視窗為0時,傳送端停止傳送,但會啟動持續計時器定期傳送零視窗探測報文,防止死鎖。糊塗視窗症候群:接收端緩衝區快滿時每次只騰出很少空間,傳送端每次只發很少資料,效率極低。解決方案:Nagle演算法(傳送端攢夠資料再發)和Clark方案(接收端等緩衝區有足夠空間再通知)。
4. TIME_WAIT狀態是什麼?為什麼需要?太多怎麼辦?
考察點:連線關閉細節
TIME_WAIT是主動關閉方在傳送最後一個ACK後進入的狀態,持續2MSL(Maximum Segment Lifetime)。存在原因:一是確保最後一個ACK能到達被動方(如果丟失,被動方會重發FIN,主動方可以重發ACK);二是確保本次連線的所有報文在網路中消失,避免影響新連線。太多TIME_WAIT的解決方案:開啟tcp_tw_reuse(允許將TIME_WAIT連線用於新的TCP連線);調整tcp_max_tw_buckets;長連線替代短連線。注意:tcp_tw_recycle在NAT環境下有坑,不推薦使用。
5. TCP粘包問題?
考察點:應用層協定設計
嚴格來說TCP不存在「粘包」問題,因為TCP是面向位元組流的協定,沒有訊息邊界的概念。所謂的粘包是應用層的問題——傳送方連續傳送的資料被接收方一次性讀出。解決方案:訊息定長(每個訊息固定長度,不夠補齊);使用特殊分隔符(如HTTP的\r\n\r\n);訊息頭包含長度欄位(最常用,如TLV格式)。面試官可能追問:UDP有粘包問題嗎?沒有,因為UDP是面向報文的,每個UDP包都有明確邊界。
二、HTTP(5題)
6. HTTP/1.1、HTTP/2、HTTP/3的區別?
考察點:HTTP協定演進
HTTP/1.1:持久連線(Keep-Alive)、管道化(但存在隊頭阻塞)、Host頭支援虛擬主機。HTTP/2:二進位分幀、多路複用(一個連線上並行多個請求,解決HTTP層隊頭阻塞)、頭部壓縮(HPACK)、伺服器推送。HTTP/3:基於QUIC(UDP)替代TCP,解決了TCP層的隊頭阻塞;0-RTT連線建立;連線遷移(基於Connection ID而非四元組)。面試官追問:HTTP/2還有隊頭阻塞嗎?HTTP層沒有了,但TCP層還有——一個TCP包丟失會阻塞所有流。
7. HTTPS的原理?
考察點:安全通訊機制
HTTPS = HTTP + TLS。TLS握手過程:客戶端發Client Hello(支援的TLS版本和加密套件)→服務端回Server Hello + 證書→客戶端驗證證書(CA簽名鏈)→客戶端生成預主密鑰,用服務端公鑰加密傳送→雙方通過預主密鑰生成會話密鑰→後續通訊使用對稱加密。面試官追問:為什麼不全用非對稱加密?因為非對稱加密效能差,只用於密鑰交換,資料傳輸用對稱加密。TLS 1.3簡化了握手,支援1-RTT甚至0-RTT。
8. 常見HTTP狀態碼?
考察點:協定語義理解
200成功;301永久重定向(瀏覽器會快取);302臨時重定向;304未修改(快取命中);400請求語法錯誤;401未認證;403禁止訪問;404未找到;500伺服器內部錯誤;502閘道錯誤;503服務不可用;504閘道超時。面試官常問:301和302的區別?301是永久重定向,搜尋引擎會更新索引;302是臨時重定向,搜尋引擎保留原URL。還有:502和504的區別?502是上游服務返回了無效迴應,504是上游服務超時無迴應。
9. HTTP快取策略?
考察點:快取機制設計
強快取:Expires(HTTP/1.0,絕對時間)和Cache-Control(HTTP/1.1,max-age相對時間),命中則不請求伺服器。協商快取:Last-Modified/If-Modified-Since(基於修改時間)和ETag/If-None-Match(基於內容雜湊),命中返回304。優先級:Cache-Control > Expires > ETag > Last-Modified。面試官追問:ETag和Last-Modified怎麼選?ETag更精確(檔案內容沒變但修改時間變了不會誤判),但ETag計算有效能開銷。一般靜態資源用強快取+檔名hash,HTML用協商快取。
10. Cookie和Session的區別?
考察點:會話管理機制
Cookie儲存在客戶端,Session儲存在服務端。Session通過Cookie中的SessionID關聯(也可以通過URL重寫)。Cookie有大小限制(4KB),Session理論上無限制但佔用服務端記憶體。安全性:Cookie可以被客戶端修改和竊取,Session更安全但需要考慮分散式場景下的共享問題(通常用Redis儲存Session)。Token方案(JWT)是另一種選擇:無狀態、適合分散式,但無法主動失效。面試官追問:Cookie的SameSite屬性?Strict(完全禁止第三方Cookie)、Lax(導航到目標網站時攜帶)、None(允許但需Secure)。
三、DNS(2題)
11. DNS解析過程?
考察點:域名解析機制
瀏覽器快取→作業系統快取→本地DNS伺服器→根域名伺服器→頂級域名伺服器→權威域名伺服器。具體流程:本地DNS先查快取,沒有則向根域名伺服器查詢,根返回對應頂級域名伺服器地址;本地DNS再查詢頂級域名伺服器,獲取權威域名伺服器地址;最後查詢權威域名伺服器獲取IP。這個過程是遞迴+迭代結合的:客戶端到本地DNS是遞迴,本地DNS到各級域名伺服器是迭代。面試官追問:DNS用的是TCP還是UDP?預設UDP,但區域傳送(主從同步)用TCP。
12. DNS劫持是什麼?如何防範?
考察點:安全防護意識
DNS劫持是攻擊者篡改DNS迴應,將域名解析到惡意IP。常見場景:運營商劫持(插入廣告)、中間人攻擊、DNS伺服器被入侵。防範措施:使用HTTPDNS(繞過傳統DNS,直接向HTTP介面請求IP);DNS over HTTPS(DoH)或DNS over TLS(DoT)加密DNS查詢;DNSSEC驗證迴應真實性;使用可信DNS伺服器(如8.8.8.8、1.1.1.1)。我在專案中用過HTTPDNS,在行動端效果特別好,避免了運營商劫持的問題。
四、其他(3題)
13. CDN原理?
考察點:內容分發網路
CDN通過在全球部署邊緣節點,將源站內容快取到離使用者最近的節點。使用者請求時,DNS將域名解析到最近的CDN節點(基於Anycast或DNS智慧解析);CDN節點如果有快取直接返回,沒有則回源獲取並快取。關鍵概念:回源率(CDN快取命中率越低回源越多)、快取策略(不同資源設定不同TTL)、預熱(主動將內容推送到CDN節點)。面試官追問:CDN和反向代理的區別?CDN是分散式部署在各地的快取網路,反向代理通常集中部署,CDN更側重「就近存取」。
14. WebSocket原理?
考察點:全雙工通訊
WebSocket通過HTTP升級握手建立連線:客戶端發Upgrade: websocket請求,服務端回101 Switching Protocols,之後切換為WebSocket協定進行全雙工通訊。相比HTTP輪詢,WebSocket只需一次握手,後續通訊開銷極小(幀頭2-10位元組)。適用場景:即時通訊、即時資料推送、線上協作。面試官追問:WebSocket和SSE的區別?SSE是服務端向客戶端的單向推送,基於HTTP,更簡單;WebSocket是雙向通訊,功能更強但實現更複雜。
15. 跨域解決方案?
考察點:瀏覽器安全策略
同源策略:協定+域名+埠相同才算同源。跨域解決方案:CORS(最標準,服務端設定Access-Control-Allow-Origin等迴應頭);JSONP(只支援GET,利用script標籤不受同源限制);代理伺服器(開發環境用webpack-dev-server或nginx代理);postMessage(跨視窗通訊)。CORS分簡單請求和非簡單請求,非簡單請求會先發OPTIONS預檢請求。面試官追問:Cookie跨域怎麼處理?設定withCredentials + 服務端Access-Control-Allow-Credentials + Allow-Origin不能是*。
心得建議
網路協定面試的核心是理解「為什麼這樣設計」,而不是背誦流程。三次握手為什麼是三次、TIME_WAIT為什麼存在、HTTP/2為什麼要多路複用——這些設計背後都有明確的問題驅動。建議用抓包工具(Wireshark)實際觀察TCP握手揮手和HTTP請求迴應,有了直觀感受後再理解理論會容易很多。另外,網路協定經常和實際場景結合考察,比如「短連線太多TIME_WAIT怎麼處理」、「如何設計一個推送系統」,這類題需要把知識點串聯起來。
FAQ
Q:網路協定面試需要看RFC嗎?
不需要通讀RFC,但瞭解關鍵RFC的要點(如RFC 2616/7540/9000)會非常加分。
Q:TCP和UDP怎麼選?
需要可靠傳輸用TCP,需要低延遲或廣播用UDP。現代方案可以用QUIC(基於UDP的可靠傳輸)。
Q:HTTPS面試重點是什麼?
TLS握手過程、證書驗證鏈、對稱/非對稱加密的配合使用,以及TLS 1.3的改進。