最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

深入理解Linux網(wǎng)絡: 修煉底層內(nèi)功,掌握高性能原理

2023-06-29 23:46 作者:流浪在銀河邊緣的阿強  | 我要投稿

鏈接:https://pan.baidu.com/s/1VD1ADQwdfVe7IhJvMYCEZA?pwd=nupj?

提取碼:nupj

本書通過先拋出一些開發(fā)、運維等技術(shù)人員在工作中經(jīng)常遇見的問題,激發(fā)讀者的思考。從這些問題出發(fā),深入地對網(wǎng)絡底層實現(xiàn)原理進行拆解,帶領讀者看清楚問題的核心,理解其背后的技術(shù)本質(zhì),提高大家的技術(shù)功力。例如網(wǎng)絡包是如何被接收和發(fā)送的?阻塞到底在內(nèi)部是如何發(fā)生的?epoll的底層工作原理又是啥?TCP連接在底層上是如何支持和實現(xiàn)的?書中對這些內(nèi)容都有深度的闡述。本書旨在通過帶領讀者修煉底層內(nèi)功,進而幫助大家深度掌握網(wǎng)絡高性能原理。


作者簡介

張彥飛,2010年碩士畢業(yè)于西北大學計算機學院,有十多年的大型互聯(lián)網(wǎng)公司項目經(jīng)驗,目前就職于騰訊。他喜歡對技術(shù)進行深度思考,善于挖掘技術(shù)點背后的原理。他的技術(shù)公眾號“開發(fā)內(nèi)功修煉”一年便收到五萬多讀者的關注。



精彩書評

這本書的出版令人欣喜。作者張彥飛能夠坦露心扉,從IT大廠面試聊到中年焦慮,技術(shù)上從內(nèi)核的工作原理聊起,將內(nèi)核如何接收網(wǎng)絡包、如何與用戶進程協(xié)作講解得深入淺出,從而帶著讀者深入理解網(wǎng)絡IO、TCP連接建立過程,最后再與讀者一起總結(jié)出系統(tǒng)性能優(yōu)化的抓手與方案。閱讀他的作品是一種享受,不但讓我收獲很多底層技術(shù)細節(jié)和原理,還能夠激發(fā)我進一步思考。分享給所有后端開發(fā)工程師閱讀,與作者一起完成內(nèi)功修煉。

騰訊技術(shù)副總監(jiān),張勇


本書從實際工作遇到的問題出發(fā),以庖丁解牛式的手法,結(jié)合內(nèi)核源碼以簡潔高效的話術(shù)把網(wǎng)絡原理講深講透,是非常少見的網(wǎng)絡進階學習圖書。如果說Stack Overflow、GitHub是用于實踐的“武當長拳”,那么本書屬于提升內(nèi)力的“小無相功”,前者能夠找到可復用或可參考的業(yè)務邏輯實現(xiàn),后者則在于提升“內(nèi)力”。

小米科技技術(shù)總監(jiān),黃學青


看彥飛的這部作品,滿足你對Linux內(nèi)核網(wǎng)絡模塊運行原理的好奇心,讓你達到知其然也知其所以然的水平。通過深度掌握底層知識,為你開發(fā)高性能后端應用打下堅實基礎。

C++ Workflow開源項目作者,謝翰


這是目前市面上少有的、深入底層回答實際工作中相關問題的書。飛哥通過日常工作中的問題,帶著你一步步深入其中的原理,不僅讓你知其然,而且知其所以然。要提升自己,內(nèi)功的修煉并不可少,飛哥的這本書給了你一個很好的起點,相信通過修煉自己的底層技術(shù)能力,你的技術(shù)能力會突飛猛進。

Go語言中文網(wǎng)創(chuàng)始人,polarisxu



目錄

第1章 緒論 / 1

1.1 我在工作中的困惑 / 2

1.1.1 過多的TIME_WAIT / 2

1.1.2 長連接開銷 / 2

1.1.3 CPU被消耗光了 / 3

1.1.4 為什么不同的語言網(wǎng)絡性能差別巨大 / 4

1.1.5 訪問127.0.0.1過網(wǎng)卡嗎 / 4

1.1.6 軟中斷和硬中斷 / 5

1.1.7 零拷貝到底是怎么回事 / 5

1.1.8 DPDK / 5

1.2 本書內(nèi)容結(jié)構(gòu) / 6

1.3 一些約定 / 7

1.4 一些術(shù)語 / 8


