Linux網路編程

Linux網路編程

《Linux網路編程》是2010年清華大學出版社出版的圖書,作者是宋敬彬、孫海濱。

基本信息

內容簡介

linux是目前最流行的開源作業系統,網路功能在linux下占有核心的地位。本書循序漸進地從套用層到linux核心、從基本知識點到綜合案例,向讀者介紹如何在linux下進行網路程式設計。本書內容分為4個部分:linux程式設計基礎部分、linux用戶空間網路編程部分、linux核心網路編程部分以及綜合案例部分。內容包含linux系統概述、linux編程環境、linux檔案系統簡介、linux下的進程和執行緒、tcp/ip協定族、套用層網路服務程式、tcp編程、主機信息獲取、數據io復用、udp編程、高級套接字、套接字選項、原始套接字、伺服器模型、ipv6、linux 核心網路部分結構及分布、netfilter框架內報文處理。

為了方便讀者學習,本書最後一個部分介紹了3個綜合案例,包括套用層的web伺服器例子、簡單的套用層網路協定站例子和核心層網防火牆的例子。.

本書適合廣大的linux平台下的網路程式設計人員和大中專院校學生閱讀,尤其是有一定linux基礎知識的編程技術人員。

作者簡介

宋敬彬 海信集團國家重點實驗室高級工程師。海信數字家庭原型系統的主要設計及實現人員。有十多年的Linux編程經驗,對Linux核心和網路協定棧十分熟悉。長期從事嵌入式Linux設備、機頂盒產品、IGRS設備互聯的研究和開發工作。目前主要從事數字家庭系統的設計和實現。曾經在技術期刊上發表過多篇技術論文。曾經參加過國家863高性能集群伺服器、電子發展基金的IPv6等項目。.

目錄

第1篇Linux網路開發基礎

第1章Linux作業系統概述 2

1.1Linux發展歷史 2

1.1.1Linux的誕生和發展 2

1.1.2Linux名稱的由來 3

1.2Linux的發展要素 3

1.2.1UNIX作業系統 4

1.2.2Minix作業系統 4

1.2.3POSIX標準 4

1.3Linux與UNIX的異同 5

1.4作業系統類型選擇和核心版本的選擇 5

1.4.1常見的不同公司發行的Linux異同 6

1.4.2核心版本的選擇 6

1.5Linux的系統架構 7

1.5.1Linux核心的主要模組 7

1.5.2Linux的檔案結構 9

1.6GNU通用公共許可證 10

1.6.1GPL許可證的歷史 10

1.6.2GPL的自由理念 10

1.6.3GPL的基本條款 11

1.6.4關於GPL許可證的爭議 12

1.7Linux軟體開發的可借鑑之處 12

1.8小結 13

第2章Linux編程環境 14

2.1Linux環境下的編輯器 14

2.1.1vim使用簡介 14

2.1.2使用vim建立檔案 15

2.1.3使用vim編輯文本 16

2.1.4vim的格式設定 18

2.1.5vim配置檔案.vimrc 19

2.1.6使用其他編輯器 19

2.2Linux下的GCC編譯器工具集 19

2.2.1GCC簡介 19

2.2.2編譯程式的基本知識 21

2.2.3單個檔案編譯成執行檔案 22

2.2.4編譯生成目標檔案 22

2.2.5多檔案編譯 23

2.2.6預處理 24

2.2.7編譯成彙編語言 24

2.2.8生成和使用靜態程式庫 25

2.2.9生成動態程式庫 26

2.2.10動態載入庫 29

2.2.11GCC常用選項 31

2.2.12編譯環境的搭建 33

2.3Makefile檔案簡介 34

2.3.1一個多檔案的工程例子 34

2.3.2多檔案工程的編譯 36

2.3.3Makefile的規則 37

2.3.4Makefile中使用變數 39

2.3.5搜尋路徑 43

2.3.6自動推導規則 44

2.3.7遞歸make 44

2.3.8Makefile中的函式 46

2.4用GDB調試程式 47

2.4.1編譯可調試程式 48

2.4.2使用GDB調試程式 49

2.4.3GDB常用命令 52

2.4.4其他的GDB 59

2.5小結 60

第3章檔案系統簡介 61

3.1Linux下的檔案系統 61

3.1.1Linux下檔案的內涵 61

3.1.2檔案系統的創建 62

3.1.3掛接檔案系統 64

3.1.4索引節點inode 65

