当前位置首页 > 百科> 正文

Linux网路编程

2019-10-10 23:49:24 百科
Linux网路编程

Linux网路编程

《Linux网路编程》是2010年清华大学出版社出版的图书,作者是宋敬彬、孙海滨。

基本介绍

  • 书名:Linux网路编程
  • 作者:宋敬彬、孙海滨 
  • ISBN:9787302207177
  • 页数:690
  • 出版社:清华大学出版社
  • 出版时间:2010 年1月
  • 开本:16开

内容简介

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
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net