Linux网络编程

Linux网络编程
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: ,
2010-01
版次: 1
ISBN: 9787302207177
定价: 79.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 690页
字数: 1113千字
正文语种: 简体中文
61人买过
  •   Linux是目前最流行的开源操作系统,网络功能在Linux下占有核心的地位。《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序设计。《Linux网络编程》内容分为4个部分:Linux程序设计基础部分、Linux用户空间网络编程部分、Linux内核网络编程部分以及综合案例部分。内容包含Linux系统概述、Linux编程环境、Linux文件系统简介、Linux下的进程和线程、TCP/IP协议族、应用层网络服务程序、TCP编程、主机信息获取、数据IO复用、UDP编程、高级套接字、套接字选项、原始套接字、服务器模型、IPv6、Linux内核网络部分结构及分布、netfilter框架内报文处理。为了方便读者学习,《Linux网络编程》最后一个部分介绍了3个综合案例,包括应用层的Web服务器例子、简单的应用层网络协议站例子和内核层网防火墙的例子。
      《Linux网络编程》适合广大的Linux平台下的网络程序设计人员和大中专院校学生阅读,尤其是有一定Linux基础知识的编程技术人员。   宋敬彬,海信集团国家重点实验室高级工程师。海信数字家庭原型系统的主要设计及实现人员。有十多年的Linux编程经验,对Linux内核和网络协议栈十分熟悉。长期从事嵌入式Linux设备、机顶盒产品、IGRS设备互联的研究和开发工作。目前主要从事数字家庭系统的设计和实现。曾经在技术期刊上发表过多篇技术论文。曾经参加过国家863高性能集群服务器、电子发展基金的IPv6等项目的研究和开发。
      孙海滨,山东科技大学信息科学与工程学院副教授。计算机应用技术专业博士、博士后。长期从事计算机应用技术的研究和教学。有多年的Linux应用和开发经验,对网络协议有较深入的研究。目前致力于多媒体信息检索、人工智能、空间推理、地理信息系统等技术的研究。曾经在国内外的核心刊物上发表过多篇学术论文。参与开发了多个应用软件系统。参与国家863计划项目一项。主持开发过山东科技大学“春蕾计划”项目一项。 第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配置文件.vimrc19
    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递归make44
    2.3.8Makefile中的函数46
    2.4用GDB调试程序47
    2.4.1编译可调试程序48
    2.4.2使用GDB调试程序49
    2.4.3GDB常用命令52
    2.4.4其他的GDB59
    2.5小结60

    第3章文件系统简介61
    3.1Linux下的文件系统61
    3.1.1Linux下文件的内涵61
    3.1.2文件系统的创建62
    3.1.3挂接文件系统64
    3.1.4索引节点inode65
    3.1.5普通文件66
    3.1.6设备文件66
    3.1.7虚拟文件系统VFS68
    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所有用户态进程的产生进程init100
    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/inetd178
    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监听本地端口listen192
    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信号SIGPIPE208
    7.4.3信号SIGINT208
    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查看是否支持IPv6452
    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_HOPS459
    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_protosw478
    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.1netfilter485
    17.1.1netfilter简介485
    17.1.2netfilter框架486
    17.1.3netfilter检查时的表格487
    17.1.4netfilter的规则487
    17.2iptables和netfilter488
    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内核模块编译所需的Makefile498
    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_ops502
    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服务器的例子SHTTPD522
    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制作Makefile566
    18.4.3制作执行文件567
    18.4.4使用不同的浏览器测试服务器程序567
    18.5小结568

    第19章一个简单网络协议栈的例子SIP569
    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的Makefile631
    19.11.3SIP的编译运行631
    19.12小结631

    第20章一个简单防火墙的例子SIPFW633
    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的内核空间API648
    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用户程序和内核程序的Makefile686
    20.8.2编译及运行687
    20.8.3下发过滤规则,测试过滤结果688
    20.9小结690
  • 内容简介:
      Linux是目前最流行的开源操作系统,网络功能在Linux下占有核心的地位。《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序设计。《Linux网络编程》内容分为4个部分:Linux程序设计基础部分、Linux用户空间网络编程部分、Linux内核网络编程部分以及综合案例部分。内容包含Linux系统概述、Linux编程环境、Linux文件系统简介、Linux下的进程和线程、TCP/IP协议族、应用层网络服务程序、TCP编程、主机信息获取、数据IO复用、UDP编程、高级套接字、套接字选项、原始套接字、服务器模型、IPv6、Linux内核网络部分结构及分布、netfilter框架内报文处理。为了方便读者学习,《Linux网络编程》最后一个部分介绍了3个综合案例,包括应用层的Web服务器例子、简单的应用层网络协议站例子和内核层网防火墙的例子。
      《Linux网络编程》适合广大的Linux平台下的网络程序设计人员和大中专院校学生阅读,尤其是有一定Linux基础知识的编程技术人员。
  • 作者简介:
      宋敬彬,海信集团国家重点实验室高级工程师。海信数字家庭原型系统的主要设计及实现人员。有十多年的Linux编程经验,对Linux内核和网络协议栈十分熟悉。长期从事嵌入式Linux设备、机顶盒产品、IGRS设备互联的研究和开发工作。目前主要从事数字家庭系统的设计和实现。曾经在技术期刊上发表过多篇技术论文。曾经参加过国家863高性能集群服务器、电子发展基金的IPv6等项目的研究和开发。
      孙海滨,山东科技大学信息科学与工程学院副教授。计算机应用技术专业博士、博士后。长期从事计算机应用技术的研究和教学。有多年的Linux应用和开发经验,对网络协议有较深入的研究。目前致力于多媒体信息检索、人工智能、空间推理、地理信息系统等技术的研究。曾经在国内外的核心刊物上发表过多篇学术论文。参与开发了多个应用软件系统。参与国家863计划项目一项。主持开发过山东科技大学“春蕾计划”项目一项。
  • 目录:
    第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配置文件.vimrc19
    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递归make44
    2.3.8Makefile中的函数46
    2.4用GDB调试程序47
    2.4.1编译可调试程序48
    2.4.2使用GDB调试程序49
    2.4.3GDB常用命令52
    2.4.4其他的GDB59
    2.5小结60

    第3章文件系统简介61
    3.1Linux下的文件系统61
    3.1.1Linux下文件的内涵61
    3.1.2文件系统的创建62
    3.1.3挂接文件系统64
    3.1.4索引节点inode65
    3.1.5普通文件66
    3.1.6设备文件66
    3.1.7虚拟文件系统VFS68
    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所有用户态进程的产生进程init100
    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/inetd178
    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监听本地端口listen192
    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信号SIGPIPE208
    7.4.3信号SIGINT208
    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查看是否支持IPv6452
    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_HOPS459
    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_protosw478
    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.1netfilter485
    17.1.1netfilter简介485
    17.1.2netfilter框架486
    17.1.3netfilter检查时的表格487
    17.1.4netfilter的规则487
    17.2iptables和netfilter488
    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内核模块编译所需的Makefile498
    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_ops502
    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服务器的例子SHTTPD522
    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制作Makefile566
    18.4.3制作执行文件567
    18.4.4使用不同的浏览器测试服务器程序567
    18.5小结568

    第19章一个简单网络协议栈的例子SIP569
    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的Makefile631
    19.11.3SIP的编译运行631
    19.12小结631

    第20章一个简单防火墙的例子SIPFW633
    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的内核空间API648
    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用户程序和内核程序的Makefile686
    20.8.2编译及运行687
    20.8.3下发过滤规则,测试过滤结果688
    20.9小结690
