再比如,大部分的開發人員都搞過網路相關的開發。那麼一個網路封包是如何從網路卡到達你的處理程序的?這個問題表面上看起來簡單,但實際上很多性能最佳化方案都和這個接收過程有關,能不能深度理解這個過程決定了你在網路性能上有多少最佳化措施可用。例如多佇列網路卡的最佳化方案是在硬體中斷這一步開始將工作分散在多個 CPU 核心上,進而提升性能的。我幾年前想把這個問題徹底弄清楚,幾乎搜遍了網際網路,翻遍了各種經典書都無法找到想要的答案。
還比如,網上搜到的三次握手的技術文章都是在說一些簡單的內容,用戶端如何發起 SYN 握手進入 SYN_SENT 狀態,服務端回應SYN 並回覆SYNACK,然後進入 SYN_RECV??諸如此類。但實際上,三次握手的過程執行了很多核心操作,比如用戶端通訊埠選擇、重傳計時器啟動、半連接佇列的增加和刪除、全連接佇列的增加和刪除。線上的很多問題都是因為三次握手中的某一個環節出問題導致的,能否深度理解這個過程直接決定你是否有線上上快速消滅或避免這種問題的能力。網上能深入介紹三次握手的文章太少了。
另外一個問題就是當你真正在工作中遇到一些困惑的時候,會發現很難有一本經典書能直接給你答案。比如在《深入理解 Linux 網路技術內幕》這本書裡介紹了核心中各個元件,如網路卡裝置、鄰居子系統、路由等,把相關原始程式都講了一遍。但是看完之後我還是不清楚一個封包到底是如何從網路卡到應用程式的,一台伺服器到底能支援多少個TCP 連接。