注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)操作系統(tǒng)LinuxLinux網(wǎng)絡(luò)編程

Linux網(wǎng)絡(luò)編程

Linux網(wǎng)絡(luò)編程

定 價:¥79.00

作 者: 宋敬彬,孫海濱 等編著
出版社: 清華大學出版社
叢編項: Linux典藏大系
標 簽: LINUX

ISBN: 9787302207177 出版時間: 2010-01-01 包裝: 平裝
開本: 16開 頁數(shù): 690 字數(shù):  

內(nèi)容簡介

  Linux是目前最流行的開源操作系統(tǒng),網(wǎng)絡(luò)功能在Linux下占有核心的地位?!禠inux網(wǎng)絡(luò)編程》循序漸進地從應用層到Linux內(nèi)核、從基本知識點到綜合案例,向讀者介紹如何在Linux下進行網(wǎng)絡(luò)程序設(shè)計?!禠inux網(wǎng)絡(luò)編程》內(nèi)容分為4個部分:Linux程序設(shè)計基礎(chǔ)部分、Linux用戶空間網(wǎng)絡(luò)編程部分、Linux內(nèi)核網(wǎng)絡(luò)編程部分以及綜合案例部分。內(nèi)容包含Linux系統(tǒng)概述、Linux編程環(huán)境、Linux文件系統(tǒng)簡介、Linux下的進程和線程、TCP/IP協(xié)議族、應用層網(wǎng)絡(luò)服務(wù)程序、TCP編程、主機信息獲取、數(shù)據(jù)IO復用、UDP編程、高級套接字、套接字選項、原始套接字、服務(wù)器模型、IPv6、Linux內(nèi)核網(wǎng)絡(luò)部分結(jié)構(gòu)及分布、netfilter框架內(nèi)報文處理。為了方便讀者學習,《Linux網(wǎng)絡(luò)編程》最后一個部分介紹了3個綜合案例,包括應用層的Web服務(wù)器例子、簡單的應用層網(wǎng)絡(luò)協(xié)議站例子和內(nèi)核層網(wǎng)防火墻的例子?!禠inux網(wǎng)絡(luò)編程》適合廣大的Linux平臺下的網(wǎng)絡(luò)程序設(shè)計人員和大中專院校學生閱讀,尤其是有一定Linux基礎(chǔ)知識的編程技術(shù)人員。

作者簡介

  宋敬彬,海信集團國家重點實驗室高級工程師。海信數(shù)字家庭原型系統(tǒng)的主要設(shè)計及實現(xiàn)人員。有十多年的Linux編程經(jīng)驗,對Linux內(nèi)核和網(wǎng)絡(luò)協(xié)議棧十分熟悉。長期從事嵌入式Linux設(shè)備、機頂盒產(chǎn)品、IGRS設(shè)備互聯(lián)的研究和開發(fā)工作。目前主要從事數(shù)字家庭系統(tǒng)的設(shè)計和實現(xiàn)。曾經(jīng)在技術(shù)期刊上發(fā)表過多篇技術(shù)論文。曾經(jīng)參加過國家863高性能集群服務(wù)器、電子發(fā)展基金的IPv6等項目的研究和開發(fā)。孫海濱,山東科技大學信息科學與工程學院副教授。計算機應用技術(shù)專業(yè)博士、博士后。長期從事計算機應用技術(shù)的研究和教學。有多年的Linux應用和開發(fā)經(jīng)驗,對網(wǎng)絡(luò)協(xié)議有較深入的研究。目前致力于多媒體信息檢索、人工智能、空間推理、地理信息系統(tǒng)等技術(shù)的研究。曾經(jīng)在國內(nèi)外的核心刊物上發(fā)表過多篇學術(shù)論文。參與開發(fā)了多個應用軟件系統(tǒng)。參與國家863計劃項目一項。主持開發(fā)過山東科技大學“春蕾計劃”項目一項。

圖書目錄