3.1.5普通檔案 66

3.1.6設備檔案 66

3.1.7虛擬檔案系統VFS 68

3.2檔案的通用操作方法 72

3.2.1檔案描述符 72

3.2.2打開創建檔案open()、create()函式 72

3.2.3關閉檔案close()函式 76

3.2.4讀取檔案read()函式 77

3.2.5寫檔案write()函式 79

3.2.6檔案偏移lseek()函式 80

3.2.7獲得檔案狀態fstat()函式 83

3.2.8檔案空間映射mmap()函式 85

3.2.9檔案屬性fcntl()函式 88

3.2.10檔案輸入輸出控制ioctl()函式 92

3.3socket檔案類型 93

3.4小結 93

第4章程式、進程和執行緒 94

4.1程式、進程和執行緒的概念 94

4.1.1程式和進程的差別 94

4.1.2Linux環境下的進程 95

4.1.3進程和執行緒 96

4.2進程產生的方式 96

4.2.1進程號 96

4.2.2進程複製fork() 97

4.2.3system()方式 98

4.2.4進程執行exec()函式系列 99

4.2.5所有用戶態進程的產生進程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共享記憶體 121

4.3.7信號 124

4.4Linux下的執行緒 127

4.4.1多執行緒編程實例 127

4.4.2Linux下執行緒創建函式pthread_create() 129

4.4.3執行緒的結束函式pthread_join()和pthread_exit() 129

4.4.4執行緒的屬性 130

4.4.5執行緒間的互斥 132

4.4.6執行緒中使用信號量 133

4.5小結 136

第2篇Linux用戶層網路編程

第5章TCP/IP協定族簡介 138

5.1OSI網路分層介紹 138

5.1.1OSI網路分層結構 138

5.1.2OSI的7層網路結構 139

5.1.3OSI參考模型中的數據傳輸 140

5.2TCP/IP協定棧 141

5.2.1TCP/IP協定棧參考模型 141

5.2.2主機到網路層協定 143

5.2.3IP協定 144

5.2.4網際控制報文協定(ICMP) 146

5.2.5傳輸控制協定(TCP) 150

5.2.6用戶數據報文協定(UDP) 154

5.2.7地址解析協定(ARP) 156

5.3IP位址分類與TCP/UDP連線埠 158

5.3.1網際網路中IP位址的分類 159

5.3.2子網掩碼(subnetmaskaddress) 161

5.3.3IP位址的配置 162

5.3.4連線埠 163

5.4主機位元組序和網路位元組序 163

5.4.1位元組序的含義 164

5.4.2網路位元組序的轉換 164

5.5小結 166

第6章套用層網路服務程式簡介 167

6.1HTTP協定和服務 167

6.1.1HTTP協定概述 167

6.1.2HTTP協定的基本過程 168

6.2FTP協定和服務 170

6.2.1FTP協定概述 170

6.2.2FTP協定的工作模式 172

6.2.3FTP協定的傳輸方式 172

6.2.4一個簡單的FTP過程 173

6.2.5常用的FTP工具 173

6.3TELNET協定和服務 174

6.3.1遠程登錄的基本概念 174

6.3.2使用TELNET協定進行遠程登錄的工作過程 174

6.3.3TELNET協定 174

6.4NFS協定和服務 176

6.4.1安裝NFS伺服器和客戶端 176

6.4.2伺服器端的設定 176

6.4.3客戶端的操作 177

6.4.4showmount命令 177

6.5自定義網路服務 177

6.5.1xinetd/inetd 178

6.5.2xinetd服務配置 178

6.5.3自定義網路服務 179

6.6小結 180

第7章TCP網路編程基礎 181

7.1套接字編程基礎知識 181

7.1.1套接字地址結構 181

7.1.2用戶層和核心層互動過程 183

7.2TCP網路編程流程 184

7.2.1TCP網路編程架構 184

7.2.2創建網路插口函式socket() 186

7.2.3綁定一個地址連線埠對bind() 189

7.2.4監聽本地連線埠listen 192

7.2.5接受一個網路請求accept() 194

7.2.6連線目標網路伺服器connect() 199

7.2.7寫入數據函式write() 200

7.2.8讀取數據函式read() 201

7.2.9關閉套接字函式close() 201

7.3伺服器/客戶端的簡單例子 202

7.3.1例子功能描述 202

7.3.2伺服器網路程式 203

7.3.3伺服器讀取和顯示字元串 205

