《深入理解Linux網路: 修煉底層內功,掌握高性能原理》是2022年電子工業出版社出版的書籍,作者是張彥飛。
基本介紹
- 中文名:深入理解Linux網路: 修煉底層內功,掌握高性能原理
- 作者:張彥飛
- 出版社:電子工業出版社
- 出版時間:2022年5月
- 頁數:336 頁
- 定價:118 元
- 開本:16 開
- ISBN:9787121434105
內容簡介,圖書目錄,
內容簡介
《深入理解Linux網路: 修煉底層內功,掌握高性能原理》通過先拋出一些開發、運維等技術人員在工作中經常遇見的問題,激發讀者的思考。從這些問題出發,深入地對網路底層實現原理進行拆解,帶領讀者看清楚問題的核心,理解其背後的技術本質,提高大家的技術功力。例如網路包是如何被接收和傳送的?阻塞到底在內部是如何發生的?epoll的底層工作原理又是啥?TCP連線在底層上是如何支持和實現的?書中對這些內容都有深度的闡述。本書旨在通過帶領讀者修煉底層內功,進而幫助大家深度掌握網路高性能原理。
圖書目錄
第1章 緒論/ 1
1.1 我在工作中的困惑/ 2
1.1.1 過多的TIME_WAIT/ 2
1.1.2 長連線開銷/ 2
1.1.3 CPU被消耗光了/ 3
1.1.4 為什麼不同的語言網路性能差別巨大/ 4
1.1.5 訪問127.0.0.1過網卡嗎/ 4
1.1.6 軟中斷和硬中斷/ 5
1.1.7 零拷貝到底是怎么回事/ 5
1.1.8 DPDK/ 5
1.2 本書內容結構/ 6
1.3 一些約定/ 7
1.4 一些術語/ 8
第2章 核心是如何接收網路包的/ 9
2.1 相關實際問題/ 10
2.2 數據是如何從網卡到協定棧的/ 11
2.2.1 Linux網路收包總覽/ 12
2.2.2 Linux啟動/ 13
2.2.3 迎接數據的到來/ 23
2.2.4 收包小結/ 33
2.3 本章總結/ 34
第3章 核心是如何與用戶進程協作的/ 41
3.1 相關實際問題/ 42
3.2 socket的直接創建/ 43
3.3 核心和用戶進程協作之阻塞方式/ 46
3.3.1 等待接收訊息/ 47
3.3.2 軟中斷模組/ 52
3.3.3 同步阻塞總結/ 57
3.4 核心和用戶進程協作之epoll/ 59
3.4.1 epoll核心對象的創建/ 60
3.4.2 為epoll添加socket/ 62
3.4.3 epoll_wait之等待接收/ 68
3.4.4 數據來了/ 71
3.4.5 小結/ 79
3.5 本章總結/ 80
第4章 核心是如何傳送網路包的/ 84
4.1 相關實際問題/ 85
4.2 網路包傳送過程總覽/ 86
4.3 網卡啟動準備/ 90
4.4 數據從用戶進程到網卡的詳細過程/ 92
4.4.1 send系統調用實現/ 92
4.4.2 傳輸層處理/ 94
4.4.3 網路層傳送處理/ 99
4.4.4 鄰居子系統/ 103
4.4.5 網路設備子系統/ 105
4.4.6 軟中斷調度/ 109
4.4.7 igb網卡驅動傳送/ 111
4.5 RingBuffer記憶體回收/ 114
4.6 本章總結/ 115
第5章 深度理解本機網路IO/ 119
5.1 相關實際問題/ 120
5.2 跨機網路通信過程/ 120
5.2.1 跨機數據傳送/ 120
5.2.2 跨機數據接收/ 125
5.2.3 跨機網路通信匯總/ 127
5.3 本機傳送過程/ 127
5.3.1 網路層路由/ 127
5.3.2 本機IP路由/ 130
5.3.3 網路設備子系統/ 131
5.3.4 “驅動”程式/ 133
5.4 本機接收過程/ 135
5.5 本章總結/ 137
第6章 深度理解TCP連線建立過程/ 139
6.1 相關實際問題/ 140
6.2 深入理解listen/ 141
6.2.1 listen系統調用/ 141
6.2.2 協定棧listen/ 142
6.2.3 接收佇列定義/ 143
6.2.4 接收佇列申請和初始化/ 145
6.2.5 半連線佇列長度計算/ 146
6.2.6 listen過程小結/ 148
6.3 深入理解connect/ 148
6.3.1 connect調用鏈展開/ 149
6.3.2 選擇可用連線埠/ 151
6.3.3 連線埠被使用過怎么辦/ 153
6.3.4 發起syn請求/ 155
6.3.5 connect小結/ 156
6.4 完整TCP連線建立過程/ 157
6.4.1 客戶端connect/ 159
6.4.2 服務端回響SYN/ 160
6.4.3 客戶端回響SYNACK/ 162
6.4.4 服務端回響ACK/ 164
6.4.5 服務端accept/ 167
6.4.6 連線建立過程總結/ 167
6.5 異常TCP連線建立情況/ 169
6.5.1 connect系統調用耗時失控/ 169
6.5.2 第一次握手丟包/ 171
6.5.3 第三次握手丟包/ 176
6.5.4 握手異常總結/ 178
6.6 如何查看是否有連線佇列溢出發生/ 179
6.6.1 全連線佇列溢出判斷/ 179
6.6.2 半連線佇列溢出判斷/ 181
6.6.3 小結/ 183
6.7 本章總結/ 183
第7章 一條TCP連線消耗多大記憶體/ 187
7.1 相關實際問題/ 188
7.2 Linux核心如何管理記憶體/ 188
7.2.1 node劃分/ 189
7.2.2 zone劃分/ 191
7.2.3 基於夥伴系統管理空閒頁面/ 192
7.2.4 slab分配器/ 194
7.2.5 小結/ 197
7.3 TCP連線相關核心對象/ 198
7.3.1 socket函式直接創建/ 198
7.3.2 服務端socket創建/ 206
7.4 實測TCP核心對象開銷/ 207
7.4.1 實驗準備/ 207
7.4.2 實驗開始/ 208
7.4.3 觀察ESTABLISH狀態開銷/ 209
7.4.4 觀察非ESTABLISH狀態開銷/ 211
7.4.5 收發快取區簡單測試/ 214
7.4.6 實驗結果小結/ 215
7.5 本章總結/ 216
第8章 一台機器最多能支持多少條TCP連線/ 218
8.1 相關實際問題/ 219
8.2 理解Linux最大檔案描述符限制/ 219
8.2.1 找到源碼入口/ 220
8.2.2 尋找進程級限制nofile和fs.nr_open/ 221
8.2.3 尋找系統級限制fs.file-max/ 223
8.2.4 小結/ 224
8.3 一台服務端機器最多可以支撐多少條TCP連線/ 225
8.3.1 一次關於服務端並發的聊天/ 225
8.3.2 伺服器百萬連線達成記/ 228
8.3.3 小結/ 232
8.4 一台客戶端機器最多只能發起65 535條連線嗎/ 232
8.4.1 65 535的束縛/ 232
8.4.2 多IP增加連線數/ 234
8.4.3 連線埠復用增加連線數/ 236
8.4.4 小結/ 243
8.5 單機百萬並發連線的動手實驗/ 243
8.5.1 方案一,多IP客戶端發起百萬連線/ 244
8.5.2 方案二,單IP客戶端機器發起百萬連線/ 248
8.5.3 最後多談一點/ 250
8.6 本章總結/ 251
第9章 網路性能最佳化建議/ 253
9.1 網路請求最佳化/ 254
9.2 接收過程最佳化/ 256
9.3 傳送過程最佳化/ 262
9.4 核心與進程協作最佳化/ 268
9.5 握手揮手過程最佳化/ 269
第10章 容器網路虛擬化/ 272
10.1 相關實際問題/ 273
10.2 veth設備對/ 274
10.2.1 veth如何使用/ 274
10.2.2 veth底層創建過程/ 276
10.2.3 veth網路通信過程/ 278
10.2.4 小結/ 281
10.3 網路命名空間/ 281
10.3.1 如何使用網路命名空間/ 282
10.3.2 命名空間相關的定義/ 284
10.3.3 網路命名空間的創建/ 287
10.3.4 網路收發如何使用網路命名空間/ 295
10.3.5 結論/ 296
10.4 虛擬交換機Bridge/ 297
10.4.1 如何使用Bridge/ 298
10.4.2 Bridge是如何創建出來的/ 301
10.4.3 添加設備/ 303
10.4.4 數據包處理過程/ 305
10.4.5 小結/ 308
10.5 外部網路通信/ 310
10.5.1 路由和NAT/ 311
10.5.2 實現外部網路通信/ 313
10.5.3 小結/ 318
10.6 本章總結/ 319