原來我也懂-誰都了解的圖解網路原理大公開

林兆倫(@小白debug)著

  • 出版商: 深智
  • 出版日期: 2026-06-19
  • 定價: $980
  • 售價: 7.9$774
  • 語言: 繁體中文
  • 頁數: 552
  • 裝訂: 平裝
  • ISBN: 6267889289
  • ISBN-13: 9786267889282
  • 相關分類: TCP/IP
  • 尚未上市,歡迎預購

  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-1
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-2
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-3
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-4
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-5
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-6
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-7
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-8
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-9
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-10
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-11
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-12
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-13
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-14
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-15
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-16
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-17
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-18
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-19
  • 原來我也懂-誰都了解的圖解網路原理大公開-preview-20
原來我也懂-誰都了解的圖解網路原理大公開-preview-1

商品描述

https://youtu.be/4bA4pza79AU

 

l TCP/IP 四層模型與封包視角

l Wireshark 擷取技巧與過濾規則

l 逾時定位與重傳路徑分析

l 私有 IP 與 NAT 位址配置原理

l 公網 IP 查詢與連線可達性判讀

l 集線器 交換器 路由器差異與選型

l Socket 通訊模型與收發緩衝區

l TCP 與 UDP 行為對照與取捨準則

l 三向交握 四次揮手 狀態機解讀

l RST 觸發場景與故障復原策略

l MTU MSS 分段分片與封包沾黏處理

l HTTP RPC WebSocket DHCP HTTPS DNS SSH CDN 排查路徑

 

【書籍簡介】

本書共分五章,第一章從 TCP/IP 四層模型建立封包視角,帶你用 Wireshark 擷取封包並用實例定位逾時問題;第二章聚焦網路層與網路介面層,解釋私有 IP 與公網 IP、位址分類與可達性差異,並整理居家與公司網路存取的關鍵限制,再比較路由器、集線器、交換器的轉送邏輯;第三章深入傳輸層,從 socket 通訊與緩衝區出發,對照 TCP 與 UDP 的行為與例外處理,拆解三向交握、四次揮手、兩次握手、RST 場景、listen 與 accept、MTU MSS、分段分片與封包沾黏的成因與解法;第四章進入應用層,以 HTTP、RPC、WebSocket、DHCP、HTTPS、DNS、SSH、ping 等主題建立可操作的排查流程;第五章回到實作,整理並發安全、I/O 多工與 epoll、unix domain socket、遊戲網路常見方案、KCP 與 QoS、序列化與 protobuf,以及 CDN 的加速機制與效能判讀。

 

<序>

 

致謝

感謝成都道然科技有限責任公司的姚新軍(@ 長頸鹿27)老師,姚老師為人認真負責,在寫書的過程中給了我很多建議和幫助,還安排設計師對書內的插圖進行了統一繪製,沒有他就不可能有這本書。

 

感謝我在盛大遊戲工作時的前主管謝斌,是他給了我進入網路產業的機會,並在多個專案中為我提供發展和提升的平台。他平易近人的態度和卓越的專業技能,對我產生了積極的影響,並激勵我不斷進步。沒有他的幫助和指導,我的職業道路將會大不相同。

 

感謝我的哥哥林兆欽,他是大眾眼裡的「別人眼中的優秀孩子」,從小到大都很優秀,一直像榜樣一樣影響著我。他在我求學和工作的過程中幫我做了很多關鍵決策。我想起那個八月,他幫我拖著行李,從廣東送我來到上海上學,炎熱的夏風吹得樹葉四處搖晃。一晃十多年就過去了,如今再想起,用現在流行的話來說就是,「命運就在那一刻悄悄改變了」。

 

感謝我的父母,他們善良勤懇、踏實刻苦的品質塑造了我的人格。創作內容的過程很枯燥,每當想起遠在家鄉、聚少離多的他們,我就有了堅持下去的動力。人生是一道選擇題,不管我選的是AB 還是CD,他們對我做的事情都無條件地支持和鼓勵。

 

另外,特別感謝我的妻子。作為內容創作者,我的生活常常被寫作佔滿,不是在寫東西,就是在想接下來要寫什麼,這讓我陪她的時間少了很多。但她總是理解我,給我鼓勵,讓我能夠堅持寫完這本書。她的存在,對我來說意義重大。

 