7.3.4客戶端的網路程式 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小結 208

第8章伺服器和客戶端信息的獲取 210

8.1位元組序 210

8.1.1大端位元組序和小端位元組序 210

8.1.2位元組序轉換函式 212

8.1.3一個位元組序轉換的例子 214

8.2字元串IP位址和二進制IP位址的轉換 217

8.2.1inet_xxx()函式 217

8.2.2inet_pton()和inet_ntop()函式 219

8.2.3使用8.2.1節地址轉換函式的例子 220

8.2.4使用函式inet_pton()和函式inet_ntop()的例子 223

8.3套接字描述符判定函式issockettype() 223

8.3.1進行檔案描述符判定的函式issockettype() 224

8.3.2main()函式 224

8.4IP位址與域名之間的相互轉換 225

8.4.1DNS原理 225

8.4.2獲取主機信息的函式 226

8.4.3使用主機名獲取主機信息的例子 228

8.4.4函式gethostbyname()不可重入的例子 230

8.5協定名稱處理函式 232

8.5.1xxxprotoxxx()函式 232

8.5.2使用協定族函式的例子 233

8.6小結 236

第9章數據的IO和復用 237

9.1IO函式 237

9.1.1使用recv()函式接收數據 237

9.1.2使用send()函式傳送數據 239

9.1.3使用readv()函式接收數據 240

9.1.4使用writev()函式傳送數據 240

9.1.5使用recvmsg()函式接收數據 242

9.1.6使用sendmsg()函式傳送數據 244

9.1.7IO函式的比較 246

9.2使用IO函式的例子 246

9.2.1客戶端處理框架的例子 246

9.2.2伺服器端程式框架 248

9.2.3使用recv()和send()函式 249

9.2.4使用readv()和write()函式 251

9.2.5使用recvmsg()和sendmsg()函式 253

9.3IO模型 256

9.3.1阻塞IO模型 256

9.3.2非阻塞IO模型 257

9.3.3IO復用 257

9.3.4信號驅動IO模型 258

9.3.5異步IO模型 258

9.4select()函式和pselect()函式 259

9.4.1select()函式 259

9.4.2pselect()函式 261

9.5poll()函式和ppoll()函式 262

9.5.1poll()函式 263

9.5.2ppoll()函式 264

9.6非阻塞編程 264

9.6.1非阻塞方式程式設計介紹 264

9.6.2非阻塞程式設計的例子 264

9.7小結 266

第10章基於UDP協定的接收和傳送 267

10.1UDP編程框架 267

10.1.1UDP編程框圖 267

10.1.2UDP伺服器編程框架 269

10.1.3UDP客戶端編程框架 269

10.2UDP協定程式設計的常用函式 270

10.2.1建立套接字socket()和綁定套接字bind() 270

10.2.2接收數據recvfrom()/recv() 270

10.2.3傳送數據sendto()/send() 275

10.3UDP接收和傳送數據的例子 279

10.3.1UDP伺服器端 279

10.3.2UDP伺服器端數據處理 280

10.3.3UDP客戶端 281

10.3.4UDP客戶端數據處理 281

10.3.5測試UDP程式 282

10.4UDP協定程式設計中的幾個問題 282

10.4.1UDP報文丟失數據 282

10.4.2UDP數據傳送中的亂序 284

10.4.3UDP協定中的connect()函式 287

10.4.4UDP缺乏流量控制 287

10.4.5UDP協定中的外出網路接口 289

10.4.6UDP協定中的數據報文截斷 290

10.5小結 291

第11章高級套接字 292

11.1UNIX域函式 292

11.1.1UNIX域函式的地址結構 292

11.1.2套接字函式 293

11.1.3使用UNIX域函式進行套接字編程 293

11.1.4傳遞檔案描述符 296

11.1.5socketpair()函式 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廣域網的多播 311

11.3.3多播的編程 311

11.3.4核心中的多播 313

11.3.5一個多播例子的伺服器端 317

11.3.6一個多播例子的客戶端 318

11.4數據鏈路層訪問 319

11.4.1SOCK_PACKET類型 319

11.4.2設定套接口以捕獲鏈路幀的編程方法 320

11.4.3從套接口讀取鏈路幀的編程方法 321

11.4.4定位IP包頭的編程方法 322

11.4.5定位TCP報頭的編程方法 323

11.4.6定位UDP報頭的編程方法 325