第1篇 Linux網(wǎng)絡(luò)開發(fā)基礎(chǔ)
第1章 Linux操作系統(tǒng)概述 2
1.1 Linux發(fā)展歷史 2
1.1.1 Linux的誕生和發(fā)展 2
1.1.2 Linux名稱的由來 3
1.2 Linux的發(fā)展要素 3
1.2.1 UNIX操作系統(tǒng) 4
1.2.2 Minix操作系統(tǒng) 4
1.2.3 POSIX 標準 4
1.3 Linux與UNIX的異同 5
1.4 操作系統(tǒng)類型選擇和內(nèi)核版本的選擇 5
1.4.1 常見的不同公司發(fā)行的Linux異同 6
1.4.2 內(nèi)核版本的選擇 6
1.5 Linux的系統(tǒng)架構(gòu) 7
1.5.1 Linux內(nèi)核的主要模塊 7
1.5.2 Linux的文件結(jié)構(gòu) 9
1.6 GNU通用公共許可證 10
1.6.1 GPL許可證的歷史 10
1.6.2 GPL的自由理念 10
1.6.3 GPL的基本條款 11
1.6.4 關(guān)于GPL許可證的爭議 12
1.7 Linux軟件開發(fā)的可借鑒之處 12
1.8 小結(jié) 13
第2章 Linux編程環(huán)境 14
2.1 Linux環(huán)境下的編輯器 14
2.1.1 vim使用簡介 14
2.1.2 使用vim建立文件 15
2.1.3 使用vim編輯文本 16
2.1.4 vim的格式設(shè)置 18
2.1.5 vim配置文件.vimrc 19
2.1.6 使用其他編輯器 19
2.2 Linux下的GCC編譯器工具集 19
2.2.1 GCC簡介 19
2.2.2 編譯程序的基本知識 21
2.2.3 單個文件編譯成執(zhí)行文件 22
2.2.4 編譯生成目標文件 22
2.2.5 多文件編譯 23
2.2.6 預處理 24
2.2.7 編譯成匯編語言 24
2.2.8 生成和使用靜態(tài)鏈接庫 25
2.2.9 生成動態(tài)鏈接庫 26
2.2.10 動態(tài)加載庫 29
2.2.11 GCC常用選項 31
2.2.12 編譯環(huán)境的搭建 33
2.3 Makefile文件簡介 34
2.3.1 一個多文件的工程例子 34
2.3.2 多文件工程的編譯 36
2.3.3 Makefile的規(guī)則 37
2.3.4 Makefile中使用變量 39
2.3.5 搜索路徑 43
2.3.6 自動推導規(guī)則 44
2.3.7 遞歸make 44
2.3.8 Makefile中的函數(shù) 46
2.4 用GDB調(diào)試程序 47
2.4.1 編譯可調(diào)試程序 48
2.4.2 使用GDB調(diào)試程序 49
2.4.3 GDB常用命令 52
2.4.4 其他的GDB 59
2.5 小結(jié) 60
第3章 文件系統(tǒng)簡介 61
3.1 Linux下的文件系統(tǒng) 61
3.1.1 Linux下文件的內(nèi)涵 61
3.1.2 文件系統(tǒng)的創(chuàng)建 62
3.1.3 掛接文件系統(tǒng) 64
3.1.4 索引節(jié)點inode 65
3.1.5 普通文件 66
3.1.6 設(shè)備文件 66
3.1.7 虛擬文件系統(tǒng)VFS 68
3.2 文件的通用操作方法 72
3.2.1 文件描述符 72
3.2.2 打開創(chuàng)建文件open()、create()函數(shù) 72
3.2.3 關(guān)閉文件close()函數(shù) 76
3.2.4 讀取文件read()函數(shù) 77
3.2.5 寫文件write()函數(shù) 79
3.2.6 文件偏移lseek()函數(shù) 80
3.2.7 獲得文件狀態(tài)fstat()函數(shù) 83
3.2.8 文件空間映射mmap()函數(shù) 85
3.2.9 文件屬性fcntl()函數(shù) 88
3.2.10 文件輸入輸出控制ioctl()函數(shù) 92
3.3 socket文件類型 93
3.4 小結(jié) 93
第4章 程序、進程和線程 94
4.1 程序、進程和線程的概念 94
4.1.1 程序和進程的差別 94
4.1.2 Linux環(huán)境下的進程 95
4.1.3 進程和線程 96
4.2 進程產(chǎn)生的方式 96
4.2.1 進程號 96
4.2.2 進程復制fork() 97
4.2.3 system()方式 98
4.2.4 進程執(zhí)行exec()函數(shù)系列 99
4.2.5 所有用戶態(tài)進程的產(chǎn)生進程init 100
4.3 進程間通信和同步 101
4.3.1 半雙工管道 101
4.3.2 命名管道 107
4.3.3 消息隊列 108
4.3.4 消息隊列的一個例子 114
4.3.5 信號量 116
4.3.6 共享內(nèi)存 121
4.3.7 信號 124
4.4 Linux下的線程 127
4.4.1 多線程編程實例 127
4.4.2 Linux下線程創(chuàng)建函數(shù)pthread_create() 129
4.4.3 線程的結(jié)束函數(shù)pthread_join()和pthread_exit() 129
4.4.4 線程的屬性 130
4.4.5 線程間的互斥 132
4.4.6 線程中使用信號量 133
4.5 小結(jié) 136
第2篇 Linux用戶層網(wǎng)絡(luò)編程
第5章 TCP/IP協(xié)議族簡介 138
5.1 OSI網(wǎng)絡(luò)分層介紹 138
5.1.1 OSI網(wǎng)絡(luò)分層結(jié)構(gòu) 138
5.1.2 OSI的7層網(wǎng)絡(luò)結(jié)構(gòu) 139
5.1.3 OSI參考模型中的數(shù)據(jù)傳輸 140
5.2 TCP/IP協(xié)議棧 141
5.2.1 TCP/IP協(xié)議棧參考模型 141
5.2.2 主機到網(wǎng)絡(luò)層協(xié)議 143
5.2.3 IP協(xié)議 144
5.2.4 網(wǎng)際控制報文協(xié)議(ICMP) 146
5.2.5 傳輸控制協(xié)議(TCP) 150
5.2.6 用戶數(shù)據(jù)報文協(xié)議(UDP) 154
5.2.7 地址解析協(xié)議(ARP) 156
5.3 IP地址分類與TCP/UDP端口 158
5.3.1 因特網(wǎng)中IP地址的分類 159
5.3.2 子網(wǎng)掩碼(subnet mask address) 161
5.3.3 IP地址的配置 162
5.3.4 端口 163
5.4 主機字節(jié)序和網(wǎng)絡(luò)字節(jié)序 163
5.4.1 字節(jié)序的含義 164
5.4.2 網(wǎng)絡(luò)字節(jié)序的轉(zhuǎn)換 164
5.5 小結(jié) 166
第6章 應用層網(wǎng)絡(luò)服務(wù)程序簡介 167
6.1 HTTP協(xié)議和服務(wù) 167
6.1.1 HTTP協(xié)議概述 167
6.1.2 HTTP協(xié)議的基本過程 168
6.2 FTP協(xié)議和服務(wù) 170
6.2.1 FTP協(xié)議概述 170
6.2.2 FTP協(xié)議的工作模式 172
6.2.3 FTP協(xié)議的傳輸方式 172
6.2.4 一個簡單的FTP過程 173
6.2.5 常用的FTP工具 173
6.3 TELNET協(xié)議和服務(wù) 174
6.3.1 遠程登錄的基本概念 174
6.3.2 使用TELNET協(xié)議進行遠程登錄的工作過程 174
6.3.3 TELNET協(xié)議 174
6.4 NFS協(xié)議和服務(wù) 176
6.4.1 安裝NFS服務(wù)器和客戶端 176
6.4.2 服務(wù)器端的設(shè)定 176
6.4.3 客戶端的操作 177
6.4.4 showmount命令 177
6.5 自定義網(wǎng)絡(luò)服務(wù) 177
6.5.1 xinetd/inetd 178
6.5.2 xinetd服務(wù)配置 178
6.5.3 自定義網(wǎng)絡(luò)服務(wù) 179
6.6 小結(jié) 180
第7章 TCP網(wǎng)絡(luò)編程基礎(chǔ) 181
7.1 套接字編程基礎(chǔ)知識 181
7.1.1 套接字地址結(jié)構(gòu) 181
7.1.2 用戶層和內(nèi)核層交互過程 183
7.2 TCP網(wǎng)絡(luò)編程流程 184
7.2.1 TCP網(wǎng)絡(luò)編程架構(gòu) 184
7.2.2 創(chuàng)建網(wǎng)絡(luò)插口函數(shù)socket() 186
7.2.3 綁定一個地址端口對bind() 189
7.2.4 監(jiān)聽本地端口listen 192
7.2.5 接受一個網(wǎng)絡(luò)請求accept() 194
7.2.6 連接目標網(wǎng)絡(luò)服務(wù)器connect() 199
7.2.7 寫入數(shù)據(jù)函數(shù)write() 200
7.2.8 讀取數(shù)據(jù)函數(shù)read() 201
7.2.9 關(guān)閉套接字函數(shù)close() 201
7.3 服務(wù)器/客戶端的簡單例子 202
7.3.1 例子功能描述 202
7.3.2 服務(wù)器網(wǎng)絡(luò)程序 203
7.3.3 服務(wù)器讀取和顯示字符串 205
7.3.4 客戶端的網(wǎng)絡(luò)程序 205
7.3.5 客戶端讀取和顯示字符串 206
7.3.6 編譯運行程序 206
7.4 截取信號的例子 207
7.4.1 信號處理 207
7.4.2 信號SIGPIPE 208
7.4.3 信號SIGINT 208
7.5 小結(jié) 208
第8章 服務(wù)器和客戶端信息的獲取 210
8.1 字節(jié)序 210
8.1.1 大端字節(jié)序和小端字節(jié)序 210
8.1.2 字節(jié)序轉(zhuǎn)換函數(shù) 212
8.1.3 一個字節(jié)序轉(zhuǎn)換的例子 214
8.2 字符串IP地址和二進制IP地址的轉(zhuǎn)換 217
8.2.1 inet_xxx()函數(shù) 217
8.2.2 inet_pton()和inet_ntop()函數(shù) 219
8.2.3 使用8.2.1節(jié)地址轉(zhuǎn)換函數(shù)的例子 220
8.2.4 使用函數(shù)inet_pton()和函數(shù)inet_ntop()的例子 223
8.3 套接字描述符判定函數(shù)issockettype() 223
8.3.1 進行文件描述符判定的函數(shù)issockettype() 224
8.3.2 main()函數(shù) 224
8.4 IP地址與域名之間的相互轉(zhuǎn)換 225
8.4.1 DNS原理 225
8.4.2 獲取主機信息的函數(shù) 226
8.4.3 使用主機名獲取主機信息的例子 228
8.4.4 函數(shù)gethostbyname()不可重入的例子 230
8.5 協(xié)議名稱處理函數(shù) 232
8.5.1 xxxprotoxxx()函數(shù) 232
8.5.2 使用協(xié)議族函數(shù)的例子 233
8.6 小結(jié) 236
第9章 數(shù)據(jù)的IO和復用 237
9.1 IO函數(shù) 237
9.1.1 使用recv()函數(shù)接收數(shù)據(jù) 237
9.1.2 使用send()函數(shù)發(fā)送數(shù)據(jù) 239
9.1.3 使用readv()函數(shù)接收數(shù)據(jù) 240
9.1.4 使用writev()函數(shù)發(fā)送數(shù)據(jù) 240
9.1.5 使用recvmsg()函數(shù)接收數(shù)據(jù) 242
9.1.6 使用sendmsg()函數(shù)發(fā)送數(shù)據(jù) 244
9.1.7 IO函數(shù)的比較 246
9.2 使用IO函數(shù)的例子 246
9.2.1 客戶端處理框架的例子 246
9.2.2 服務(wù)器端程序框架 248
9.2.3 使用recv()和send()函數(shù) 249
9.2.4 使用readv()和write()函數(shù) 251
9.2.5 使用recvmsg()和sendmsg()函數(shù) 253
9.3 IO模型 256
9.3.1 阻塞IO模型 256
9.3.2 非阻塞IO模型 257
9.3.3 IO復用 257
9.3.4 信號驅(qū)動IO模型 258
9.3.5 異步IO模型 258
9.4 select()函數(shù)和pselect()函數(shù) 259
9.4.1 select()函數(shù) 259
9.4.2 pselect()函數(shù) 261
9.5 poll()函數(shù)和ppoll()函數(shù) 262
9.5.1 poll()函數(shù) 263
9.5.2 ppoll()函數(shù) 264
9.6 非阻塞編程 264
9.6.1 非阻塞方式程序設(shè)計介紹 264
9.6.2 非阻塞程序設(shè)計的例子 264
9.7 小結(jié) 266
第10章 基于UDP協(xié)議的接收和發(fā)送 267
10.1 UDP編程框架 267
10.1.1 UDP編程框圖 267
10.1.2 UDP服務(wù)器編程框架 269
10.1.3 UDP客戶端編程框架 269
10.2 UDP協(xié)議程序設(shè)計的常用函數(shù) 270
10.2.1 建立套接字socket()和綁定套接字bind() 270
10.2.2 接收數(shù)據(jù)recvfrom()/recv() 270
10.2.3 發(fā)送數(shù)據(jù)sendto()/send() 275
10.3 UDP接收和發(fā)送數(shù)據(jù)的例子 279
10.3.1 UDP服務(wù)器端 279
10.3.2 UDP服務(wù)器端數(shù)據(jù)處理 280
10.3.3 UDP客戶端 281
10.3.4 UDP客戶端數(shù)據(jù)處理 281
10.3.5 測試UDP程序 282
10.4 UDP協(xié)議程序設(shè)計中的幾個問題 282
10.4.1 UDP報文丟失數(shù)據(jù) 282
10.4.2 UDP數(shù)據(jù)發(fā)送中的亂序 284
10.4.3 UDP協(xié)議中的connect()函數(shù) 287
10.4.4 UDP缺乏流量控制 287
10.4.5 UDP協(xié)議中的外出網(wǎng)絡(luò)接口 289
10.4.6 UDP協(xié)議中的數(shù)據(jù)報文截斷 290
10.5 小結(jié) 291
第11章 高級套接字 292
11.1 UNIX域函數(shù) 292
11.1.1 UNIX域函數(shù)的地址結(jié)構(gòu) 292
11.1.2 套接字函數(shù) 293
11.1.3 使用UNIX域函數(shù)進行套接字編程 293
11.1.4 傳遞文件描述符 296
11.1.5 socketpair()函數(shù) 296
11.1.6 傳遞文件描述符的例子 297
11.2 廣播 302
11.2.1 廣播的IP地址 302
11.2.2 廣播與單播的比較 303
11.2.3 廣播的示例 304
11.3 多播 310
11.3.1 多播的概念 310
11.3.2 廣域網(wǎng)的多播 311
11.3.3 多播的編程 311
11.3.4 內(nèi)核中的多播 313
11.3.5 一個多播例子的服務(wù)器端 317
11.3.6 一個多播例子的客戶端 318
11.4 數(shù)據(jù)鏈路層訪問 319
11.4.1 SOCK_PACKET類型 319
11.4.2 設(shè)置套接口以捕獲鏈路幀的編程方法 320
11.4.3 從套接口讀取鏈路幀的編程方法 321
11.4.4 定位IP包頭的編程方法 322
11.4.5 定位TCP報頭的編程方法 323
11.4.6 定位UDP報頭的編程方法 325
11.4.7 定位應用層報文數(shù)據(jù)的編程方法 326
11.4.8 使用SOCK_PACKET編寫ARP請求程序的例子 326
11.5 小結(jié) 329
第12章 套接字選項 330
12.1 獲取和設(shè)置套接字選項getsocketopt()/setsocketopt() 330
12.1.1 getsockopt()函數(shù)和setsocketopt()函數(shù)的介紹 330
12.1.2 套接字選項 331
12.1.3 套接字選項簡單示例 332
12.2 SOL_SOCKET協(xié)議族選項 336
12.2.1 SO_BROADCAST廣播選項 336
12.2.2 SO_DEBUG調(diào)試選項 337
12.2.3 SO_DONTROUTE不經(jīng)過路由選項 337
12.2.4 SO_ERROR錯誤選項 338
12.2.5 SO_KEEPALIVE保持連接選項 338
12.2.6 SO_LINGER緩沖區(qū)處理方式選項 339
12.2.7 SO_OOBINLINE帶外數(shù)據(jù)處理方式選項 342
12.2.8 SO_RCVBUF和SO_SNDBUF緩沖區(qū)大小選項 342
12.2.9 SO_RCVLOWAT和SO_SNDLOWAT緩沖區(qū)下限選項 343
12.2.10 SO_RCVTIMEO和SO_SNDTIMEO收發(fā)超時選項 343
12.2.11 SO_REUSERADDR地址重用選項 344
12.2.12 SO_EXCLUSIVEADDRUSE端口獨占選項 344
12.2.13 SO_TYPE套接字類型選項 345
12.2.14 SO_BSDCOMPAT與BSD套接字兼容選項 345
12.2.15 SO_BINDTODEVICE套接字網(wǎng)絡(luò)接口綁定選項 345
12.2.16 SO_PRIORITY套接字優(yōu)先級選項 346
12.3 IPPROTO_IP選項 347
12.3.1 IP_HDRINCL選項 347
12.3.2 IP_OPTNIOS選項 347
12.3.3 IP_TOS選項 347
12.3.4 IP_TTL選項 347
12.4 IPPROTO_TCP選項 348
12.4.1 TCP_KEEPALIVE選項 348
12.4.2 TCP_MAXRT選項 348
12.4.3 TCP_MAXSEG選項 349
12.4.4 TCP_NODELAY和TCP_CORK選項 349
12.5 使用套接字選項 351
12.5.1 設(shè)置和獲取緩沖區(qū)大小 351
12.5.2 獲取套接字類型的例子 355
12.5.3 使用套接字選項的綜合例子 356
12.6 ioctl()函數(shù) 361
12.6.1 ioctl()函數(shù)的命令選項 361
12.6.2 ioctl()函數(shù)的IO請求 363
12.6.3 ioctl()函數(shù)的文件請求 365
12.6.4 ioctl()函數(shù)的網(wǎng)絡(luò)接口請求 365
12.6.5 使用ioctl()函數(shù)對ARP高速緩存操作 372
12.6.6 使用ioctl()函數(shù)發(fā)送路由表請求 374
12.7 fcntl()函數(shù) 374
12.7.1 fcntl()函數(shù)的選項 375
12.7.2 使用fcntl()函數(shù)修改套接字非阻塞屬性 375
12.7.3 使用fcntl()函數(shù)設(shè)置信號屬主 376
12.8 小結(jié) 376
第13章 原始套接字 377
13.1 概述 377
13.2 原始套接字的創(chuàng)建 379
13.2.1 SOCK_RAW選項 379
13.2.2 IP_HDRINCL套接字選項 379
13.2.3 不需要bind()函數(shù) 380
13.3 原始套接字發(fā)送報文 380
13.4 原始套接字接收報文 380
13.5 原始套接字報文處理時的結(jié)構(gòu) 381
13.5.1 IP頭部的結(jié)構(gòu) 381
13.5.2 ICMP頭部結(jié)構(gòu) 382
13.5.3 UDP頭部結(jié)構(gòu) 384
13.5.4 TCP頭部結(jié)構(gòu) 386
13.6 ping的例子 387
13.6.1 協(xié)議格式 388
13.6.2 校驗和函數(shù) 389
13.6.3 設(shè)置ICMP發(fā)送報文的頭部 390
13.6.4 剝離ICMP接受報文的頭部 391
13.6.5 計算時間差 392
13.6.6 發(fā)送報文 393
13.6.7 接收報文 394
13.6.8 主函數(shù)過程 395
13.6.9 主函數(shù)main() 397
13.6.10 編譯測試 400
13.7 洪水攻擊 400
13.8 ICMP洪水攻擊 401
13.8.1 ICMP洪水攻擊的原理 401
13.8.2 ICMP洪水攻擊的例子 401
13.9 UDP洪水攻擊 405
13.10 SYN洪水攻擊 409
13.10.1 SYN洪水攻擊的原理 409
13.10.2 SYN洪水攻擊的例子 409
13.11 小結(jié) 413
第14章 服務(wù)器模型選擇 414
14.1 循環(huán)服務(wù)器 414
14.1.1 UDP循環(huán)服務(wù)器 414
14.1.2 TCP循環(huán)服務(wù)器 417
14.2 簡單并發(fā)服務(wù)器 420
14.2.1 并發(fā)服務(wù)器的模型 420
14.2.2 UDP并發(fā)服務(wù)器 420
14.2.3 TCP并發(fā)服務(wù)器 423
14.3 TCP的高級并發(fā)服務(wù)器模型 426
14.3.1 單客戶端單進程,統(tǒng)一accept() 426
14.3.2 單客戶端單線程,統(tǒng)一accept() 429
14.3.3 單客戶端單線程,各線程獨自accept(),使用互斥鎖 431
14.4 IO復用循環(huán)服務(wù)器 435
14.4.1 IO復用循環(huán)服務(wù)器模型介紹 435
14.4.2 IO復用循環(huán)服務(wù)器模型的例子 436
14.5 小結(jié) 440
第15章 IPv6簡介 441
15.1 IPv4的缺陷 441
15.2 IPv6的特點 442
15.3 IPv6的地址 443
15.3.1 IPv6的單播地址 443
15.3.2 可聚集全球單播地址 443
15.3.3 本地使用單播地址 444
15.3.4 兼容性地址 445
15.3.5 IPv6多播地址 446
15.3.6 IPv6任播地址 446
15.3.7 主機的多個IPv6地址 447
15.4 IPv6的頭部 447
15.4.1 IPv6頭部格式 447
15.4.2 與IPv4頭部的對比 448
15.4.3 IPv6的TCP頭部 449
15.4.4 IPv6的UDP頭部 449
15.4.5 IPv6的ICMP頭部 449
15.5 IPv6運行環(huán)境 451
15.5.1 加載IPv6模塊 451
15.5.2 查看是否支持IPv6 452
15.6 IPv6的結(jié)構(gòu)定義 453
15.6.1 IPv6的地址族和協(xié)議族 453
15.6.2 套接字地址結(jié)構(gòu) 453
15.6.3 地址兼容考慮 455
15.6.4 IPv6通用地址 455
15.7 IPv6的套接字函數(shù) 456
15.7.1 socket()函數(shù) 456
15.7.2 沒有發(fā)生改變的函數(shù) 456
15.7.3 發(fā)生改變的函數(shù) 457
15.8 IPv6的套接字選項 457
15.8.1 IPv6的套接字選項 457
15.8.2 單播跳限IPV6_UNICAST_HOPS 459
15.8.3 發(fā)送和接收多播包 459
15.8.4 IPv6中獲得時間戳的ioctl命令 460
15.9 IPv6的庫函數(shù) 460
15.9.1 地址轉(zhuǎn)換函數(shù)的差異 460
15.9.2 域名解析函數(shù)的差異 461
15.9.3 測試宏 463
15.10 IPv6的編程的一個簡單例子 463
15.10.1 服務(wù)器程序 464
15.10.2 客戶端程序 465
15.10.3 編譯調(diào)試 467
15.11 小結(jié) 467
第3篇 Linux內(nèi)核網(wǎng)絡(luò)編程
第16章 Linux內(nèi)核中網(wǎng)絡(luò)部分結(jié)構(gòu)以及分布 470
16.1 概述 470
16.1.1 代碼目錄分布 470
16.1.2 內(nèi)核中網(wǎng)絡(luò)部分流程簡介 472
16.1.3 系統(tǒng)提供修改網(wǎng)絡(luò)流程點 474
16.1.4 sk_buff結(jié)構(gòu) 475
16.1.5 網(wǎng)絡(luò)協(xié)議數(shù)據(jù)結(jié)構(gòu)inet_protosw 478
16.2 軟中斷CPU報文隊列及其處理 479
16.2.1 Linux內(nèi)核網(wǎng)絡(luò)協(xié)議層的層間傳遞手段——軟中斷 479
16.2.2 網(wǎng)絡(luò)收發(fā)處理軟中斷的實現(xiàn)機制 481
16.3 socket數(shù)據(jù)如何在內(nèi)核中接收和發(fā)送 482
16.3.1 socket()的初始化 482
16.3.2 接收網(wǎng)絡(luò)數(shù)據(jù)recv() 482
16.3.3 發(fā)送網(wǎng)絡(luò)數(shù)據(jù)send() 483
16.4 小結(jié) 484
第17章 netfilter框架內(nèi)報文處理 485
17.1 netfilter 485
17.1.1 netfilter簡介 485
17.1.2 netfilter框架 486
17.1.3 netfilter檢查時的表格 487
17.1.4 netfilter的規(guī)則 487
17.2 iptables和netfilter 488
17.2.1 iptables簡介 488
17.2.2 iptables的表和鏈 488
17.2.3 使用iptables設(shè)置過濾規(guī)則 489
17.3 內(nèi)核模塊編程 492
17.3.1 內(nèi)核“Hello,World!”程序 492
17.3.2 內(nèi)核模塊的基本架構(gòu) 494
17.3.3 內(nèi)核模塊加載和卸載過程 496
17.3.4 內(nèi)核模塊初始化和清理函數(shù) 497
17.3.5 內(nèi)核模塊初始化和清理過程的容錯處理 497
17.3.6 內(nèi)核模塊編譯所需的Makefile 498
17.4 5個鉤子點 499
17.4.1 netfilter的5個鉤子點 499
17.4.2 NF_HOOK宏 500
17.4.3 鉤子的處理規(guī)則 501
17.5 注冊/注銷鉤子 502
17.5.1 結(jié)構(gòu)nf_hook_ops 502
17.5.2 注冊鉤子 503
17.5.3 注銷鉤子 504
17.5.4 注冊注銷函數(shù) 504
17.6 鉤子的簡單處理例子 505
17.6.1 功能描述 505
17.6.2 需求分析 506
17.6.3 ping回顯屏蔽實現(xiàn) 506
17.6.4 禁止向目的IP地址發(fā)送數(shù)據(jù)的實現(xiàn) 506
17.6.5 端口關(guān)閉實現(xiàn) 506
17.6.6 動態(tài)配置實現(xiàn) 508
17.6.7 可加載內(nèi)核實現(xiàn)代碼 509
17.6.8 應用層測試代碼實現(xiàn) 516
17.6.9 編譯運行 516
17.7 一點多個鉤子的優(yōu)先級 517
17.8 校驗和問題 518
17.9 小結(jié) 518
第4篇 綜 合 案 例
第18章 一個簡單Web服務(wù)器的例子SHTTPD 522
18.1 SHTTPD的需求分析 522
18.1.1 SHTTPD啟動參數(shù)可動態(tài)配置的需求 523
18.1.2 SHTTPD的多客戶端支持的需求 524
18.1.3 SHTTPD支持方法的需求 525
18.1.4 SHTTPD支持的HTTP協(xié)議版本的需求 526
18.1.5 SHTTPD支持頭部的需求 527
18.1.6 SHTTPD定位URI的需求 527
18.1.7 SHTTPD支持CGI的需求 528
18.1.8 SHTTPD錯誤代碼的需求 529
18.2 SHTTPD的模塊分析和設(shè)計 530
18.2.1 SHTTPD的主函數(shù) 530
18.2.2 SHTTPD命令行解析的分析設(shè)計 531
18.2.3 SHTTPD配置文件解析的分析設(shè)計 532
18.2.4 SHTTPD的多客戶端支持的分析設(shè)計 534
18.2.5 SHTTPD頭部解析的分析設(shè)計 536
18.2.6 SHTTPD對URI的分析設(shè)計 537
18.2.7 SHTTPD支持方法的分析設(shè)計 537
18.2.8 SHTTPD支持CGI的分析設(shè)計 538
18.2.9 SHTTPD錯誤處理的分析設(shè)計 540
18.3 SHTTPD各模塊的實現(xiàn) 542
18.3.1 SHTTPD命令行解析的實現(xiàn) 543
18.3.2 SHTTPD文件配置解析的實現(xiàn) 545
18.3.3 SHTTPD的多客戶端支持的實現(xiàn) 547
18.3.4 SHTTPD所請求URI解析的實現(xiàn) 551
18.3.5 SHTTPD方法解析的實現(xiàn) 552
18.3.6 SHTTPD響應方法的實現(xiàn) 552
18.3.7 SHTTPD支持CGI的實現(xiàn) 556
18.3.8 SHTTPD支持HTTP協(xié)議版本的實現(xiàn) 559
18.3.9 SHTTPD內(nèi)容類型的實現(xiàn) 559
18.3.10 SHTTPD錯誤處理的實現(xiàn) 561
18.3.11 SHTTPD生成目錄下文件列表文件的實現(xiàn) 563
18.3.12 SHTTPD主函數(shù)的實現(xiàn) 565
18.4 SHTTPD的編譯、調(diào)試和測試 566
18.4.1 建立源文件 566
18.4.2 制作Makefile 566
18.4.3 制作執(zhí)行文件 567
18.4.4 使用不同的瀏覽器測試服務(wù)器程序 567
18.5 小結(jié) 568
第19章 一個簡單網(wǎng)絡(luò)協(xié)議棧的例子SIP 569
19.1 SIP網(wǎng)絡(luò)協(xié)議棧的功能描述 569
19.1.1 SIP網(wǎng)絡(luò)協(xié)議棧的基本功能描述 570
19.1.2 SIP網(wǎng)絡(luò)協(xié)議棧的分層功能描述 570
19.1.3 SIP網(wǎng)絡(luò)協(xié)議棧的用戶接口功能描述 571
19.2 SIP網(wǎng)絡(luò)協(xié)議棧的架構(gòu) 571
19.3 SIP網(wǎng)絡(luò)協(xié)議棧的存儲區(qū)緩存 572
19.3.1 SIP存儲緩沖的結(jié)構(gòu)定義 573
19.3.2 SIP存儲緩沖的處理函數(shù) 577
19.4 SIP網(wǎng)絡(luò)協(xié)議棧的網(wǎng)絡(luò)接口層 579
19.4.1 SIP網(wǎng)絡(luò)接口層的架構(gòu) 579
19.4.2 SIP網(wǎng)絡(luò)接口層的數(shù)據(jù)結(jié)構(gòu) 580
19.4.3 SIP網(wǎng)絡(luò)接口層的初始化函數(shù) 581
19.4.4 SIP網(wǎng)絡(luò)接口層的輸入函數(shù) 583
19.4.5 SIP網(wǎng)絡(luò)接口層的輸出函數(shù) 586
19.5 SIP網(wǎng)絡(luò)協(xié)議棧的ARP層 588
19.5.1 SIP地址解析層的架構(gòu) 588
19.5.2 SIP地址解析層的數(shù)據(jù)結(jié)構(gòu) 588
19.5.3 SIP地址解析層的映射表 590
19.5.4 SIP地址解析層的ARP映射表維護函數(shù) 591
19.5.5 SIP地址解析層的ARP網(wǎng)絡(luò)報文構(gòu)建函數(shù) 593
19.5.6 SIP地址解析層的ARP網(wǎng)絡(luò)報文收發(fā)處理函數(shù) 595
19.6 SIP網(wǎng)絡(luò)協(xié)議棧的IP層 598
19.6.1 SIP網(wǎng)際協(xié)議層的架構(gòu) 598
19.6.2 SIP網(wǎng)際協(xié)議層的數(shù)據(jù)結(jié)構(gòu) 599
19.6.3 SIP網(wǎng)際協(xié)議層的輸入函數(shù) 601
19.6.4 SIP網(wǎng)際協(xié)議層的輸出函數(shù) 605
19.6.5 SIP網(wǎng)際協(xié)議層的分片函數(shù) 606
19.6.6 SIP網(wǎng)際協(xié)議層的分片組裝函數(shù) 607
19.7 SIP網(wǎng)絡(luò)協(xié)議棧的ICMP層 611
19.7.1 SIP控制報文協(xié)議的數(shù)據(jù)結(jié)構(gòu) 611
19.7.2 SIP控制報文協(xié)議的協(xié)議支持 612
19.7.3 SIP控制報文協(xié)議的輸入函數(shù) 613
19.7.4 SIP控制報文協(xié)議的回顯應答函數(shù) 614
19.8 SIP網(wǎng)絡(luò)協(xié)議棧的UDP層 615
19.8.1 SIP數(shù)據(jù)報文層的數(shù)據(jù)結(jié)構(gòu) 615
19.8.2 SIP數(shù)據(jù)報文層的控制單元 615
19.8.3 SIP數(shù)據(jù)報文層的輸入函數(shù) 617
19.8.4 SIP數(shù)據(jù)報文層的輸出函數(shù) 618
19.8.5 SIP數(shù)據(jù)報文層的建立函數(shù) 618
19.8.6 SIP數(shù)據(jù)報文層的釋放函數(shù) 619
19.8.7 SIP數(shù)據(jù)報文層的綁定函數(shù) 620
19.8.8 SIP數(shù)據(jù)報文層的發(fā)送數(shù)據(jù)函數(shù) 621
19.8.9 SIP數(shù)據(jù)報文層的校驗和計算 622
19.9 SIP網(wǎng)絡(luò)協(xié)議棧的協(xié)議無關(guān)層 623
19.9.1 SIP協(xié)議無關(guān)層的系統(tǒng)架構(gòu) 623
19.9.2 SIP協(xié)議無關(guān)層的函數(shù)形式 624
19.9.3 SIP協(xié)議無關(guān)層的接收數(shù)據(jù)函數(shù) 624
19.10 SIP網(wǎng)絡(luò)協(xié)議棧的BSD接口層 625
19.10.1 SIP用戶接口層的架構(gòu) 625
19.10.2 SIP用戶接口層的套接字建立函數(shù) 626
19.10.3 SIP用戶接口層的套接字關(guān)閉函數(shù) 627
19.10.4 SIP用戶接口層的套接字綁定函數(shù) 627
19.10.5 SIP用戶接口層的套接字連接函數(shù) 628
19.10.6 SIP用戶接口層的套接字接收數(shù)據(jù)函數(shù) 628
19.10.7 SIP用戶接口層的發(fā)送數(shù)據(jù)函數(shù) 629
19.11 SIP網(wǎng)絡(luò)協(xié)議棧的編譯 630
19.11.1 SIP的文件結(jié)構(gòu) 630
19.11.2 SIP的Makefile 631
19.11.3 SIP的編譯運行 631
19.12 小結(jié) 631
第20章 一個簡單防火墻的例子SIPFW 633
20.1 SIPFW防火墻的功能描述 633
20.1.1 SIPFW防火墻對主機進行網(wǎng)絡(luò)數(shù)據(jù)過濾的功能描述 633
20.1.2 SIPFW防火墻用戶設(shè)置防火墻規(guī)則的功能描述 634
20.1.3 SIPFW防火墻配置文件等附加功能的功能描述 634
20.2 SIPFW需求分析 634
20.2.1 SIPFW防火墻條件和動作 635
20.2.2 SIPFW防火墻支持過濾的類型和內(nèi)容 635
20.2.3 SIPFW防火墻過濾的方式和動作 638
20.2.4 SIPFW防火墻的配置文件 640
20.2.5 SIPFW防火墻命令行配置格式 640
20.2.6 SIPFW防火墻的規(guī)則文件格式 642
20.2.7 SIPFW防火墻的日志文件數(shù)據(jù)格式 643
20.2.8 SIPFW防火墻構(gòu)建所采用的技術(shù)方案 644
20.3 使用netlink進行用戶空間和內(nèi)核空間數(shù)據(jù)交互 645
20.3.1 netlink的用戶空間程序設(shè)計 645
20.3.2 netlink的內(nèi)核空間API 648
20.4 使用proc進行內(nèi)存數(shù)據(jù)用戶空間映射 650
20.4.1 proc虛擬文件系統(tǒng)的結(jié)構(gòu) 650
20.4.2 創(chuàng)建proc虛擬文件 651
20.4.3 刪除proc虛擬文件 652
20.4.4 proc文件的寫函數(shù) 652
20.4.5 proc文件的讀函數(shù) 653
20.5 內(nèi)核空間的文件操作函數(shù) 654
20.5.1 內(nèi)核空間的文件結(jié)構(gòu) 654
20.5.2 內(nèi)核空間的文件建立操作 655
20.5.3 內(nèi)核空間的文件讀寫操作 656
20.5.4 內(nèi)核空間的文件關(guān)閉操作 657
20.6 SIPFW防火墻的模塊分析和設(shè)計 657
20.6.1 SIPFW防火墻的總體架構(gòu) 657
20.6.2 SIPFW防火墻的用戶命令解析 660
20.6.3 SIPFW用戶空間與內(nèi)核空間的交互 663
20.6.4 SIPFW防火墻內(nèi)核鏈上的規(guī)則處理 666
20.6.5 SIPFW防火墻的PROC虛擬文件系統(tǒng) 668
20.6.6 SIPFW防火墻的配置文件和日志文件處理 669
20.6.7 SIPFW防火墻的過濾模塊設(shè)計 671
20.7 SIPFW防火墻各功能模塊的實現(xiàn) 673
20.7.1 SIPFW防火墻的命令解析代碼 674
20.7.2 SIPFW防火墻的過濾規(guī)則解析模塊代碼 678
20.7.3 SIPFW防火墻的網(wǎng)絡(luò)數(shù)據(jù)攔截模塊代碼 680
20.7.4 SIPFW防火墻的PROC虛擬文件系統(tǒng) 681
20.7.5 SIPFW防火墻對配置文件的解析 683
20.7.6 SIPFW防火墻內(nèi)核模塊初始化和退出 684
20.7.7 用戶空間處理主函數(shù) 685
20.8 編譯、調(diào)試和測試 686
20.8.1 用戶程序和內(nèi)核程序的Makefile 686
20.8.2 編譯及運行 687
20.8.3 下發(fā)過濾規(guī)則,測試過濾結(jié)果 688
20.9 小結(jié) 690

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號