TCP 中繼器:窮人的 tcpdump
在 Client 與 Server 間插入 Relay,記錄通訊內容、注入延遲、翻轉比特模擬故障。核心挑戰:
- 連接建立時序:先 accept Client,再 connect Server,中間數據如何暫存?
- 並發連接管理:雙向多連接如何防串話?
- 連接斷開協調:任意一方斷開需立即關閉另一方,FD 復用競態如何避免?
- 速度不匹配:上游 10MB/s、下游 100KB/s 如何防緩衝區爆炸?(Level-trigger 下限速策略)
Muduo 實現僅幾十行,核心在 Tunnel 類(tunnel.h),解決前三問題,第四留待優化。
SOCKS4a 代理服務器
功能同 Relay,但 Server 位址由 Client 協議指定。協議極簡(參考 Wiki),實現同樣複用 Tunnel,僅增加解析目標位址步驟(socks4a.cc)。可供瀏覽器直接使用。
n:1 / 1:n 連接轉發與系列總結
- n:1:Multiplexer(示例七)。
- 1:n:Demultiplexer(demux.cc)。
- SOCKS:本文實現。
三者可級聯測試。本系列十一篇博客、四個月完成,涵蓋 Muduo 單線程服務端/客戶端核心功能。後續規劃:
- 網絡編程學習經驗談。
- Muduo 設計與實現系列(Reactor 逐步實現,代碼見 GitHub)。
- 分布式系統實戰:Paxos 實現高可用 KV、Naming Service、機群管理系統。