作 者:張彥飛 著
定 價:118
出 版 社:電子工業出版社
出版日期:2022年06月01日
頁 數:336
裝 幀:平裝
ISBN:9787121434105
"200幅底層原理全彩插圖,48個高頻工程實踐問題解決方案,24條打造高性能應用的硬核建議。Java、C++、PHP實驗代碼,助你——清掃性能誤區,探尋底層原理,應對校招、社招、晉升考核,用底層內功對抗中年焦慮。時髦的東西終究過時,但扎實的內功將會伴隨你一生。隻有具備了深厚的內功底蘊,纔能在發展的道路上走得更穩、走得更遠。騰訊技術副總監張勇、小米科技技術總監黃學青等技術專家齊贊。"
●第1章緒論/1
1.1我在工作中的困惑/2
1.1.1過多的TIME_WAIT/2
1.1.2長連接開銷/2
1.1.3CPU被消耗光了/3
1.1.4為什麼不同的語言網絡性能差別巨大/4
1.1.5訪問127.0.0.1過網卡嗎/4
1.1.6軟中斷和硬中斷/5
1.1.7零拷貝到底是怎麼回事/5
1.1.8DPDK/5
1.2本書內容結構/6
1.3一些約定/7
1.4一些術語/8
第2章內核是如何接收網絡包的/9
2.1相關實際問題/10
2.2數據是如何從網卡到協議棧的/11
2.2.1Linux網絡收包總覽/12
2.2.2Linux啟動/13
2.2.3迎接數據的到來/23
2.2.4收包小結/33
2.3本章總結/34
第3章內核是如何與用戶進程協作的/41
3.1相關實際問題/42
3.2socket的直接創建/43
3.3內核和用戶進程協作之阻塞方式/46
3.3.1等待接收消息/47
3.3.2軟中斷模塊/52
3.3.3同步阻塞總結/57
3.4內核和用戶進程協作之epoll/59
3.4.1epoll內核對像的創建/60
3.4.2為epoll添加socket/62
3.4.3epoll_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.1send繫統調用實現/92
4.4.2傳輸層處理/94
4.4.3網絡層發送處理/99
4.4.4鄰居子繫統/103
4.4.5網絡設備子繫統/105
4.4.6軟中斷調度/109
4.4.7igb網卡驅動發送/111
4.5RingBuffer內存回收/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.1listen繫統調用/141
6.2.2協議棧listen/142
6.2.3接收隊列定義/143
6.2.4接收隊列申請和初始化/145
6.2.5半連接隊列長度計算/146
6.2.6listen過程小結/148
6.3深入理解connect/148
6.3.1connect調用鏈展開/149
6.3.2選擇可用端口/151
6.3.3端口被使用過怎麼辦/153
6.3.4發起syn請求/155
6.3.5connect小結/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.1connect繫統調用耗時失控/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.2Linux內核如何管理內存/188
7.2.1node劃分/189
7.2.2zone劃分/191
7.2.3基於伙伴繫統管理空閑頁面/192
7.2.4slab分配器/194
7.2.5小結/197
7.3TCP連接相關內核對像/198
7.3.1socket函數直接創建/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一臺客戶端機器最多隻能發起65535條連接嗎/232
8.4.165535的束縛/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.2veth設備對/274
10.2.1veth如何使用/274
10.2.2veth底層創建過程/276
10.2.3veth網絡通信過程/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.2Bridge是如何創建出來的/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
本書通過拋出了一些開發、運維等技術人員工作中的常見問題,激發讀者的思考。從這些疑問出發,深入地對網絡底層實現原理進行了拆解,帶領讀者看清楚問題的核心,提高大家的技術功力。例如網絡包是如何被接收和發送的?阻塞到底在內部是如何發生的?epoll 的底層工作原理又是啥?TCP 連接在底層上是如何支持和實現的?書中對這些內容都有深度的闡述。本書旨在通過帶領讀者修煉底層內功,進而幫助大家深度掌握網絡高性能原理。
張彥飛 著
張彥飛,2010年碩士畢業於西北大學計算機學院,有十多年的大型互聯網公司項目經驗,目前就職於騰訊。他喜歡對技術進行深度思考,善於挖掘技術點背後的原理。他的技術公眾號“開發內功修煉”一年便收到五萬多讀者的關注。