11.4.7定位套用層報文數據的編程方法 326

11.4.8使用SOCK_PACKET編寫ARP請求程式的例子 326

11.5小結 329

第12章套接字選項 330

12.1獲取和設定套接字選項getsocketopt()/setsocketopt() 330

12.1.1getsockopt()函式和setsocketopt()函式的介紹 330

12.1.2套接字選項 331

12.1.3套接字選項簡單示例 332

12.2SOL_SOCKET協定族選項 336

12.2.1SO_BROADCAST廣播選項 336

12.2.2SO_DEBUG調試選項 337

12.2.3SO_DONTROUTE不經過路由選項 337

12.2.4SO_ERROR錯誤選項 338

12.2.5SO_KEEPALIVE保持連線選項 338

12.2.6SO_LINGER緩衝區處理方式選項 339

12.2.7SO_OOBINLINE帶外數據處理方式選項 342

12.2.8SO_RCVBUF和SO_SNDBUF緩衝區大小選項 342

12.2.9SO_RCVLOWAT和SO_SNDLOWAT緩衝區下限選項 343

12.2.10SO_RCVTIMEO和SO_SNDTIMEO收發逾時選項 343

12.2.11SO_REUSERADDR地址重用選項 344

12.2.12SO_EXCLUSIVEADDRUSE連線埠獨占選項 344

12.2.13SO_TYPE套接字類型選項 345

12.2.14SO_BSDCOMPAT與BSD套接字兼容選項 345

12.2.15SO_BINDTODEVICE套接字網路接口綁定選項 345

12.2.16SO_PRIORITY套接字優先權選項 346

12.3IPPROTO_IP選項 347

12.3.1IP_HDRINCL選項 347

12.3.2IP_OPTNIOS選項 347

12.3.3IP_TOS選項 347

12.3.4IP_TTL選項 347

12.4IPPROTO_TCP選項 348

12.4.1TCP_KEEPALIVE選項 348

12.4.2TCP_MAXRT選項 348

12.4.3TCP_MAXSEG選項 349

12.4.4TCP_NODELAY和TCP_CORK選項 349

12.5使用套接字選項 351

12.5.1設定和獲取緩衝區大小 351

12.5.2獲取套接字類型的例子 355

12.5.3使用套接字選項的綜合例子 356

12.6ioctl()函式 361

12.6.1ioctl()函式的命令選項 361

12.6.2ioctl()函式的IO請求 363

12.6.3ioctl()函式的檔案請求 365

12.6.4ioctl()函式的網路接口請求 365

12.6.5使用ioctl()函式對ARP高速快取操作 372

12.6.6使用ioctl()函式傳送路由表請求 374

12.7fcntl()函式 374

12.7.1fcntl()函式的選項 375

12.7.2使用fcntl()函式修改套接字非阻塞屬性 375

12.7.3使用fcntl()函式設定信號屬主 376

12.8小結 376

第13章原始套接字 377

13.1概述 377

13.2原始套接字的創建 379

13.2.1SOCK_RAW選項 379

13.2.2IP_HDRINCL套接字選項 379

13.2.3不需要bind()函式 380

13.3原始套接字傳送報文 380

13.4原始套接字接收報文 380

13.5原始套接字報文處理時的結構 381

13.5.1IP頭部的結構 381

13.5.2ICMP頭部結構 382

13.5.3UDP頭部結構 384

13.5.4TCP頭部結構 386

13.6ping的例子 387

13.6.1協定格式 388

13.6.2校驗和函式 389

13.6.3設定ICMP傳送報文的頭部 390

13.6.4剝離ICMP接受報文的頭部 391

13.6.5計算時間差 392

13.6.6傳送報文 393

13.6.7接收報文 394

13.6.8主函式過程 395

13.6.9主函式main() 397

13.6.10編譯測試 400

13.7洪水攻擊 400

13.8ICMP洪水攻擊 401

13.8.1ICMP洪水攻擊的原理 401

13.8.2ICMP洪水攻擊的例子 401

13.9UDP洪水攻擊 405

13.10SYN洪水攻擊 409

13.10.1SYN洪水攻擊的原理 409

13.10.2SYN洪水攻擊的例子 409

13.11小結 413

第14章伺服器模型選擇 414

14.1循環伺服器 414

14.1.1UDP循環伺服器 414

14.1.2TCP循環伺服器 417

14.2簡單並發伺服器 420

14.2.1並發伺服器的模型 420