第2章 內(nèi)核是如何接收網(wǎng)絡包的 / 9

2.1 相關實際問題 / 10

2.2 數(shù)據(jù)是如何從網(wǎng)卡到協(xié)議棧的 / 11

2.2.1 Linux網(wǎng)絡收包總覽 / 12

2.2.2 Linux啟動 / 13

2.2.3 迎接數(shù)據(jù)的到來 / 23

2.2.4 收包小結(jié) / 33

2.3 本章總結(jié) / 34


第3章 內(nèi)核是如何與用戶進程協(xié)作的 / 41

3.1 相關實際問題 / 42

3.2 socket的直接創(chuàng)建 / 43

3.3 內(nèi)核和用戶進程協(xié)作之阻塞方式 / 46

3.3.1 等待接收消息 / 47

3.3.2 軟中斷模塊 / 52

3.3.3 同步阻塞總結(jié) / 57

3.4 內(nèi)核和用戶進程協(xié)作之epoll / 59

3.4.1 epoll內(nèi)核對象的創(chuàng)建 / 60

3.4.2 為epoll添加socket / 62

3.4.3 epoll_wait之等待接收 / 68

3.4.4 數(shù)據(jù)來了 / 71

3.4.5 小結(jié) / 79

3.5 本章總結(jié) / 80


第4章 內(nèi)核是如何發(fā)送網(wǎng)絡包的 / 84

4.1 相關實際問題 / 85

4.2 網(wǎng)絡包發(fā)送過程總覽 / 86

4.3 網(wǎng)卡啟動準備 / 90

4.4 數(shù)據(jù)從用戶進程到網(wǎng)卡的詳細過程 / 92

4.4.1 send系統(tǒng)調(diào)用實現(xiàn) / 92

4.4.2 傳輸層處理 / 94

4.4.3 網(wǎng)絡層發(fā)送處理 / 99

4.4.4 鄰居子系統(tǒng) / 103

4.4.5 網(wǎng)絡設備子系統(tǒng) / 105

4.4.6 軟中斷調(diào)度 / 109

4.4.7 igb網(wǎng)卡驅(qū)動發(fā)送 / 111

4.5 RingBuffer內(nèi)存回收 / 114

4.6 本章總結(jié) / 115


第5章 深度理解本機網(wǎng)絡IO / 119

5.1 相關實際問題 / 120

5.2 跨機網(wǎng)絡通信過程 / 120

5.2.1 跨機數(shù)據(jù)發(fā)送 / 120

5.2.2 跨機數(shù)據(jù)接收 / 125

5.2.3 跨機網(wǎng)絡通信匯總 / 127

5.3 本機發(fā)送過程 / 127

5.3.1 網(wǎng)絡層路由 / 127

5.3.2 本機IP路由 / 130

5.3.3 網(wǎng)絡設備子系統(tǒng) / 131

5.3.4 “驅(qū)動”程序 / 133

5.4 本機接收過程 / 135

5.5 本章總結(jié) / 137


第6章 深度理解TCP連接建立過程 / 139

6.1 相關實際問題 / 140

6.2 深入理解listen / 141

6.2.1 listen系統(tǒng)調(diào)用 / 141

6.2.2 協(xié)議棧listen / 142

6.2.3 接收隊列定義 / 143

6.2.4 接收隊列申請和初始化 / 145

6.2.5 半連接隊列長度計算 / 146

6.2.6 listen過程小結(jié) / 148

6.3 深入理解connect / 148

6.3.1 connect調(diào)用鏈展開 / 149

6.3.2 選擇可用端口 / 151

6.3.3 端口被使用過怎么辦 / 153

6.3.4 發(fā)起syn請求 / 155

6.3.5 connect小結(jié) / 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 連接建立過程總結(jié) / 167

6.5 異常TCP連接建立情況 / 169

6.5.1 connect系統(tǒng)調(diào)用耗時失控 / 169

6.5.2 第一次握手丟包 / 171

6.5.3 第三次握手丟包 / 176

6.5.4 握手異??偨Y(jié) / 178

6.6 如何查看是否有連接隊列溢出發(fā)生 / 179

6.6.1 全連接隊列溢出判斷 / 179

6.6.2 半連接隊列溢出判斷 / 181

6.6.3 小結(jié) / 183

6.7 本章總結(jié) / 183


第7章 一條TCP連接消耗多大內(nèi)存 / 187

7.1 相關實際問題 / 188