我和大部分工程師兄弟一樣,來自某個「十八線」小縣城,是家人早起晚歸辛勤勞動供出來的「小鎮做題家」,我們拿著類似的劇本,在各自的人生裡不斷努力改變自己和家人的命運。謹以此書獻給我的家人和一路關注我、支持我的讀者朋友們,希望所有努力的人都能得償所願,希望所有喜歡電腦的朋友們都能在這本書中收穫知識和快樂!如果這本書能給你們帶來幫助,那將是我最開心的事情。

作者簡介

林兆倫(@小白debug

 

後端技術專家,先後就職於盛大遊戲,字節跳動,全網五十多萬讀者技術博主。

目錄大綱

▍第一章 網路基礎:探索網路的起點
1.1 TCP/IP 四層網路是什麼? .
1.1.1 TCP/IP 四層網路 
1.1.2 兩台電腦互連 
1.1.3 小結 
1.2 如何使用 Wireshark 擷取封包? 
小結 
1.3 如何使用Wireshark 定位timeout 問題 
1.3.1 問題背景 
1.3.2 排除方案 
1.3.3 原因 
1.3.4 小結 

▍第二章 網路層和網路介面層:架起連接的橋樑
2.1 為什麼我們家裡的IP 位址都是192.168 開頭的? 
2.1.1 IP 位址是什麼? 
2.1.2 IP 位址的分類 
2.1.3 IP 位址不夠用了嗎? 
2.1.4 查詢自己的公用網路 IP 位址 
2.1.5 小結 
2.2 為什麼我在公司連線不了家裡的電腦? 
2.2.1 NAT 的運作原理 
2.2.2 NAPT 的運作原理 
2.2.3 內網穿透是什麼? 
2.2.4 小結 
2.3 ping 不通,網路就一定不可用嗎? 
2.3.1 ICMP 是什麼? 
2.3.2 ICMP 封包格式 
2.3.3 ICMP 和IP 的關係 
2.3.4 ICMP 封包擷取 
2.3.5 小結 
2.4 路由器、集線器、交換器有什麼區別? 
2.4.1 什麼是集線器? 
2.4.2 什麼是交換器? 
2.4.3 什麼是路由器? 
2.4.4 小結 

▍第三章 傳輸層:資料流動內幕
3.1 Socket 到底是什麼? 
3.1.1 socket 如何實現網路通訊? 
3.1.2 sock 如何實現「繼承」? 
3.1.3 小結 
3.2 TCP 和UDP 有什麼區別? 
3.2.1 使用socket 進行資料傳輸 
3.2.2 對於異常情況的處理 
3.2.3 用UDP 就一定比用TCP 快嗎? 
3.2.4 小結 
3.3 程式碼執行 send 成功後,資料就傳送出去了嗎? 
3.3.1 socket 緩衝區 
3.3.2 TCP 部分 
3.3.3 UDP 部分 
3.4 TCP 兩向交握,你見過嗎?那四次交握呢? 
3.4.1 TCP 四向交握 
3.4.2 TCP 三向交握 
3.4.3 TCP 兩向交握 
3.4.4 TCP 四次交握 
3.4.5 小結 
3.5 沒有 accept,能建立 TCP 連線嗎? 
3.5.1 三向交握的細節分析 
3.5.2 小結 
3.6 收到RST 就一定會斷開TCP 連線嗎? 
3.6.1 出現 RST 的情境有哪些? 
3.6.2 收到RST 就一定會斷開連線嗎? 
3.6.3 小結 
3.7 伺服器端沒執行 bind,卻執行了 listen,會怎樣? 
3.7.1 bind 的作用 
3.7.2 不執行bind 會怎樣 
3.7.3 小結 
3.8 TCP 封包沾黏是什麼?封包:我只是犯了每個封包都會犯的錯 
3.8.1 資料分片 
3.8.2 MTU 和MSS 有什麼區別? 
3.8.3 什麼是封包沾黏? 
3.8.4 為什麼會出現封包沾黏? 
3.8.5 為什麼要組裝傳送的資料? 
3.8.6 關閉Nagle 演算法就不會封包沾黏了嗎? 
3.8.7 如何處理封包沾黏? 
3.8.8 UDP 會封包沾黏嗎? 
3.8.9 IP 層有封包沾黏問題嗎? 
3.8.10 小結 
3.9 為什麼IP 層會分片,TCP 層也要分片? 
3.9.1 如何查看MSS ? 
3.9.2 如何查看MTU ? 
3.9.3 為什麼MTU 一般是1500 ? 
3.9.4 TCP 層分片了,IP 層就一定不會分片了嗎? 
3.9.5 IP 層如何做到不分片? 
3.9.6 小結 
3.10 連接一個 IP 位址不存在的主機時,交握過程是怎樣的? 
3.10.1 正常情況下的交握過程是怎樣的? 
3.10.2 連接IP 位址存在但埠號不存在的主機的交握過程 
3.10.3 小結 

▍第四章 應用層:網路應用互動的奇妙旅程
4.1 HTTP 是什麼? 
4.1.1 HTTP 訊息格式 
4.1.2 封包資訊解讀 
4.1.3 小結 
4.2 502 問題怎麼排除? 
4.2.1 HTTP 狀態碼 
4.2.2 閘道器的作用 
4.2.3 Nginx 回傳5xx 狀態碼 
4.2.4 產生502 的常見原因 
4.2.5 小結 
4.3 既然有HTTP,為什麼還要有RPC ? 
4.3.1 從TCP 聊起 
4.3.2 使用純裸TCP 會有什麼問題? 
4.3.3 HTTP 和RPC 
4.3.4 小結 
4.4 為什麼有了HTTP,還要有WebSocket 協定? 
4.4.1 使用HTTP 不斷輪詢 
4.4.2 長輪詢 
4.4.3 websocket 是什麼? 
4.4.4 如何建立 WebSocket 連線? 
4.4.5 websocket 封包擷取 
4.4.6 websocket 的訊息格式 
4.4.7 websocket 的使用情境 
4.4.8 小結 
4.5 剛插上網路線,電腦怎麼知道自己的 IP 位址是什麼? 
4.5.1 DHCP 是什麼? 
4.5.2 DHCP 的運作原理 
4.5.3 DHCP 封包擷取 
4.5.4 為什麼DHCP 用UDP,能不能改用TCP ? 
4.5.5 為什麼第二階段不是廣播,而是單播? 
4.5.6 是不是每次連網都要經歷DHCP 四個階段? 
4.5.7 DHCP 分配下來的IP 位址一定不會重複嗎? 
4.5.8 小結 
4.6 HTTPS 裡公鑰加密的內容,為什麼不能用公鑰解密?
4.6.1 對稱加密和非對稱加密 
4.6.2 HTTPS 的加密原理 
4.6.3 小結 
4.7 為什麼我抓不到baidu 的封包? 
4.7.1 為什麼沒能抓到封包? 
4.7.2 解密封包 
4.7.3 HTTPS 交握過程 
4.7.4 如何得到pre_master ? 
4.7.5 ssl.key 檔案內容 
4.7.6 小結 
4.8 DNS 中有哪些值得學習的優秀設計? 
4.8.1 為什麼要有DNS ? 
4.8.2 URL 的階層結構 
4.8.3 DNS 的原理
4.8.4 封包擷取 
4.8.5 小結 
4.9 聽說DNS 根伺服器只有13 台,這科學嗎? 
4.9.1 DNS 是基於UDP 的應用層協定嗎? 
4.9.2 為什麼有UDP 了還要用到TCP ? 
4.9.3 既然TCP 那麼好,為什麼不全用TCP ? 
4.9.4 迭代查詢和遞迴查詢是什麼? 
4.9.5 迭代查詢和遞迴查詢的封包特徵 
4.9.6 DNS 的IPv4 根伺服器只有13 個嗎? 
4.9.7 小結 
4.10 如果沒有 SSH,我們用什麼登入伺服器? 
4.10.1 SSH 是什麼? 
4.10.2 用telnet 登入伺服器 
4.10.3 用telnet 登入伺服器有什麼問題? 
4.10.4 SSH 的原理 
4.10.5 網路擷取封包 
4.10.6 小結 
4.11 斷網了還能 ping 通 127.0.0.1 嗎?為什麼? 
4.11.1 什麼是127.0.0.1 ? 
4.11.2 什麼是ping ? 
4.11.3 TCP 傳送資料和ping 的區別 
4.11.4 ping 回送位址和ping 本機位址有什麼區別? 
4.11.5 127.0.0.1 與localhost 以及0.0.0.0 有區別嗎? 
4.11.6 小結 
4.12 能ping 通,就代表TCP 一定能連通嗎? 
4.12.1 網路路徑 
4.12.2 路徑由什麼決定? 
4.12.3 TCP 和ping 走的網路路徑一樣嗎? 
4.12.4 同樣都用TCP,封包走的網路路徑一樣嗎? 
4.12.5 利用這個知識重點排除問題 
4.12.6 小結 
4.13 用了TCP,就一定不會封包遺失嗎? 
4.13.1 封包的傳送流程 
4.13.2 建立連線時封包遺失 
4.13.3 流量控制封包遺失 
4.13.4 網路卡封包遺失 
4.13.5 接收緩衝區封包遺失 
4.13.6 兩端之間的網路封包遺失 
4.13.7 發生封包遺失了怎麼辦? 
4.13.8 這類封包遺失問題怎麼解決? 
4.13.9 小結 

▍第五章 網路程式設計:程式碼與網路的虛擬工藝
5.1 Socket 是並行安全的嗎? 
5.1.1 寫TCP socket 是執行緒安全的嗎? 
5.1.2 讀取 TCP socket 是執行緒安全的嗎? 
5.1.3 讀寫UDP socket 是執行緒安全的嗎? 
5.1.4 小結 
5.2 遊戲伺服器為什麼能支援大量玩家同時上線? 
5.2.1 I/O 多工 
5.2.2 select 和poll 
5.2.3 epoll 
5.2.4 epoll 的核心實作 
5.2.5 小結 
5.3 用了socket 就一定要走網路協定堆疊嗎?
5.3.1 基於Sidecar 的服務架構 
5.3.2 unix domain socket 是什麼? 
5.3.3 unix domain socket 核心實作 
5.3.4 還有哪些使用情境? 
5.3.5 小結 
5.4 《原神》主要用的是TCP 還是UDP ? 
5.4.1 為什麼要用UDP 而不是TCP ? 
5.4.2 UDP 如何變得可靠? 
5.4.3 KCP 的功能 
5.4.4 為什麼有了TCP 還要有KCP? 
5.4.5 KCP 的實作 
5.4.6 小結 
5.5 KCP 很強,但遇到QoS 問題,該怎麼辦呢? 
5.5.1 QoS 是什麼? 
5.5.2 控制QoS 的原理 
5.5.3 KCP 為什麼會有 QoS 問題? 
5.5.4 KCP 如何應對QoS 導致的封包遺失問題? 
5.5.5 QoS 的設計有哪些地方值得借鏡? 
5.5.6 小結 
5.6 網路通訊中的序列化和反序列化是什麼? 
5.6.1 XML 
5.6.2 JSON 
5.6.3 protobuf 
5.6.4 Thrift 
5.6.5 小結 
5.7 protobuf 的資料怎麼看? 
5.7.1 protobuf 怎樣組織基礎資料? 
5.7.2 protobuf 怎樣組織陣列類型資料? 
5.7.3 protobuf 怎樣組織陣列內嵌結構? 
5.7.4 protobuf 做了哪些最佳化? 
5.7.5 更好地閱讀protobuf 資料的方法 
5.7.6 小結 
5.8 CDN 是什麼?用了CDN 就一定比不用更快嗎? 
5.8.1 CDN 是什麼? 
5.8.2 CDN 的運作原理 
5.8.3 為什麼要那麼麻煩加一個CNAME ? 
5.8.4 怎樣知道哪個伺服器 IP 位址離呼叫端「最近」? 
5.8.5 回源是什麼? 
5.8.6 怎樣判斷是否發生回源? 
5.8.7 用了CDN 一定比不用更快嗎? 
5.8.8 什麼情況下不應該使用CDN ? 
5.8.9 小結