14.2.2UDP並發伺服器 420

14.2.3TCP並發伺服器 423

14.3TCP的高級並發伺服器模型 426

14.3.1單客戶端單進程,統一accept() 426

14.3.2單客戶端單執行緒,統一accept() 429

14.3.3單客戶端單執行緒,各執行緒獨自accept(),使用互斥鎖 431

14.4IO復用循環伺服器 435

14.4.1IO復用循環伺服器模型介紹 435

14.4.2IO復用循環伺服器模型的例子 436

14.5小結 440

第15章IPv6簡介 441

15.1IPv4的缺陷 441

15.2IPv6的特點 442

15.3IPv6的地址 443

15.3.1IPv6的單播地址 443

15.3.2可聚集全球單播地址 443

15.3.3本地使用單播地址 444

15.3.4兼容性地址 445

15.3.5IPv6多播地址 446

15.3.6IPv6任播地址 446

15.3.7主機的多個IPv6地址 447

15.4IPv6的頭部 447

15.4.1IPv6頭部格式 447

15.4.2與IPv4頭部的對比 448

15.4.3IPv6的TCP頭部 449

15.4.4IPv6的UDP頭部 449

15.4.5IPv6的ICMP頭部 449

15.5IPv6運行環境 451

15.5.1載入IPv6模組 451

15.5.2查看是否支持IPv6 452

15.6IPv6的結構定義 453

15.6.1IPv6的地址族和協定族 453

15.6.2套接字地址結構 453

15.6.3地址兼容考慮 455

15.6.4IPv6通用地址 455

15.7IPv6的套接字函式 456

15.7.1socket()函式 456

15.7.2沒有發生改變的函式 456

15.7.3發生改變的函式 457

15.8IPv6的套接字選項 457

15.8.1IPv6的套接字選項 457

15.8.2單播跳限IPV6_UNICAST_HOPS 459

15.8.3傳送和接收多播包 459

15.8.4IPv6中獲得時間戳的ioctl命令 460

15.9IPv6的庫函式 460

15.9.1地址轉換函式的差異 460

15.9.2域名解析函式的差異 461

15.9.3測試宏 463

15.10IPv6的編程的一個簡單例子 463

15.10.1伺服器程式 464

15.10.2客戶端程式 465

15.10.3編譯調試 467

15.11小結 467

第3篇Linux核心網路編程

第16章Linux核心中網路部分結構以及分布 470

16.1概述 470

16.1.1代碼目錄分布 470

16.1.2核心中網路部分流程簡介 472

16.1.3系統提供修改網路流程點 474

16.1.4sk_buff結構 475

16.1.5網路協定數據結構inet_protosw 478

16.2軟中斷CPU報文佇列及其處理 479

16.2.1Linux核心網路協定層的層間傳遞手段——軟中斷 479

16.2.2網路收發處理軟中斷的實現機制 481

16.3socket數據如何在核心中接收和傳送 482

16.3.1socket()的初始化 482

16.3.2接收網路數據recv() 482

16.3.3傳送網路數據send() 483

16.4小結 484

第17章netfilter框架內報文處理 485

17.1netfilter 485

17.1.1netfilter簡介 485

17.1.2netfilter框架 486

17.1.3netfilter檢查時的表格 487

17.1.4netfilter的規則 487

17.2iptables和netfilter 488

17.2.1iptables簡介 488

17.2.2iptables的表和鏈 488

17.2.3使用iptables設定過濾規則 489

17.3核心模組編程 492

17.3.1核心“Hello,World!”程式 492

17.3.2核心模組的基本架構 494

17.3.3核心模組載入和卸載過程 496

17.3.4核心模組初始化和清理函式 497

17.3.5核心模組初始化和清理過程的容錯處理 497

17.3.6核心模組編譯所需的Makefile 498

17.45個鉤子點 499

17.4.1netfilter的5個鉤子點 499

17.4.2NF_HOOK宏 500

17.4.3鉤子的處理規則 501

17.5註冊/註銷鉤子 502

17.5.1結構nf_hook_ops 502

17.5.2註冊鉤子 503

17.5.3註銷鉤子 504

17.5.4註冊註銷函式 504

17.6鉤子的簡單處理例子 505

17.6.1功能描述 505

17.6.2需求分析 506

17.6.3ping回顯禁止實現 506

17.6.4禁止向目的IP位址傳送數據的實現 506