查看详情
系列丛书 / 更多
Linux网络编程
Linux典藏大系 Linux从入门到精通+Linux系统管理与网络管理+Linux服务器架设指
刘忆智、林天峰、谭志彬、余柏山 著
Linux网络编程
ARM嵌入式Linux系统开发详解(第2版)
弓雷 著
Linux网络编程
Linux系统管理与网络管理
余柏山 著
Linux网络编程
Linux网络编程:第2版
宋敬彬 著
Linux网络编程
Linux Shell命令行及脚本编程实例详解
刘艳涛 著
Linux网络编程
Shell从入门到精通
张春晓 著
Linux网络编程
Linux服务器架设指南
林天峰、谭志彬 著
Linux网络编程
Linux环境C程序设计
徐诚 编
Linux网络编程
Linux驱动开发入门与实战(第2版)
郑强 著
Linux网络编程
Linux典藏大系:Linux服务范例速查大全
刘丽霞、邱晓华 著
Linux网络编程
Linux从入门到精通
刘忆智 著
Linux网络编程
Linux指令范例速查手册
黄照鹤 著
相关图书 / 更多
Linux网络编程
LiteOS轻量级物联网操作系统实战 微课视频版
魏杰
Linux网络编程
Linux综合实训案例教程
陈智斌;梁鹏;肖政宏
Linux网络编程
Linux操作系统项目化教程
周秀丽;张徐超;周密
Linux网络编程
Linux操作系统
刘睿;包大宏;兰晓天;李吉桃;王仕杰;吴晓清;张宏洲;杨云江
Linux网络编程
Linux C语言程序设计(微课视频版)
张同光;田文强;荆春棋;田乔梅;陈明
Linux网络编程
Linux虚拟化——原理、方法和实战(KVM+Docker+OpenStack)
吴光科;李建尧;柯宇霖
Linux网络编程
Linux源码趣读
闪客
Linux网络编程
Linux自动化运维实战(Linux开发书系)
吴光科;彭威城;文·S
Linux网络编程
Linux云计算——Kubernetes实战
吴光科;程浩;刑亚飞
Linux网络编程
Linux运维从入门到精通
明日科技
Linux网络编程
Linux操作系统项目化教程(第2版)
洪伟 主编;丁传炜 谢鹏 副主编
Linux网络编程
Linux企业高性能架构实战
吴光科;曹森;赵瑞丰
您可能感兴趣 / 更多
Linux网络编程
Linux网络编程:第2版
宋敬彬 著