7.2 Linux內(nèi)核如何管理內(nèi)存 / 188

7.2.1 node劃分 / 189

7.2.2 zone劃分 / 191

7.2.3 基于伙伴系統(tǒng)管理空閑頁面 / 192

7.2.4 slab分配器 / 194

7.2.5 小結(jié) / 197

7.3 TCP連接相關內(nèi)核對象 / 198

7.3.1 socket函數(shù)直接創(chuàng)建 / 198

7.3.2 服務端socket創(chuàng)建 / 206

7.4 實測TCP內(nèi)核對象開銷 / 207

7.4.1 實驗準備 / 207

7.4.2 實驗開始 / 208

7.4.3 觀察ESTABLISH狀態(tài)開銷 / 209

7.4.4 觀察非ESTABLISH狀態(tài)開銷 / 211

7.4.5 收發(fā)緩存區(qū)簡單測試 / 214

7.4.6 實驗結(jié)果小結(jié) / 215

7.5 本章總結(jié) / 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 尋找系統(tǒng)級限制fs.file-max / 223

8.2.4 小結(jié) / 224

8.3 一臺服務端機器最多可以支撐多少條TCP連接 / 225

8.3.1 一次關于服務端并發(fā)的聊天 / 225

8.3.2 服務器百萬連接達成記 / 228

8.3.3 小結(jié) / 232

8.4 一臺客戶端機器最多只能發(fā)起65 535條連接嗎 / 232

8.4.1 65 535的束縛 / 232

8.4.2 多IP增加連接數(shù) / 234

8.4.3 端口復用增加連接數(shù) / 236

8.4.4 小結(jié) / 243

8.5 單機百萬并發(fā)連接的動手實驗 / 243

8.5.1 方案一,多IP客戶端發(fā)起百萬連接 / 244

8.5.2 方案二,單IP客戶端機器發(fā)起百萬連接 / 248

8.5.3 最后多談一點 / 250

8.6 本章總結(jié) / 251


第9章 網(wǎng)絡性能優(yōu)化建議 / 253

9.1 網(wǎng)絡請求優(yōu)化 / 254

9.2 接收過程優(yōu)化 / 256

9.3 發(fā)送過程優(yōu)化 / 262

9.4 內(nèi)核與進程協(xié)作優(yōu)化 / 268

9.5 握手揮手過程優(yōu)化 / 269


第10章 容器網(wǎng)絡虛擬化 / 272

10.1 相關實際問題 / 273

10.2 veth設備對 / 274

10.2.1 veth如何使用 / 274

10.2.2 veth底層創(chuàng)建過程 / 276

10.2.3 veth網(wǎng)絡通信過程 / 278

10.2.4 小結(jié) / 281

10.3 網(wǎng)絡命名空間 / 281

10.3.1 如何使用網(wǎng)絡命名空間 / 282

10.3.2 命名空間相關的定義 / 284

10.3.3 網(wǎng)絡命名空間的創(chuàng)建 / 287

10.3.4 網(wǎng)絡收發(fā)如何使用網(wǎng)絡命名空間 / 295

10.3.5 結(jié)論 / 296

10.4 虛擬交換機Bridge / 297

10.4.1 如何使用Bridge / 298

10.4.2 Bridge是如何創(chuàng)建出來的 / 301

10.4.3 添加設備 / 303

10.4.4 數(shù)據(jù)包處理過程 / 305

10.4.5 小結(jié) / 308

10.5 外部網(wǎng)絡通信 / 310

10.5.1 路由和NAT / 311

10.5.2 實現(xiàn)外部網(wǎng)絡通信 / 313

10.5.3 小結(jié) / 318

10.6 本章總結(jié) / 319


深入理解Linux網(wǎng)絡: 修煉底層內(nèi)功,掌握高性能原理的評論 (共 條)

分享到微博請遵守國家法律
大余县| 马龙县| 丹棱县| 昭苏县| 呼伦贝尔市| 昭苏县| 嘉定区| 岱山县| 万安县| 丰镇市| 淄博市| 绥阳县| 弥渡县| 宁南县| 武穴市| 三都| 长子县| 保山市| 清徐县| 巫溪县| 安阳市| 新绛县| 浠水县| 乐山市| 唐河县| 台南市| 凭祥市| 宁晋县| 汤阴县| 博白县| 高尔夫| 新绛县| 卢龙县| 屏东县| 罗甸县| 普洱| 营山县| 北海市| 庄浪县| 介休市| 高州市|