目录 1
第1部分 简介和TCP/IP 1
第1章 简介 1
1.1 概述 1
1.2 一个简单的时间获取客户程序 4
1.3 协议无关性 9
1.4 错误处理:包裹函数 10
1.5 一个简单的时间获取服务器程序 11
1.6 书中客户/服务器程序例子索引表 14
1.7 OSI模型 16
1.8 BSD网络支持历史 17
1.9 测试用网络及主机 18
1.10 Unix标准 21
1.11 64位体系结构 24
1.12 小结 25
1.13 习题 26
第2章 传输层:TCP、UDP和SCTP 27
2.1 概述 27
2.2 总图 27
2.3 UDP:用户数据报协议 30
2.4 TCP:传输控制协议 30
2.5 SCTP:流控制传输协议 31
2.6 TCP连接的建立和终止 32
2.7 TIME_WAIT状态 38
2.8 SCTP关联的建立和终止 39
2.9 端口号 43
2.10 TCP端口号与并发服务器 45
2.11 缓冲区大小及限制 47
2.12 标准因特网服务 52
2.13 常见因特网应用的协议使用 53
2.14 小结 54
2.15 习题 55
第2部分 基本套接口编程 56
第3章 套接口编程简介 56
3.1 概述 56
3.2 套接口地址结构 56
3.3 值-结果参数 62
3.4 字节排序函数 64
3.5 字节操纵函数 67
3.6 inet_aton、inet_addr和inet_ntoa函数 68
3.7 inet_pton和inet_ntop函数 69
3.8 sock_ntop和相关函数 71
3.9 readn、writen和readline函数 73
3.10 小结 77
3.11 习题 78
第4章 基本TCP套接口编程 79
4.1 概述 79
4.2 socket函数 79
4.3 connect函数 82
4.4 bind函数 84
4.5 listen函数 87
4.6 accept函数 92
4.7 fork和exec函数 94
4.8 并发服务器 96
4.9 close函数 98
4.10 getsockname和getpeername函数 99
4.11 小结 101
4.12 习题 101
第5章 TCP客户/服务器程序例子 103
5.1 概述 103
5.2 TCP回射服务器程序:main函数 104
5.3 TCP回射服务器程序:str_echo函数 105
5.4 TCP回射客户程序:main函数 106
5.5 TCP回射客户程序:str_cli函数 106
5.6 正常启动 107
5.7 正常终止 109
5.8 POSIX信号处理 110
5.9 处理SIGCHLD信号 113
5.10 wait和waitpid函数 115
5.11 accept返回前连接夭折 119
5.12 服务器进程终止 120
5.13 SIGPIPE信号 122
5.14 服务器主机崩溃 123
5.15 服务器主机崩溃后重启 124
5.16 服务器主机关机 124
5.17 TCP程序例子小结 125
5.18 数据格式 126
5.19 小结 129
5.20 习题 130
第6章 I/O复用:select和poll函数 131
6.1 概述 131
6.2 I/O模型 131
6.3 select函数 137
6.4 str_cli函数(修订版) 142
6.5 批量输入 144
6.6 shutdown函数 146
6.7 str_cli函数(再修订版) 148
6.8 TCP回射服务器程序(修订版) 149
6.9 pselect函数 154
6.10 poll函数 155
6.11 TCP回射服务器程序(再修订版) 158
6.12 小结 160
6.13 习题 161
第7章 套接口选项 162
7.1 概述 162
7.2 getsockopt和setsockopt函数 162
7.3 检查选项是否受支持并获取缺省值 165
7.4 套接口状态 168
7.5 通用套接口选项 169
7.6 IPv4套接口选项 182
7.7 ICMPv6套接口选项 184
7.8 IPv6套接口选项 184
7.9 TCP套接口选项 186
7.10 SCTP套接口选项 189
7.11 fcntl函数 198
7.12 小结 200
7.13 习题 201
第8章 基本UDP套接口编程 203
8.1 概述 203
8.2 recvfrom和sendto函数 204
8.3 UDP回射服务器程序:main函数 205
8.4 UDP回射服务器程序:dg_echo函数 205
8.5 UDP回射客户程序:main函数 207
8.6 UDP回射客户程序:dg_cli函数 208
8.7 数据报的丢失 208
8.8 验证接收到的响应 209
8.9 服务器进程未运行 211
8.10 UDP程序例子小结 212
8.11 UDP的connect函数 214
8.12 dg_cli函数(修订版) 218
8.13 UDP缺乏流量控制 219
8.14 UDP中的外出接口的确定 222
8.15 使用select函数的TCP和UDP回射服务器程序 223
8.16 小结 225
8.17 习题 225
第9章 基本SCTP套接口编程 227
9.1 概述 227
9.2 接口模型 227
9.3 sctp_bindx函数 231
9.6 sctp_freepaddrs函数 233
9.4 sctp_connectx函数 233
9.5 sctp_getpaddrs函数 233
9.7 sctp_getladdrs函数 234
9.8 sctp_freeladdrs函数 234
9.9 sctp_sendmsg函数 234
9.10 sctp_recvmsg函数 235
9.11 sctp_opt_info函数 235
9.12 sctp_peeloff函数 236
9.13 shutdown函数 236
9.14 通知 237
9.15 小结 242
9.16 习题 243
10.2 SCTP一到多式流分回射服务器程序:main函数 244
第10章 SCTP客户/服务器程序例子 244
10.1 概述 244
10.3 SCTP一到多式流分回射客户程序:main函数 246
10.4 SCTP流分回射客户程序:sctpstr_cli函数 248
10.5 探究头端阻塞 249
10.6 控制流的数目 255
10.7 控制终结 255
10.8 小结 257
10.9 习题 257
第11章 名字与地址转换 258
11.1 概述 258
11.2 域名系统 258
11.3 gethostbyname函数 261
11.4 gethostbyaddr函数 264
11.5 getservbyname和getservbyport函数 265
11.6 getaddrinfo函数 269
11.7 gai_strerror函数 274
11.8 freeaddrinfo函数 275
11.9 getaddrinfo函数:IPv6 275
11.10 getaddrinfo函数:例子 276
11.11 host_serv函数 278
11.12 tcp_connect函数 279
11.13 tcp_listen函数 282
11.14 udp_client函数 286
11.15 udp_connect函数 289
11.16 udp_server函数 290
11.17 getnameinfo函数 291
11.18 可重入函数 293
11.19 gethostbyname_r和gethostbyaddr_r函数 296
11.20 作废的IPv6地址解析函数 297
11.21 其他网络相关信息 298
11.22 小结 299
11.23 习题 300
第3部分 高级套接口编程 302
第12章 IPv4与IPv6的互操作性 302
12.1 概述 302
12.2 IPv4客户与IPv6服务器 302
12.3 IPv6客户与IPv4服务器 306
12.4 IPv6地址测试宏 308
12.5 源代码可移植性 309
12.6 小结 310
12.7 习题 310
第13章 守护进程和inetd超级服务器 311
13.1 概述 311
13.2 syslogd守护进程 311
13.3 syslog函数 312
13.4 daemon init函数 315
13.5 inetd守护进程 318
13.6 daemon inetd函数 324
13.7 小结 325
13.8 习题 326
14.2 套接口超时 327
第14章 高级I/O函数 327
14.1 概述 327
14.3 recv和send函数 332
14.4 readv和writev函数 333
14.5 recvmsg和sendmsg函数 334
14.6 辅助数据 338
14.7 排队的数据量 342
14.8 套接口和标准I/O 342
14.9 高级轮询技术 345
14.10 T/TCP:事务目的TCP 350
14.11 小结 352
14.12 习题 353
15.2 Unix域套接口地址结构 354
第15章 Unix域协议 354
15.1 概述 354
15.3 socketpair函数 356
15.4 套接口函数 357
15.5 Unix域字节流客户/服务器程序 358
15.6 Unix域数据报客户/服务器程序 360
15.7 描述字传递 361
15.8 接收发送者的凭证 368
15.9 小结 371
15.10 习题 371
第16章 非阻塞I/O 373
16.1 概述 373
16.2 非阻塞读和写:str_cli函数(修订版) 374
16.4 非阻塞connect:时间获取客户程序 384
16.3 非阻塞connect 384
16.5 非阻塞connect:Web客户程序 387
16.6 非阻塞accept 395
16.7 小结 397
16.8 习题 397
第17章 ioctl操作 398
17.1 概述 398
17.2 ioctl函数 398
17.3 套接口操作 400
17.4 文件操作 400
17.5 接口配置 401
17.6 get_ifi_info函数 402
17.7 接口操作 412
17.8 ARP高速缓存操作 413
17.9 路由表操作 415
17.10 小结 415
17.11 习题 416
第18章 路由套接口 417
18.1 概述 417
18.2 数据链路套接口地址结构 418
18.3 读和写 418
18.4 sysctl操作 426
18.5 get_ifi_info函数 429
18.6 接口名字和索引函数 432
18.8 习题 437
18.7 小结 437
第19章 密钥管理套接口 438
19.1 概述 438
19.2 读和写 439
19.3 倾泻安全关联数据库 440
19.4 创建静态安全关联 443
19.5 动态维护安全关联 449
19.6 小结 452
19.7 习题 453
第20章 广播 454
20.1 概述 454
20.2 广播地址 455
20.3 单播和广播的比较 457
20.4 使用广播的dg_cli函数 459
20.5 竞争状态 462
20.6 小结 469
20.7 习题 470
第21章 多播 471
21.1 概述 471
21.2 多播地址 471
21.3 局域网上多播和广播的比较 475
21.4 广域网上的多播 477
21.5 源特定多播 479
21.6 多播套接口选项 480
21.7 mcast_join和相关函数 485
21.8 使用多播的dg_cli函数 489
21.9 接收IP多播基础设施会话声明 490
21.10 发送和接收 494
21.11 SNTP:简单网络时间协议 497
21.12 小结 501
21.13 习题 501
第22章 高级UDP套接口编程 503
22.1 概述 503
22.2 接收标志、宿IP地址和接口索引 503
22.3 数据报截断 509
22.4 何时改用UDP代替TCP 509
22.5 给UDP应用增加可靠性 511
22.6 捆绑接口地址 521
22.7 并发UDP服务器 525
22.8 IPv6分组信息 527
22.9 IPv6路径MTU控制 530
22.10 小结 531
22.11 习题 531
第23章 高级SCTP套接口编程 533
23.1 概述 533
23.2 自动关闭的一到多式服务器程序 533
23.3 部分递送 534
23.4 通知 536
23.5 无序的数据 540
23.6 捆绑地址子集 540
23.7 确定对端和本端地址信息 542
23.8 给定IP地址找出关联ID 545
23.9 心搏和地址不可达 546
23.10 关联剥离 547
23.11 定时控制 548
23.12 何时改用SCTP代替TCP 550
23.13 小结 551
23.14 习题 551
第24章 带外数据 553
24.1 概述 553
24.2 TCP带外数据 553
24.3 sockatmark函数 560
24.4 TCP带外数据小结 565
24.5 客户-服务器心博函数 566
24.6 小结 570
24.7 习题 571
第25章 信号驱动I/O 572
25.1 概述 572
25.2 套接口的信号驱动I/O 572
25.3 使用SIGIO的UDP回射服务器程序 574
25.4 小结 580
25.5 习题 580
第26章 线程 581
26.1 概述 581
26.2 基本线程函数:创建和终止 582
26.3 使用线程的str_cli函数 584
26.4 使用线程的TCP回射服务器程序 586
26.5 线程特定数据 590
26.6 Web客户与同时连接 597
26.7 互斥锁 600
26.8 条件变量 604
26.9 Web客户与同时连接(续) 607
26.10 小结 609
26.11 习题 609
第27章 IP选项 611
27.1 概述 611
27.2 IPv4选项 611
27.3 IP源路径选项 613
27.4 IPv6扩展头部 620
27.5 IPv6步跳选项和目的地选项 621
27.6 IPv6路由头部 625
27.7 IPv6粘附选项 630
27.8 历史性IPv6高级API 631
27.9 小结 632
27.10 习题 632
第28章 原始套接口 633
28.1 概述 633
28.2 原始套接口创建 633
28.3 原始套接口输出 634
28.4 原始套接口输入 636
28.5 ping程序 638
28.6 traceroute程序 650
28.7 一个ICMP消息守护程序 663
28.8 小结 677
28.9 习题 678
第29章 数据链路访问 679
29.1 概述 679
29.2 BPF:BSD分组过滤器 679
29.3 DLpI:数据链路提供者接口 681
29.4 Linux:SOCK_PACKET和PF_PACKET 682
29.5 libpcap:分组捕获函数库 683
29.6 libnet:分组构造与输出函数库 684
29.7 检查UDP的校验和字段 684
29.8 小结 702
29.9 习题 703
第30章 客户/服务器程序设计范式 704
30.1 概述 704
30.2 TCP客户程序设计范式 706
30.3 TCP测试用客户程序 707
30.4 TCP迭代服务器程序 708
30.5 TCP并发服务器程序,每个客户一个子进程 709
30.6 TCP预先派生子进程服务器程序,accept无上锁保护 712
30.7 TCP预先派生子进程服务器程序,accept使用文件上锁保护 718
30.8 TCP预先派生子进程服务器程序,accept使用线程上锁保护 720
30.9 TCP预先派生子进程服务器程序,传递描述字 722
30.10 TCP并发服务器程序,每个客户一个线程 727
30.11 TCP预先创建线程服务器程序,每个线程各自accept 728
30.12 TCP预先创建线程服务器程序,主线程统一accept 730
30.13 小结 733
30.14 习题 734
31.2 概貌 735
第31章 流 735
31.1 概述 735
31.3 getmsg和putmsg函数 739
31.4 getpmsg和putpmsg函数 740
31.5 ioctl函数 741
31.6 TPI:传输提供者接口 741
31.7 小结 750
31.8 习题 750
第4部分 附录 751
附录A IPv4、IPv6、ICMPv4和ICMPv6 751
A.1 概述 751
A.2 IPv4头部 752
A.3 IPv6头部 753
A.4 IPv4地址 755
A.5 IPv6地址 759
A.6 ICMPv4和ICMPv6:网际控制消息协议 763
附录B 虚拟网络 767
B.1 概述 767
B.2 MBone 767
B.3 6bone 769
B.4 6t04:IPv6过渡 769
附录C 调试技术 772
C.1 系统调用跟踪 772
C.2 标准因特网服务 775
C.3 sock程序 775
C.6 netstat程序 778
C.4 小测试程序 778
C.5 tcpdump程序 778
C.7 lsof程序 779
附录D 杂凑的源代码 780
D.1 unp.h头文件 780
D.2 configh头文件 784
D.3 标准错误处理函数 788
附录E 部分习题解答 792
附录F 参考文献 824
附录G 函数和宏定义索引表 832
附录H 结构定义索引表 834
附录I 中英文对照词汇表 836