高性能 Linux 網絡編程核心技術揭秘

朱文偉 李建英

  • 高性能 Linux 網絡編程核心技術揭秘-preview-1
  • 高性能 Linux 網絡編程核心技術揭秘-preview-2
  • 高性能 Linux 網絡編程核心技術揭秘-preview-3
高性能 Linux 網絡編程核心技術揭秘-preview-1

買這商品的人也買了...

商品描述

《高性能Linux網絡編程核心技術揭秘》沒有從基本的網絡編程知識講起,而是著眼於當前業界主流的Linux高性能網絡編程框架,並以實戰案例的形式將相關知識展現出來。本書詳細講解高性能Linux網絡編程的常用框架,包括Linux網絡自帶的基本I/O模型epoll、Intel公司的DPDK、高性能服務器Nginx、高性能事件庫libevent,並配套全部示例源碼。 本書共分10章,內容包括高性能網絡編程概述、Linux基礎和網絡、搭建Linux網絡開發環境、網絡服務器設計、基於libevent 的FTP服務器、基於epoll的高並發聊天服務器、高性能服務器Nginx架構解析、DPDK開發環境的搭建、DPDK應用案例實戰、基於P2P架構的高性能游戲服務器。 本書既適合Linux高性能網絡編程初學者、高性能網絡服務器開發人員、高並發游戲服務器開發人員等閱讀,也適合作為高等院校電腦網絡與通信、電腦網絡技術等相關專業的教材。

目錄大綱

目    錄

 

第1章  高性能網絡編程概述 1

1.1  來自產品經理的壓力 1

1.2  網絡高性能需求越來越大 4

1.3  高性能網絡報文處理的瓶頸 5

1.4  八仙過海各顯神通 8

1.5  Linux內核的弊端 8

1.6  什麽是DPDK 9

1.7  高性能服務器框架研究 10

1.7.1  C/S模型 10

1.7.2  P2P模型 11

1.7.3  服務器的框架概述 12

1.7.4  高效的事件處理模式 12

1.7.5  高效的並發模式 14

1.7.6  提高服務器性能的方法 15

第2章  Linux基礎和網絡 17

2.1  Linux啟動過程 17

2.2  圖形模式與文字模式的切換方式 19

2.3  Linux關機和重啟 20

2.4  開機自啟動 21

2.5  查看Ubuntu的內核版本 23

2.6  查看Ubuntu操作系統的版本 23

2.7  查看CentOS操作系統的版本 23

2.8  CentOS 7升級glibc 24

2.9  在文件中搜索 24

2.10  Linux配置文件的區別 24

2.11  讓/etc/profile文件修改後立即生效 26

2.12  Linux性能優化的常用命令 26

2.13  測試Web服務器性能 28

2.13.1  架設Web服務器Apache 28

2.13.2  Windows下測試Web服務器性能 30

2.13.3  Linux下測試Web服務器性能 32

2.14  Linux中的文件權限 37

2.15  環境變量的獲取和設置 38

2.16  解析命令行參數函數 41

2.17  登錄桌面到龍芯服務器 42

2.18  遠程桌面到銀河麒麟 43

2.19  KVM和Qemu的關系 44

2.20  檢查系統是否支持虛擬化 45

2.21  在Ubuntu 22中使用KVM虛擬機CentOS 8 45

2.21.1  安裝CentOS 8虛擬機 46

2.21.2  虛擬機和宿主機網絡通信 46

2.21.3  通過ssh命令登錄到虛擬機 47

2.21.4  通過scp命令向虛擬機Linux傳送文件 47

2.21.5  讓虛擬機識別到PCI設備 48

2.22  在Ubuntu下安裝RPM包 51

2.23  在CentOS中使用KVM虛擬機Ubuntu 22 51

2.23.1  通過圖形化終端使用Ubuntu 22 51

2.23.2  通過遠程桌面方式使用Ubuntu 22 52

2.23.3  自定義路徑安裝KVM虛擬機 53

2.23.4  讓虛擬機識別到PCI設備 57

2.24  銀河麒麟系統中使用虛擬機 58

2.25  網絡通信與報文處理 60

2.26  Linux內核的報文處理機制 61

2.26.1  Linux協議棧 61

2.26.2  NAPI技術 62

2.26.3  高性能網卡及網卡多隊列技術 62

2.26.4  RPS/RFS技術 63

2.26.5  Linux套接字報文採集 63

2.27  PF_RING高性能報文處理框架 64

