第1章 TCP/IP简介 1
1.1概述 1
1.1.1基本的C/S服务模型 1
1.1.2OSI模型和TCP/IP四层结构 2
1.2IP协议介绍 3
1.2.1IP数据报的格式 3
1.2.2IP地址 4
1.2.3子网掩码(subnetmask) 5
1.3TCP协议介绍 6
1.3.1TCP连接的建立与终止 7
1.3.2TCP状态转换图 8
1.4UDP协议 10
1.5端口号 10
1.6本章小结 10
1.7实战检验 11
理论巩固 11
第2章 套接字编程简介 12
2.1套接字基础 12
2.2套接字的类型 13
2.3套接字地址结构 13
2.3.1IPv4套接字地址结构 13
2.3.2IPv6套接字地址结构 14
2.3.3两种套接字地址结构的比较 15
2.3.4通用套接字地址结构 15
2.4套接字基本函数 16
2.4.1字节排序函数 16
2.4.2字节操纵函数 17
2.4.3IP地址转换函数 17
2.4.4isfdtype()函数 19
2.5值-结果参数 19
2.6本章小结 20
2.7实战检验 20
理论巩固 20
上机实战 21
第3章 基本TCP套接字编程 22
3.1TCP套接字编程 22
3.1.1socket()函数 23
3.1.2connect()函数 24
3.1.3bind()函数 25
3.1.4listen()函数 27
3.1.5accept()函数 28
3.1.6数据传输函数 29
3.1.7close()函数 31
3.2TCP套接字编程实例 31
3.3服务器的3种异常情况 35
3.3.1服务器主机崩溃 36
3.3.2服务器主机崩溃后重启 36
3.3.3服务器主机关闭 37
3.4本章小结 37
3.5实战检验 38
理论巩固 38
上机实战 38
第4章 基本UDP套接口编程 39
4.1UDP套接字编程 39
4.1.1recvfrom()函数 40
4.1.2sendto函数 41
4.2UDP套接字编程实例 42
4.3UDP中对数据报的各项处理 46
4.3.1数据报的丢失 46
4.3.2验证收到的响应 46
4.3.3服务器进程未运行 47
4.4connect函数用于UDP 47
4.5本章小结 48
4.6实战检验 49
理论巩固 49
上机实战 49
第5章 并发服务器 50
5.1服务器的分类 50
5.2多进程并发服务器 51
5.2.1进程基础 51
5.2.2进程创建 51
5.2.3进程终止 54
5.2.4多进程并发服务器 56
5.2.5多进程并发服务器实例 57
5.3多线程服务器 63
5.3.1线程基础 64
5.3.2线程基础函数 64
5.3.3给新线程传递参数 66
5.3.4多线程并发服务器实例 68
5.3.5线程安全函数 72
5.3.6线程安全实例 77
5.3.7用函数参变量实现线程安全性 82
5.4本章小结 85
5.5实战检验 86
理论巩固 86
上机实战 86
第6章 名字与地址转换编程 87
6.1概述 87
6.2域名系统 87
6.3gethostbyname()函数 88
6.4RESUSEINET6解析器选项 91
6.5gethostbyname2函数对IPv6的支持 91
6.6gethostbyaddr()函数 93
6.7uname()函数 93
6.8gethostname函数 94
6.9getservbyname和getservbyport函数 95
6.10getaddrinfo、gai_strerror和hostserv函数 96
6.11freeaddrinfo函数 99
6.12使用getaddrinfo的TCP和UDP 100
6.13getnameinfo函数 105
6.14gethostbyaddr实例 105
6.15本章小结 106
6.16实战检验 107
理论巩固 107
上机实战 107
第7章 IPv4和IPv6编程 108
7.1IPv4客户与IPv6服务器 108
7.2IPv6客户与IPv4服务器 110
7.3IPv6ADDRFORM套接口选项 111
7.4IPv6地址测试宏 112
7.5源代码的可移植性 112
7.6本章小结 113
7.7实战检验 113
理论巩固 113
上机实战 113
第8章 守护进程和inetd超级服务器 114
8.1守护进程的原理 114
8.1.1启动守护进程 114
8.1.2输出守护进程消息 115
8.1.3syslog函数 115
8.1.4创建守护进程 118
8.1.5以守护进程方式运行的时间服务器 119
8.2inetd的工作原理 122
8.2.1概念 122
8.2.2工作流程 123
8.2.3inetd处理并发 125
8.3本章小结 125
8.4实战检验 126
理论巩固 126
上机实战 126
第9章 I/O编程 127
9.1I/O模型 127
9.2select函数 130
9.3shutdown函数 132
9.4poll函数 133
9.5使用select函数的TCP例子 135
9.6高级的I/O编程 140
9.6.1recv和send函数 140
9.6.2recvmsg和sendmsg函数 141
9.7非阻塞connect 143
9.8ioctl函数 145
9.8.1套接口操作 146
9.8.2文件操作 146
9.8.3接口配置 146
9.8.4接口操作 147
9.8.5ARP操作 148
9.8.6路由表操作 148
9.9本章小结 148
9.10实战检验 149
理论巩固 149
上机实战 149
第10章 广播与多播编程 150
10.1广播的概念 150
10.1.1广播的原理 150
10.1.2广播的示例 152
10.2多播概念 155
10.2.1多播与广播的比较 155
10.2.2多播套接口选项 156
10.2.3多播的实例 157
10.3本章小结 159
10.4理论与巩固 159
实战检验 159
上机实战 159
第11章 路由套接口编程 160
11.1概念和数据链路套接口地址结构 160
11.2sysctl操作 165
11.3接口名和索引函数 166
11.4本章小结 167
11.5实战检验 168
理论与巩固 168
上机实战 168
第12章 信号量编程 169
12.1信号的概念 169
12.2信号的概念及常见信号介绍 169
12.2.1signal函数 173
12.2.2处理SIGCHLD信号 174
12.2.3wait和waitpid函数 175
12.2.4kill和raise函数 177
12.2.5SIGPIPE信号 178
12.2.6alarm和pause函数 178
12.2.7sigprocmask函数 179
12.2.8sigpending函数 179
12.2.9sigaction函数 179
12.2.10sigsetjmp和siglongjmp函数 180
12.2.11sigsuspend函数 180
12.2.12abort函数 181
12.2.13system函数 181
12.2.14sleep函数 182
12.3例子:使用SIGIO的UDP回射服务器程序 183
12.4本章小结 188
12.5实战检验 188
理论巩固 188
上机实战 188
第13章 原始套接口与数据链路访问编程 189
13.1原始套接口创建 189
13.2原始套接口输出 190
13.3原始套接口输入 191
13.4原始套接字编程实例 191
13.4.1实例1:拒绝服务攻击 191
13.4.2实例2:ICMP包的构建、发送和接收 194
13.4.3实例3:ping程序 197
13.5数据链路层访问 202
13.5.1BPF:BSD分组过滤器 203
13.5.2数据链路提供者DLPI 203
13.5.3Linux的SOCK_PACKET 204
13.5.4分组捕获函数库libpcap 204
13.5.5libpcap的库函数 205
13.5.6数据链路层访问实例 209
13.6本章小结 213
13.7理论与巩固 214
实战检验 214
上机实战 214
第14章 实验指导 215
14.1Socket基本编程 215
14.2服务器与单客户的连接处理 218
14.3多进程服务器模板 221
14.4多线程编写模板 226
14.5线程专用数据TSD实现模板 230
参考文献 236