17.6.5連線埠關閉實現 506

17.6.6動態配置實現 508

17.6.7可載入核心實現代碼 509

17.6.8套用層測試代碼實現 516

17.6.9編譯運行 516

17.7一點多個鉤子的優先權 517

17.8校驗和問題 518

17.9小結 518

第4篇綜合案例

第18章一個簡單Web伺服器的例子SHTTPD 522

18.1SHTTPD的需求分析 522

18.1.1SHTTPD啟動參數可動態配置的需求 523

18.1.2SHTTPD的多客戶端支持的需求 524

18.1.3SHTTPD支持方法的需求 525

18.1.4SHTTPD支持的HTTP協定版本的需求 526

18.1.5SHTTPD支持頭部的需求 527

18.1.6SHTTPD定位URI的需求 527

18.1.7SHTTPD支持CGI的需求 528

18.1.8SHTTPD錯誤代碼的需求 529

18.2SHTTPD的模組分析和設計 530

18.2.1SHTTPD的主函式 530

18.2.2SHTTPD命令行解析的分析設計 531

18.2.3SHTTPD配置檔案解析的分析設計 532

18.2.4SHTTPD的多客戶端支持的分析設計 534

18.2.5SHTTPD頭部解析的分析設計 536

18.2.6SHTTPD對URI的分析設計 537

18.2.7SHTTPD支持方法的分析設計 537

18.2.8SHTTPD支持CGI的分析設計 538

18.2.9SHTTPD錯誤處理的分析設計 540

18.3SHTTPD各模組的實現 542

18.3.1SHTTPD命令行解析的實現 543

18.3.2SHTTPD檔案配置解析的實現 545

18.3.3SHTTPD的多客戶端支持的實現 547

18.3.4SHTTPD所請求URI解析的實現 551

18.3.5SHTTPD方法解析的實現 552

18.3.6SHTTPD回響方法的實現 552

18.3.7SHTTPD支持CGI的實現 556

18.3.8SHTTPD支持HTTP協定版本的實現 559

18.3.9SHTTPD內容類型的實現 559

18.3.10SHTTPD錯誤處理的實現 561

18.3.11SHTTPD生成目錄下檔案列表檔案的實現 563

18.3.12SHTTPD主函式的實現 565

18.4SHTTPD的編譯、調試和測試 566

18.4.1建立源檔案 566

18.4.2製作Makefile 566

18.4.3製作執行檔案 567

18.4.4使用不同的瀏覽器測試伺服器程式 567

18.5小結 568

第19章一個簡單網路協定棧的例子SIP 569

19.1SIP網路協定棧的功能描述 569

19.1.1SIP網路協定棧的基本功能描述 570

19.1.2SIP網路協定棧的分層功能描述 570

19.1.3SIP網路協定棧的用戶接口功能描述 571

19.2SIP網路協定棧的架構 571

19.3SIP網路協定棧的存儲區快取 572

19.3.1SIP存儲緩衝的結構定義 573

19.3.2SIP存儲緩衝的處理函式 577

19.4SIP網路協定棧的網路接口層 579

19.4.1SIP網路接口層的架構 579

19.4.2SIP網路接口層的數據結構 580

19.4.3SIP網路接口層的初始化函式 581

19.4.4SIP網路接口層的輸入函式 583

19.4.5SIP網路接口層的輸出函式 586

19.5SIP網路協定棧的ARP層 588

19.5.1SIP位址解析層的架構 588

19.5.2SIP位址解析層的數據結構 588

19.5.3SIP位址解析層的映射表 590

19.5.4SIP位址解析層的ARP映射表維護函式 591

19.5.5SIP位址解析層的ARP網路報文構建函式 593

19.5.6SIP位址解析層的ARP網路報文收發處理函式 595

19.6SIP網路協定棧的IP層 598

19.6.1SIP網際協定層的架構 598

19.6.2SIP網際協定層的數據結構 599

19.6.3SIP網際協定層的輸入函式 601

19.6.4SIP網際協定層的輸出函式 605

19.6.5SIP網際協定層的分片函式 606

19.6.6SIP網際協定層的分片組裝函式 607

19.7SIP網路協定棧的ICMP層 611

19.7.1SIP控制報文協定的數據結構 611

19.7.2SIP控制報文協定的協定支持 612

19.7.3SIP控制報文協定的輸入函式 613

19.7.4SIP控制報文協定的回顯應答函式 614

