Linux網絡編程(第3版)
宋敬彬
買這商品的人也買了...
-
$1,068$1,015 -
$505深度探索嵌入式操作系統(從零開始設計架構和開發)
-
$403軟件保護及分析技術——原理與實踐
-
$354$336 -
$505深入分析 GCC
-
$505網絡攻防實戰研究:MySQL數據庫安全
-
$1,000$660 -
$534$507 -
$880$695 -
$880$695 -
$719$683 -
$662二進制分析實戰
-
$880$695 -
$880$695 -
$658$619 -
$620$465 -
$780$616 -
$713$677 -
$602趣話計算機底層技術
-
$720$562 -
$1,200$948 -
$600$450 -
$599$569 -
$834$792 -
$654$621
相關主題
商品描述
本書是獲得大量讀者好評的“Linux典藏大系”中的《Linux網絡編程》第3版。《Linux網絡編程》第1、2版出版後得到了大量讀者的好評,曾經多次印刷並得到了ChinaUnix技術社區的推薦。《Linux網絡編程(第3版)》全面、系統、深入地介紹Linux網絡編程的相關知識,涉及面很廣,從編程工具和環境搭建,到高級技術和核心原理,再到項目實戰,幾乎涵蓋Linux網絡編程的所有重要知識點。《Linux網絡編程(第3版)》提供教學視頻、思維導圖、教學PPT和習題參考答案等超值配套資料,可以幫助讀者高效、直觀地學習。 《Linux網絡編程(第3版)》共20章,分為4篇。第1篇“Linux網絡開發基礎知識”,涵蓋Linux操作系統概述、Linux編程環境、文件系統概述,以及程序、進程和線程等相關知識;第2篇“Linux用戶層網絡編程”,涵蓋TCP/IP族概述、應用層網絡服務程序概述、TCP網絡編程基礎知識、服務器和客戶端信息獲取、數據的I/O及其復用、基於UDP接收和發送數據、高級套接字、套接字選項、原始套接字、服務器模型、IPv6基礎知識等;第3篇“Linux內核網絡編程”,涵蓋Linux內核層網絡架構和netfilter框架的報文處理;第4篇“綜合案例”,介紹3個網絡編程綜合案例的實現,包括一個簡單的Web服務器SHTTPD的實現、一個簡單的網絡協議棧SIP的實現和一個簡單的防火牆SIPFW的實現。 《Linux網絡編程(第3版)》內容豐富,講解深入,適合想全面、系統、深入學習Linux網絡編程的人員閱讀,尤其適合Linux網絡開發工程技術人員和基於Linux平臺的網絡程序設計人員作為參考讀物。
目錄大綱
(京東、當當目錄請直接傳目錄jpg圖)
目錄
第1篇 Linux網絡開發基礎知識
第1章 Linux操作系統概述 2
1.1 Linux的發展歷史 2
1.1.1 Linux的誕生和發展 2
1.1.2 Linux名稱的由來 2
1.2 Linux的發展要素 3
1.2.1 UNIX操作系統 3
1.2.2 Minix操作系統 3
1.2.3 POSIX標準 3
1.3 Linux與UNIX的異同 3
1.4 常見的Linux發行版本和內核版本的選擇 4
1.4.1 常見的Linux發行版本 4
1.4.2 內核版本的選擇 5
1.5 Linux系統架構 5
1.5.1 Linux內核的主要模塊 5
1.5.2 Linux的文件結構 7
1.6 GNU通用公共許可證 7
1.6.1 GPL許可證的發展歷史 8
1.6.2 GPL的自由理念 8
1.6.3 GPL的基本條款 8
1.6.4 關於GPL許可證的爭議 9
1.7 Linux軟件開發的可借鑒之處 9
1.8 小結 9
1.9 習題 10
第2章 Linux編程環境 11
2.1 編輯器 11
2.1.1 Vim簡介 11
2.1.2 使用Vim建立文件 12
2.1.3 使用Vim編輯文本 13
2.1.4 Vim的格式設置 14
2.1.5 Vim的配置文件.vimrc 15
2.1.6 使用其他編輯器 15
2.2 GCC編譯器工具集 16
2.2.1 GCC簡介 16
2.2.2 編譯程序基礎知識 16
2.2.3 將單個文件編譯成可執行文件 17
2.2.4 生成目標文件 18
2.2.5 多文件編譯 18
2.2.6 預處理 19
2.2.7 編譯成匯編語言 20
2.2.8 生成並使用靜態鏈接庫 21
2.2.9 生成動態鏈接庫 22
2.2.10 動態加載庫 24
2.2.11 GCC的常用選項 26
2.2.12 搭建編譯環境 27
2.3 Makefile文件簡介 27
2.3.1 多文件工程實例 27
2.3.2 多文件工程的編譯 29
2.3.3 Makefile的規則 31
2.3.4 在Makefile中使用變量 33
2.3.5 搜索路徑 36
2.3.6 自動推導規則 37
2.3.7 遞歸調用 37
2.3.8 Makefile中的函數 39
2.4 GDB調試工具 40
2.4.1 編譯可調試程序 40
2.4.2 使用GDB調試程序 42
2.4.3 GDB的常用命令 45
2.4.4 其他GDB程序 52
2.5 小結 52
2.6 習題 53
第3章 文件系統概述 54
3.1 Linux文件系統簡介 54
3.1.1 Linux的文件分類 54
3.1.2 創建文件系統 55
3.1.3 掛載文件系統 58
3.1.4 索引節點 59
3.1.5 普通文件 59
3.1.6 設備文件 60
3.1.7 虛擬文件系統 61
3.2 文件的通用操作方法 64
3.2.1 文件描述符 64
3.2.2 打開文件函數open() 64
3.2.3 關閉文件函數close() 66
3.2.4 讀取文件函數read() 67
3.2.5 寫文件函數write() 69
3.2.6 文件偏移函數lseek() 70
3.2.7 獲得文件狀態 73
3.2.8 文件空間映射函數mmap()和munmap() 74
3.2.9 文件屬性函數fcntl() 77
3.2.10 文件輸入/輸出控制函數ioctl() 81
3.3 socket文件類型 82
3.4 小結 82
3.5 習題 82
第4章 程序、進程和線程 84
4.1 程序、進程和線程的概念 84
4.1.1 程序和進程的區別 84
4.1.2 Linux環境中的進程 84
4.1.3 進程和線程 85
4.2 進程產生的方式 85
4.2.1 進程號 86
4.2.2 fork()函數 86
4.2.3 system()函數 87
4.2.4 exec()族函數 88
4.2.5 所有用戶態進程的產生進程systemd 89
4.3 進程間通信和同步 90
4.3.1 半雙工管道 90
4.3.2 命名管道 95
4.3.3 消息隊列 96
4.3.4 消息隊列實例 100
4.3.5 信號量 103
4.3.6 共享內存 107
4.3.7 信號 110
4.4 Linux線程 111
4.4.1 多線程編程實例 112
4.4.2 線程創建函數pthread_create() 113
4.4.3 線程結束函數pthread_join()和pthread_exit() 114
4.4.4 線程的屬性 115
4.4.5 線程間的互斥 116
4.4.6 線程的信號量函數 118
4.5 小結 120
4.6 習題 121
第2篇 Linux用戶層網絡編程
第5章 TCP/IP族概述 124
5.1 OSI網絡分層簡介 124
5.1.1 OSI網絡分層結構 124
5.1.2 OSI模型的7層結構 125
5.1.3 OSI模型的數據傳輸 125
5.2 TCP/IP棧簡介 126
5.2.1 TCP/IP棧參考模型 126
5.2.2 主機到網絡層協議 128
5.2.3 IP簡介 129
5.2.4 因特網控制報文協議 131
5.2.5 傳輸控制協議 135
5.2.6 用戶數據報文協議 138
5.2.7 地址解析協議 140
5.3 IP地址分類與TCP/UDP埠 142
5.3.1 因特網中的IP地址分類 142
5.3.2 子網掩碼 144
5.3.3 IP地址的配置 145
5.3.4 埠 146
5.4 主機字節序和網絡字節序 146
5.4.1 字節序的含義 147
5.4.2 網絡字節序的轉換 147
5.5 小結 149
5.6 習題 149
第6章 應用層網絡服務程序概述 151
6.1 HTTP及其服務 151
6.1.1 HTTP簡介 151
6.1.2 HTTP實現的基本通信過程 151
6.2 FTP及其服務 153
6.2.1 FTP簡介 153
6.2.2 FTP的工作模式 154
6.2.3 FTP的傳輸方式 155
6.2.4 一個簡單的FTP下載過程 155
6.2.5 常用的FTP工具 156
6.3 TELNET協議及其服務 156
6.3.1 遠程登錄簡介 156
6.3.2 使用TELNET協議進行遠程登錄 156
6.3.3 TELNET協議簡介 157
6.4 NFS協議及其服務 158
6.4.1 安裝NFS服務器和客戶端 158
6.4.2 服務器端的設定 158
6.4.3 客戶端操作 158
6.4.4 showmount命令 159
6.5 自定義網絡服務 159
6.5.1 xinetd簡介 159
6.5.2 xinetd配置方式 159
6.5.3 自定義網絡服務 161
6.6 小結 162
6.7 習題 162
第7章 TCP網絡編程基礎知識 163
7.1 套接字編程基礎知識 163
7.1.1 套接字地址結構 163
7.1.2 用戶層和內核的交互過程 164
7.2 TCP網絡編程流程 165
7.2.1 TCP網絡編程架構 165
7.2.2 創建網絡插口函數socket() 167
7.2.3 綁定一個地址埠 169
7.2.4 監聽本地埠函數listen() 172
7.2.5 接收一個網絡請求函數accept() 175
7.2.6 連接目標網絡服務器函數connect() 178
7.2.7 寫入數據函數write() 179
7.2.8 讀取數據函數read() 180
7.2.9 關閉套接字函數shutdown() 180
7.3 服務器/客戶端實例 180
7.3.1 功能描述 181
7.3.2 服務器網絡程序 181
7.3.3 服務器端和客戶端的連接 183
7.3.4 客戶端網絡程序 183
7.3.5 客戶端讀取和顯示字符串 184
7.3.6 編譯運行程序 184
7.4 截取信號實例 185
7.4.1 信號處理 185
7.4.2 SIGPIPE信號 186
7.4.3 SIGINT信號 186
7.5 小結 186
7.6 習題 187
第8章 服務器和客戶端信息獲取 188
8.1 字節序 188
8.1.1 大端字節序和小端字節序 188
8.1.2 字節序轉換函數 190
8.1.3 字節序轉換實例 192
8.2 字符串IP地址和二進制IP地址的轉換 194
8.2.1 inet_xxx()函數 195
8.2.2 inet_pton()和inet_ntop()函數 197
8.2.3 地址轉換實例 197
8.2.4 inet_pton()和inet_ntop()函數實例 200
8.3 套接字描述符判定函數issockettype() 200
8.3.1 issockettype()函數 201
8.3.2 main()函數 201
8.4 IP地址與域名的相互轉換 201
8.4.1 DNS原理 202
8.4.2 獲取主機信息的函數 203
8.4.3 通過主機名獲取主機信息實例 205
8.4.4 gethostbyname()函數不可重入實例 206
8.5 協議名稱處理函數 208
8.5.1 xxxprotoxxx()函數 208
8.5.2 使用協議族函數實例 209
8.6 小結 212
8.7 習題 213
第9章 數據的I/O及其復用 214
9.1 I/O函數 214
9.1.1 使用recv()函數接收數據 214
9.1.2 使用send()函數發送數據 215
9.1.3 使用readv()函數接收數據 215
9.1.4 使用writev()函數發送數據 216
9.1.5 使用recvmsg()函數接收數據 216
9.1.6 使用sendmsg()函數發送數據 218
9.1.7 I/O函數的比較 220
9.2 I/O函數使用實例 220
9.2.1 客戶端的處理流程 220
9.2.2 服務器端的處理流程 222
9.2.3 recv()和send()函數 223
9.2.4 readv()和write()函數 225
9.2.5 recvmsg()和sendmsg()函數 227
9.3 I/O模型 230
9.3.1 阻塞I/O模型 230
9.3.2 非阻塞I/O模型 231
9.3.3 I/O復用模型 231
9.3.4 信號驅動I/O模型 231
9.3.5 異步I/O模型 232
9.4 select()和pselect()函數 232
9.4.1 select()函數 233
9.4.2 pselect()函數 234
9.5 poll()和ppoll()函數 236
9.5.1 poll()函數 236
9.5.2 ppoll()函數 237
9.6 非阻塞編程 237
9.6.1 非阻塞方式程序設計簡介 238
9.6.2 非阻塞程序設計實例 238
9.7 小結 239
9.8 習題 239
第10章 基於UDP接收和發送數據 241
10.1 UDP程序設計簡介 241
10.1.1 UDP編程框架 241
10.1.2 UDP服務器端編程框架 242
10.1.3 UDP客戶端編程框架 243
10.2 UDP程序設計的常用函數 243
10.2.1 建立套接字函數socket()和綁定套接字函數bind() 243
10.2.2 接收數據函數recvfrom()和recv() 244
10.2.3 發送數據函數sendto()和send() 247
10.3 UDP接收和發送數據實例 251
10.3.1 UDP服務器端 251
10.3.2 UDP服務器端數據處理 252
10.3.3 UDP客戶端 252
10.3.4 UDP客戶端數據處理 253
10.3.5 測試UDP程序 253
10.4 UDP程序設計的常見問題 253
10.4.1 UDP報文丟失數據 254
10.4.2 UDP數據發送亂序 256
10.4.3 在UDP中使用connect()函數的副作用 257
10.4.4 UDP缺乏流量控制 258
10.4.5 UDP的外出網絡接口 260
10.4.6 UDP的數據報文截斷 261
10.5 小結 262
10.6 習題 262
第11章 高級套接字 263
11.1 UNIX域函數 263
11.1.1 UNIX域函數的地址結構 263
11.1.2 套接字函數 263
11.1.3 使用UNIX域函數進行套接字編程 264
11.1.4 傳遞文件描述符 266
11.1.5 socketpair()函數 266
11.1.6 傳遞文件描述符實例 267
11.2 廣播 271
11.2.1 廣播的IP地址 271
11.2.2 廣播與單播比較 272
11.2.3 廣播實例 274
11.3 多播 279
11.3.1 多播的概念 279
11.3.2 廣域網的多播 279
11.3.3 多播編程 279
11.3.4 內核中的多播 281
11.3.5 多播服務器端實例 285
11.3.6 多播客戶端實例 286
11.4 數據鏈路層訪問 287
11.4.1 SOCK_PACKET類型 287
11.4.2 設置套接口捕獲鏈路幀的編程方法 288
11.4.3 從套接口讀取鏈路幀的編程方法 289
11.4.4 定位IP報頭的編程方法 290
11.4.5 定位TCP報頭的編程方法 291
11.4.6 定位UDP報頭的編程方法 292
11.4.7 定位應用層報文數據的編程方法 293
11.4.8 使用SOCK_PACKET編寫ARP請求程序實例 294
11.5 小結 297
11.6 習題 297
第12章 套接字選項 299
12.1 獲取和設置套接字選項 299
12.1.1 getsockopt()和setsocketopt()函數 299
12.1.2 套接字選項 300
12.1.3 套接字選項的簡單示例 300
12.2 SOL_SOCKET協議族選項 303
12.2.1 廣播選項SO_BROADCAST 304
12.2.2 調試選項SO_DEBUG 304
12.2.3 不經過路由選項SO_DONTROUTE 304
12.2.4 錯誤選項SO_ERROR 304
12.2.5 保持連接選項SO_KEEPALIVE 305
12.2.6 緩沖區處理方式選項SO_LINGER 306
12.2.7 帶外數據處理方式選項SO_OOBINLINE 308
12.2.8 緩沖區大小選項SO_RCVBUF和SO_SNDBUF 309
12.2.9 緩沖區下限選項SO_RCVLOWAT和SO_SNDLOWAT 309
12.2.10 收發超時選項SO_RCVTIMEO和SO_SNDTIMEO 309
12.2.11 地址重用選項SO_REUSERADDR 310
12.2.12 埠獨占選項SO_EXCLUSIVEADDRUSE 310
12.2.13 套接字類型選項SO_TYPE 310
12.2.14 是否與BSD套接字兼容選項SO_BSDCOMPAT 310
12.2.15 套接字網絡接口綁定選項SO_BINDTODEVICE 311
12.2.16 套接字優先級選項SO_PRIORITY 312
12.3 IPPROTO_IP選項 312
12.3.1 IP_HDRINCL選項 312
12.3.2 IP_OPTIONS選項 312
12.3.3 IP_TOS選項 312
12.3.4 IP_TTL選項 313
12.4 IPPROTO_TCP選項 313
12.4.1 TCP_KEEPALIVE選項 313
12.4.2 TCP_MAXRT選項 313
12.4.3 TCP_MAXSEG選項 314
12.4.4 TCP_NODELAY和TCP_CORK選項 314
12.5 套接字選項使用實例 316
12.5.1 設置和獲取緩沖區大小 316
12.5.2 獲取套接字的類型 320
12.5.3 套接字選項綜合實例 321
12.6 ioctl()函數 325
12.6.1 ioctl()函數的選項 325
12.6.2 ioctl()函數的I/O請求 326
12.6.3 ioctl()函數的文件請求 328
12.6.4 ioctl()函數的網絡接口請求 328
12.6.5 使用ioctl()函數對ARP高速緩存進行操作 335
12.6.6 使用ioctl()函數發送路由表請求 337
12.7 fcntl()函數 337
12.7.1 fcntl()函數的命令選項 337
12.7.2 使用fcntl()函數修改套接字非阻塞屬性 337
12.7.3 使用fcntl()函數設置信號屬主 338
12.8 小結 338
12.9 習題 338
第13章 原始套接字 340
13.1 原始套接字概述 340
13.2 創建原始套接字 341
13.2.1 SOCK_RAW選項 341
13.2.2 IP_HDRINCL套接字選項 342
13.2.3 不需要bind()函數 342
13.3 使用原始套接字發送報文 342
13.4 使用原始套接字接收報文 343
13.5 原始套接字報文處理的結構 343
13.5.1 IP的頭部結構 343
13.5.2 ICMP的頭部結構 344
13.5.3 UDP的頭部結構 347
13.5.4 TCP的頭部結構 348
13.6 ping命令使用實例 350
13.6.1 協議格式 350
13.6.2 校驗和函數 351
13.6.3 設置ICMP發送報文的頭部 352
13.6.4 剝離ICMP接收報文的頭部 353
13.6.5 計算時間差 354
13.6.6 發送報文 355
13.6.7 接收報文 356
13.6.8 主函數實現過程 357
13.6.9 主函數main() 359
13.6.10 編譯測試 362
13.7 洪水攻擊 362
13.8 ICMP洪水攻擊 362
13.8.1 ICMP洪水攻擊的原理 362
13.8.2 ICMP洪水攻擊實例 364
13.9 UDP洪水攻擊 367
13.10 SYN洪水攻擊 370
13.10.1 SYN洪水攻擊的原理 370
13.10.2 SYN洪水攻擊實例 371
13.11 小結 374
13.12 習題 374
第14章 服務器模型 376
14.1 循環服務器 376
14.1.1 UDP循環服務器 376
14.1.2 TCP循環服務器 378
14.2 並發服務器 381
14.2.1 簡單的並發服務器模型 381
14.2.2 UDP並發服務器 382
14.2.3 TCP並發服務器 384
14.3 TCP的高級並發服務器模型 387
14.3.1 單客戶端單進程統一接收請求 387
14.3.2 單客戶端單線程統一接收請求 390
14.3.3 單客戶端單線程獨自接收請求 392
14.4 I/O復用循環服務器 395
14.4.1 I/O復用循環服務器模型簡介 395
14.4.2 I/O復用循環服務器模型實例 396
14.5 小結 400
14.6 習題 400
第15章 IPv6基礎知識 402
15.1 IPv4的缺陷 402
15.2 IPv6的特點 403
15.3 IPv6的地址 403
15.3.1 IPv6的單播地址 404
15.3.2 可聚集全球單播地址 404
15.3.3 本地單播地址 405
15.3.4 兼容性地址 405
15.3.5 IPv6的多播地址 406
15.3.6 IPv6的任播地址 407
15.3.7 主機的多個IPv6地址 407
15.4 IPv6的頭部 407
15.4.1 IPv6的頭部結構 407
15.4.2 IPv6的頭部結構與IPv4的頭部結構對比 408
15.4.3 IPv6的TCP頭部結構 409
15.4.4 IPv6的UDP頭部結構 409
15.4.5 IPv6的ICMP頭部結構 409
15.5 IPv6運行環境 410
15.5.1 加載IPv6模塊 411
15.5.2 查看是否支持IPv6 411
15.6 IPv6的結構定義 412
15.6.1 IPv6的地址族和協議族 412
15.6.2 套接字地址結構 412
15.6.3 地址兼容考慮 413
15.6.4 IPv6的通用地址 413
15.7 IPv6的套接字函數 414
15.7.1 socket()函數 414
15.7.2 沒有改變的函數 414
15.7.3 改變的函數 415
15.8 IPv6的套接字選項與控制命令 415
15.8.1 IPv6的套接字選項 415
15.8.2 單播跳限IPV6_UNICAST_HOPS 416
15.8.3 發送和接收多播包 416
15.8.4 在IPv6中獲得時間戳的ioctl命令 417
15.9 IPv6的庫函數 417
15.9.1 地址轉換函數的差異 417
15.9.2 域名解析函數的差異 417
15.9.3 測試宏 419
15.10 IPv6編程實例 419
15.10.1 服務器程序 419
15.10.2 客戶端程序 421
15.10.3 編譯程序 422
15.11 小結 423
15.12 習題 423
第3篇 Linux內核網絡編程
第16章 Linux內核層網絡架構 426
16.1 Linux網絡協議棧概述 426
16.1.1 代碼目錄分佈 426
16.1.2 網絡數據在內核中的處理過程 427
16.1.3 修改內核層的網絡數據 429
16.1.4 sk_buff結構 429
16.1.5 網絡協議數據結構inet_protosw 434
16.2 軟中斷CPU報文隊列及其處理 435
16.2.1 軟中斷簡介 435
16.2.2 網絡收發處理軟中斷的實現機制 436
16.3 如何在內核中接收和發送socket數據 437
16.3.1 初始化函數socket() 437
16.3.2 接收網絡數據函數recv() 437
16.3.3 發送網絡數據函數send() 438
16.4 小結 439
16.5 習題 439
第17章 netfilter框架的報文處理 440
17.1 netfilter框架概述 440
17.1.1 netfilter框架簡介 440
17.1.2 在IPv4棧上實現netfilter框架 440
17.1.3 netfilter框架的檢查 441
17.1.4 netfilter框架的規則 442
17.2 iptables和netfilter 442
17.2.1 iptables簡介 442
17.2.2 iptables的表和鏈 443
17.2.3 使用iptables設置過濾規則 444
17.3 內核模塊編程 446
17.3.1 內核層的Hello World程序 446
17.3.2 內核模塊的基本架構 448
17.3.3 內核模塊的加載和卸載過程 450
17.3.4 內核模塊的初始化和清理函數 450
17.3.5 內核模塊的初始化和清理過程的容錯處理 451
17.3.6 編譯內核模塊所需的Makefile 452
17.4 5個鉤子 453
17.4.1 netfilter框架的5個鉤子 453
17.4.2 NF_HOOK()宏函數 454
17.4.3 鉤子的處理規則 454
17.5 註冊和註銷鉤子 455
17.5.1 nf_hook_ops結構 455
17.5.2 註冊鉤子 455
17.5.3 註銷鉤子 456
17.5.4 註冊和註銷函數 456
17.6 鉤子處理實例 457
17.6.1 功能描述 457
17.6.2 需求分析 458
17.6.3 ping回顯屏蔽 458
17.6.4 禁止向目的IP地址發送數據 458
17.6.5 埠關閉 458
17.6.6 動態配置 459
17.6.7 可加載內核代碼 460
17.6.8 應用層測試代碼 467
17.6.9 編譯和測試 467
17.7 多個鉤子的優先級設置 467
17.8 校驗和問題 468
17.9 小結 469
17.10 習題 469
第4篇 綜合案例
第18章 一個簡單的Web服務器SHTTPD的實現 472
18.1 SHTTPD的需求分析 472
18.1.1 啟動參數可動態配置 473
18.1.2 多客戶端支持 475
18.1.3 支持的方法 475
18.1.4 支持的HTTP版本 476
18.1.5 支持的頭域 476
18.1.6 URI定位 476
18.1.7 支持的CGI 477
18.1.8 錯誤代碼 478
18.2 SHTTPD的模塊分析和設計 478
18.2.1 主函數 478
18.2.2 命令行解析模塊 479
18.2.3 文件配置解析模塊 481
18.2.4 多客戶端支持模塊 481
18.2.5 頭部解析模塊 483
18.2.6 URI解析模塊 484
18.2.7 請求方法解析模塊 484
18.2.8 支持的CGI模塊 485
18.2.9 錯誤處理模塊 487
18.3 SHTTPD各模塊的實現 489
18.3.1 命令行解析模塊的實現 489
18.3.2 文件配置解析模塊的實現 491
18.3.3 多客戶端支持模塊的實現 493
18.3.4 URI解析模塊的實現 496
18.3.5 請求方法解析模塊的實現 497
18.3.6 響應方法模塊的實現 498
18.3.7 CGI模塊的實現 501
18.3.8 支持的HTTP版本的實現 504
18.3.9 支持的內容類型模塊的實現 504
18.3.10 錯誤處理模塊的實現 506
18.3.11 返回目錄文件列表模塊的實現 508
18.3.12 主函數的實現 510
18.4 程序的編譯和測試 511
18.4.1 建立源文件 511
18.4.2 製作Makefile和執行文件 511
18.4.3 使用不同的瀏覽器測試服務器程序 512
18.5 小結 512
18.6 習題 513
第19章 一個簡單的網絡協議棧SIP的實現 514
19.1 功能描述 514
19.1.1 基本功能描述 514
19.1.2 分層功能描述 515
19.1.3 用戶接口功能描述 515
19.2 基本架構 516
19.3 SIP網絡協議棧的存儲區緩存 517
19.3.1 SIP存儲緩沖結構定義 517
19.3.2 SIP存儲緩沖的處理函數 520
19.4 SIP網絡協議棧的網絡接口層 522
19.4.1 網絡接口層架構 523
19.4.2 網絡接口層的數據結構 523
19.4.3 網絡接口層的初始化函數 525
19.4.4 網絡接口層的輸入函數 526
19.4.5 網絡接口層的輸出函數 529
19.5 SIP網絡協議棧的ARP層 531
19.5.1 ARP層的架構 531
19.5.2 ARP層的數據結構 532
19.5.3 ARP層的映射表 533
19.5.4 ARP層的映射表維護函數 533
19.5.5 ARP層的網絡報文構建函數 535
19.5.6 ARP層的網絡報文收發處理函數 537
19.6 SIP網絡協議棧的IP層 539
19.6.1 IP層的架構 540
19.6.2 IP層的數據結構 540
19.6.3 IP層的輸入函數 542
19.6.4 IP層的輸出函數 546
19.6.5 IP層的分片函數 546
19.6.6 IP層的分片組裝函數 548
19.7 SIP網絡協議棧的ICMP層 551
19.7.1 ICMP層的數據結構 552
19.7.2 ICMP層的協議支持 552
19.7.3 ICMP層的輸入函數 554
19.7.4 ICMP層的回顯應答函數 555
19.8 SIP網絡協議棧的UDP層 556
19.8.1 UDP層的數據結構 556
19.8.2 UDP層的控制單元 556
19.8.3 UDP層的數據輸入函數 557
19.8.4 UDP層的數據輸出函數 558
19.8.5 UDP層的創建函數 558
19.8.6 UDP層的釋放函數 559
19.8.7 UDP層的綁定函數 559
19.8.8 UDP層的發送數據函數 560
19.8.9 UDP層的校驗和計算 561
19.9 SIP網絡協議棧的協議無關層 562
19.9.1 協議無關層的系統架構 562
19.9.2 協議無關層的函數形式 563
19.9.3 協議無關層的接收數據函數 563
19.10 SIP網絡協議棧的BSD接口層 564
19.10.1 BSD接口層的架構 565
19.10.2 BSD接口層的套接字創建函數 565
19.10.3 BSD接口層的套接字關閉函數 566
19.10.4 BSD接口層的套接字綁定函數 566
19.10.5 BSD接口層的套接字連接函數 567
19.10.6 BSD接口層的套接字接收數據函數 567
19.10.7 BSD接口層的發送數據函數 568
19.11 SIP網絡協議棧的編譯 569
19.11.1 SIP的文件結構 569
19.11.2 SIP的Makefile 569
19.11.3 SIP的編譯運行 570
19.12 小結 570
19.13 習題 571
第20章 一個簡單的防火牆SIPFW的實現 572
20.1 SIPFW防火牆功能描述 572
20.1.1 網絡數據過濾功能描述 572
20.1.2 防火牆規則設置功能描述 573
20.1.3 附加功能描述 573
20.2 SIPFW防火牆需求分析 573
20.2.1 SIPFW防火牆的條件和動作 573
20.2.2 支持的過濾類型 574
20.2.3 過濾方式 575
20.2.4 基本配置文件 576
20.2.5 命令行配置格式 576
20.2.6 防火牆規則配置文件 577
20.2.7 防火牆日誌文件 578
20.2.8 構建防火牆採用的技術方案 579
20.3 使用netlink機制進行用戶空間和內核空間的數據交互 579
20.3.1 用戶空間程序設計 580
20.3.2 內核空間的netlink API 582
20.4 使用proc實現內核空間和用戶空間通信 584
20.4.1 proc虛擬文件系統的結構 584
20.4.2 創建proc虛擬文件 584
20.4.3 刪除proc虛擬文件 585
20.5 內核空間的文件操作函數 585
20.5.1 內核空間的文件結構 585
20.5.2 內核空間的文件建立操作 586
20.5.3 內核空間的文件讀寫操作 586
20.5.4 內核空間的文件關閉操作 587
20.6 SIPFW防火牆的模塊設計和分析 587
20.6.1 總體架構 588
20.6.2 用戶命令解析模塊 590
20.6.3 用戶空間與內核空間的交互模塊 593
20.6.4 內核鏈的規則處理模塊 596
20.6.5 proc虛擬文件系統模塊 598
20.6.6 配置文件和日誌文件處理模塊 598
20.6.7 過濾模塊 600
20.7 SIPFW防火牆各模塊的實現 603
20.7.1 用戶命令解析模塊的實現 603
20.7.2 過濾規則解析模塊的實現 607
20.7.3 網絡數據攔截模塊的實現 609
20.7.4 proc虛擬文件系統模塊的實現 610
20.7.5 配置文件解析模塊的實現 612
20.7.6 內核模塊初始化和退出的實現 613
20.7.7 用戶空間處理主函數的實現 614
20.8 程序的編譯和測試 615
20.8.1 用戶程序和內核程序的Makefile 615
20.8.2 編譯並運行程序 616
20.8.3 過濾測試 616
20.9 小結 618
20.10 習題 619
Linux網絡編程(第3版)
目錄
·VI·
·IX·