2.27.1  PF_RING簡介 64

2.27.2  PF_RING非零復制庫 64

2.27.3  PF_RING零復制庫 66

2.28  DPDK高性能報文處理框架 67

2.28.1  DPDK及其技術優點 67

2.28.2  DPDK庫組件 68

2.28.3  PF_RING ZC與DPDK優化技術對比 69

第3章  搭建Linux網絡開發環境 70

3.1  準備虛擬機環境 70

3.1.1  在VMware下安裝Linux 70

3.1.2  開啟登錄時的root賬號 73

3.1.3  解決Ubuntu上的vi方向鍵問題 75

3.1.4  關閉防火牆 75

3.1.5  配置安裝源 76

3.1.6  安裝網絡工具包 77

3.1.7  安裝基本開發工具 77

3.1.8  啟用SSH 77

3.1.9  做個快照 79

3.1.10  連接虛擬機Linux 79

3.1.11  和虛擬機互傳文件 93

3.2  搭建Linux下的C/C++開發環境 94

3.3  搭建Windows下的Linux C/C++開發環境 95

3.3.1  Windows下非集成式的Linux C/C++開發環境 95

3.3.2  Windows下集成式的Linux C/C++開發環境 99

第4章  網絡服務器設計 103

4.1  I/O模型 104

4.1.1  基本概念 104

4.1.2  同步和異步 104

4.1.3  阻塞和非阻塞 106

4.1.4  同步異步和阻塞非阻塞的關系 108

4.1.5  為什麽要採用socket I/O模型 109

4.1.6  (同步)阻塞I/O模型 109

4.1.7  (同步)非阻塞式I/O模型 110

4.1.8  (同步)I/O多路復用模型 111

4.1.9  (同步)信號驅動式I/O模型 112

4.1.10  異步I/O模型 112

4.1.11  五種I/O模型的比較 113

4.2  單進程循環服務器 114

4.2.1  UDP循環服務器 114

4.2.2  TCP循環服務器 118

4.3  多進程並發服務器 121

4.3.1  多進程並發服務器的分類 121

4.3.2  fork函數的使用 122

4.4  多線程並發服務器 127

4.5  I/O多路復用的服務器 131

4.5.1  使用場景 132

4.5.2  基於select的服務器 132

4.5.3  基於poll的服務器 140

4.5.4  基於epoll的服務器 147

第5章  基於libevent的FTP服務器 156

5.1  Reactor模式 156

5.1.1  Reactor模式的優點 157

5.1.2  Reactor模式框架 157

5.1.3  Reactor事件處理流程 159

5.2  使用libevent的基本流程 159

5.3  下載和編譯libevent 161

5.4  FTP概述 163

5.4.1  FTP的工作原理 163

5.4.2  FTP的傳輸方式 163

5.4.3  FTP的工作方式 164

5.4.4  FTP命令 165

5.4.5  FTP應答碼 167

5.5  開發FTP服務器 169

5.6  開發FTP客戶端 175

5.6.1  客戶端需求分析 175

5.6.2  概要設計 176

5.6.3  客戶端工作流程設計 176

5.6.4  實現主界面 176

5.6.5  實現登錄界面 180

5.6.6  實現登錄後的操作界面 180

5.6.7  運行結果 186

 

第6章  基於epoll的高並發聊天服務器 189

6.1  系統平臺的選擇 189

6.1.1  應用系統平臺模式的選擇 189

6.1.2  C/S模式介紹 190

6.1.3  數據庫系統的選擇 191

6.2  系統需求分析 191

6.3  系統總體設計 193

6.4  即時通信系統的實施原理 194

6.4.1  IM的工作方式 194

6.4.2  IM的基本技術原理 194

6.4.3  IM的通信方式 195

6.5  功能模塊劃分 195

6.5.1  模塊劃分 195

6.5.2  服務器端功能 196

6.5.3  客戶端功能 196

6.5.4  服務器端多線程 197

6.5.5  客戶端的循環等待 197

6.6  數據庫設計 197

6.6.1  準備MySQL環境 198

6.6.2  登錄MySQL 200

6.6.3  Linux下的MySQL的C編程 203

6.6.4  聊天系統數據庫設計 208

6.7  服務器端設計 210

6.7.1  使用epoll模型 210

6.7.2  詳細設計 210

6.8  客戶端設計 218

第7章  高性能服務器Nginx架構解析 226

7.1  什麽是Nginx 226