19.8SIP網路協定棧的UDP層 615

19.8.1SIP數據報文層的數據結構 615

19.8.2SIP數據報文層的控制單元 615

19.8.3SIP數據報文層的輸入函式 617

19.8.4SIP數據報文層的輸出函式 618

19.8.5SIP數據報文層的建立函式 618

19.8.6SIP數據報文層的釋放函式 619

19.8.7SIP數據報文層的綁定函式 620

19.8.8SIP數據報文層的傳送數據函式 621

19.8.9SIP數據報文層的校驗和計算 622

19.9SIP網路協定棧的協定無關層 623

19.9.1SIP協定無關層的系統架構 623

19.9.2SIP協定無關層的函式形式 624

19.9.3SIP協定無關層的接收數據函式 624

19.10SIP網路協定棧的BSD接口層 625

19.10.1SIP用戶接口層的架構 625

19.10.2SIP用戶接口層的套接字建立函式 626

19.10.3SIP用戶接口層的套接字關閉函式 627

19.10.4SIP用戶接口層的套接字綁定函式 627

19.10.5SIP用戶接口層的套接字連線函式 628

19.10.6SIP用戶接口層的套接字接收數據函式 628

19.10.7SIP用戶接口層的傳送數據函式 629

19.11SIP網路協定棧的編譯 630

19.11.1SIP的檔案結構 630

19.11.2SIP的Makefile 631

19.11.3SIP的編譯運行 631

19.12小結 631

第20章一個簡單防火牆的例子SIPFW 633

20.1SIPFW防火牆的功能描述 633

20.1.1SIPFW防火牆對主機進行網路數據過濾的功能描述 633

20.1.2SIPFW防火牆用戶設定防火牆規則的功能描述 634

20.1.3SIPFW防火牆配置檔案等附加功能的功能描述 634

20.2SIPFW需求分析 634

20.2.1SIPFW防火牆條件和動作 635

20.2.2SIPFW防火牆支持過濾的類型和內容 635

20.2.3SIPFW防火牆過濾的方式和動作 638

20.2.4SIPFW防火牆的配置檔案 640

20.2.5SIPFW防火牆命令行配置格式 640

20.2.6SIPFW防火牆的規則檔案格式 642

20.2.7SIPFW防火牆的日誌檔案數據格式 643

20.2.8SIPFW防火牆構建所採用的技術方案 644

20.3使用netlink進行用戶空間和核心空間數據互動 645

20.3.1netlink的用戶空間程式設計 645

20.3.2netlink的核心空間API 648

20.4使用proc進行記憶體數據用戶空間映射 650

20.4.1proc虛擬檔案系統的結構 650

20.4.2創建proc虛擬檔案 651

20.4.3刪除proc虛擬檔案 652

20.4.4proc檔案的寫函式 652

20.4.5proc檔案的讀函式 653

20.5核心空間的檔案操作函式 654

20.5.1核心空間的檔案結構 654

20.5.2核心空間的檔案建立操作 655

20.5.3核心空間的檔案讀寫操作 656

20.5.4核心空間的檔案關閉操作 657

20.6SIPFW防火牆的模組分析和設計 657

20.6.1SIPFW防火牆的總體架構 657

20.6.2SIPFW防火牆的用戶命令解析 660

20.6.3SIPFW用戶空間與核心空間的互動 663

20.6.4SIPFW防火牆核心鏈上的規則處理 666

20.6.5SIPFW防火牆的PROC虛擬檔案系統 668

20.6.6SIPFW防火牆的配置檔案和日誌檔案處理 669

20.6.7SIPFW防火牆的過濾模組設計 671

20.7SIPFW防火牆各功能模組的實現 673

20.7.1SIPFW防火牆的命令解析代碼 674

20.7.2SIPFW防火牆的過濾規則解析模組代碼 678

20.7.3SIPFW防火牆的網路數據攔截模組代碼 680

20.7.4SIPFW防火牆的PROC虛擬檔案系統 681

20.7.5SIPFW防火牆對配置檔案的解析 683

20.7.6SIPFW防火牆核心模組初始化和退出 684

20.7.7用戶空間處理主函式 685

20.8編譯、調試和測試 686

20.8.1用戶程式和核心程式的Makefile 686

20.8.2編譯及運行 687

20.8.3下發過濾規則,測試過濾結果 688

20.9小結 690

相關詞條

相關搜尋

熱門詞條

聯絡我們