7.2  Nginx的下載和安裝 227

7.3  為何要研究Nginx 228

7.4  Nginx概述 230

7.5  Nginx服務器設計原則 231

7.6  整體架構研究 233

7.6.1  模塊化設計體系 233

7.6.2  事件驅動模型 234

7.6.3  進程模型 236

7.6.4  內存池設計 237

7.7  Nginx重要的數據結構 238

7.7.1  ngx_str_t數據結構 238

7.7.2  ngx_array_t數據結構 239

7.7.3  ngx_pool_t數據結構 240

7.8  反向代理和負載均衡 241

7.8.1  Nginx反向代理功能 241

7.8.2  負載均衡的配置 242

7.9  信號機制 243

7.9.1  啟動Nginx 243

7.9.2  進程管理 244

7.10  HTTP框架解析 246

7.10.1  HTTP框架工作流程 246

7.10.2  處理引擎 248

7.10.3  過濾引擎 249

7.11  upstream機制的實現 249

第8章  DPDK開發環境的搭建 253

8.1  檢查裝備 253

8.1.1  基本硬件要求 253

8.1.2  操作系統要求 253

8.1.3  編譯DPDK的要求 254

8.1.4  運行DPDK應用程序的要求 254

8.2  虛擬機下編譯安裝DPDK20 255

8.2.1  為何要配置硬件 255

8.2.2  配置CPU 255

8.2.3  配置內存 256

8.2.4  添加網卡 257

8.2.5  安裝和使用Meson 258

8.2.6  下載並解壓DPDK 261

8.2.7  配置構建、編譯和安裝 261

8.2.8  第一個基於DPDK20的DPDK程序 264

8.2.9  大頁內存及其設置 267

8.2.10  綁定網卡 276

8.2.11  實現一個稍復雜的命令行工具 282

8.3  虛擬機下命令方式建立DPDK19環境 293

8.4  虛擬機下腳本方式建立DPDK19環境 295

8.5  在CentOS 7.6下建立DPDK19環境 302

8.6  在CentOS 8.2下建立DPDK20環境 313

8.6.1  搭建Meson+Ninja環境 313

8.6.2  基於Meson建立DPDK20環境 315

8.6.3  單步調試DPDK20程序 318

8.6.4  make命令開發DPDK20程序 321

8.7  在國產操作系統下搭建基於萬兆網卡的DPDK20環境 326

8.7.1  CentOS 8驗證萬兆網卡 327

8.7.2  DPDK適配PC國產系統 329

8.7.3  DPDK適配兆芯服務器 332

8.7.4  DPDK適配飛騰服務器 334

第9章  DPDK應用案例實戰 337

9.1  實戰1:測試兩個網口之間的收發 337

9.1.1  搞清楚網卡、網口和埠 337

9.1.2  testpmd簡介 338

9.1.3  testpmd的轉發模式 338

9.1.4  案例中的使用場景 339

9.1.5  搭建DPDK案例環境 339

9.1.6  運行測試工具 342

9.1.7  testpmd的其他選項 346

9.2  實戰2:接收來自Windows的網絡包並統計 347

9.2.1  什麽是二層轉發 347

9.2.2  程序的主要流程 348

9.2.3  主函數實現 348

9.2.4  任務分發的實現 354

9.2.5  程序參數的解析實現 357

9.2.6  轉發的實現 358

9.2.7  信號的處理 359

9.2.8  搭建DPDK案例環境 359

9.2.9  編寫Makefile並編譯 359

9.2.10  在Windows上部署環境 361

9.2.11  運行程序 363

第10章  基於P2P架構的高性能游戲服務器 365

10.1  網絡游戲服務器發展現狀 366

10.2  現有網絡游戲服務器架構 367

10.2.1  Client/Server架構 367

10.2.2  游戲大廳代理架構 368

10.2.3  P2P架構 368

10.3  P2P網絡游戲技術分析 369

10.4  網絡游戲的同步機制 370

10.4.1  事件一致性 371

10.4.2  時間同步 371

10.5  總體設計 372

10.5.1  服務器系統架構模型 372

10.5.2  傳輸層協議的選擇 374

10.5.3  協議包設計 375

10.6  數據庫設計 377

10.7  服務器詳細設計和實現 377

10.8  客戶端詳細設計和實現 386

10.8.1  棋盤類CTable 387

10.8.2  游戲模式類CGame 389

10.8.3  消息機制 391

10.8.4  游戲算法 394