Part 1.简介和TCP/IP 1
Chapter 1.简介 3
1.1 概述 3
1.2 一个简单的时间获取客户程序 6
1.3 协议无关性 10
1.4 错误处理:包装函数 11
1.5 一个简单的时间获取服务器程序 13
1.6 本书中客户/服务器示例的路线图 16
1.7 OSI模型 18
1.8 BSD网络历史 20
1.9 测试用网络及主机 22
1.10 Unix标准 25
1.11 64位体系结构 28
1.12 小结 29
Chapter 2.传输层:TCP、UDP和SCTP 31
2.1 概述 31
2.2 全景图 32
2.3 用户数据报协议 34
2.4 传输控制协议 35
2.5 流控制传输协议 36
2.6 TCP连接的建立和终止 37
2.7 TIME_WAIT状态 43
2.8 SCTP关联的建立和终止 44
2.9 端口号 50
2.10 TCP端口号与并发服务器 52
2.11 缓冲区大小及限制 55
2.12 标准因特网服务 61
2.13 常见因特网应用所用的协议 62
2.14 小结 63
Part 2.基本套接字 65
Chanter 3.套接字简介 67
3.1 概述 67
3.2 套接字地址结构 67
3.3 值-结果参数 74
3.4 字节排序函数 77
3.5 字节操纵函数 80
3.6 inet_aton、inet_addr和inet_ntoa函数 82
3.7 inet_pton和inet_ntop函数 83
3.8 sock_ntop和相关函数 86
3.9 readn、writen和readline函数 88
3.10 小结 92
Chapter 4.基本TCP套接字 95
4.1 概述 95
4.2 socket函数 95
4.3 connect函数 99
4.4 bind函数 101
4.5 listen函数 104
4.6 accept函数 109
4.7 fork和exec函数 111
4.8 并发服务器 114
4.9 close函数 117
4.10 getsockname和getpeername函数 117
4.11 小结 120
Chapter 5.TCP客户/服务器示例 121
5.1 概述 121
5.2 TCP回送服务器程序:main函数 122
5.3 TCP回送服务器程序:str_echo函数 123
5.4 TCP回送客户程序:main函数 124
5.5 TCP回送客户程序:str_cli函数 125
5.6 正常启动 126
5.7 正常终止 128
5.8 POSIX信号处理 129
5.9 处理SIGCHLD信号 132
5.10 wait和waitpid函数 135
5.11 accept返回前连接异常中止 139
5.12 服务器进程的终止 141
5.13 SIGPIPE信号 142
5.14 服务器主机崩溃 144
5.15 服务器主机崩溃及重启 144
5.16 服务器主机关机 145
5.17 TCP示例小结 146
5.18 数据格式 147
5.19 小结 151
Chapter 6.I/O多路复用:select和poll函数 153
6.1 概述 153
6.2 I/O模型 154
6.3 select函数 160
6.4 再访str_cli函数 167
6.5 批量输入和缓冲 169
6.6 shutdown函数 172
6 7 三顾str_cli函数 173
6.8 再访TCP回送服务器程序 175
6.9 pselect函数 181
6.10 poll函数 182
6.1 1 三顾TCP回送服务器程序 185
6.12 小结 188
Chapter 7.套接字选项 191
7.1 概述 191
7.2 getsockopt和setsockopt函数 192
7.3 检查选项是否被支持并获取默认值 194
7.4 套接字状态 198
7.5 通用套接字选项 198
7.6 IPv4套接字选项 214
7.7 ICMPv6套接字选项 216
7.8 IPv6套接字选项 216
7.9 TCP套接字选项 219
7.10 SCTP套接字选项 222
7.1 1 fcntl函数 233
7.12 小结 236
Chapter 8.基本UDP套接字 239
8.1 概述 239
8.2 recvfrom和sendto函数 240
8.3 UDP回送服务器程序:main函数 241
8.4 UDP回送服务器程序:dg_echo函数 242
8.5 UDP回送客户程序:main函数 244
8.6 UDP回送客户程序:dg_cli函数 245
8.7 数据报的丢失 245
8.8 验证接收到的响应 246
8.9 服务器程序未运行 248
8.10 UDP示例小结 250
8.11 UDP的connect函数 252
8.12 再论dg_cli函数 256
8.13 UDP缺乏流量控制 257
8.14 UDP中的外出接口的确定 261
8.15 使用select函数的TCP和UDP回送服务器程序 262
8.16 小结 264
Chapter 9.基本SCTP套接字 267
9.1 概述 267
9.2 接口模型 268
9.3 sctp_bindx函数 272
9.4 sctp_connectx函数 274
9.5 sctp_getpaddrs函数 275
9.6 sctp_freepaddrs函数 275
9.7 sctp_get laddrs函数 275
9.8 sctp_freeladdrs函数 276
9.9 sctp_sendmsg函数 276
9.10 sctp_recvmsg函数 277
9.11 sctp_opt_info函数 278
9.12 sctp_peeloff函数 278
9.13 shutdown函数 278
9.14 通知 280
9.15 小结 286
Chapter 10.SCTP客户/服务器示例 287
10.1 概述 287
10.2 SCTP—到多式流分回送服务器程序:main函数 288
10.3 SCTP—到多式流分回送客户程序:main函数 290
10.4 SCTP流分回送客户程序:str_cli函数 292
10.5 探究头端阻塞 293
10.6 控制流的数目 299
10.7 控制终止 300
10.8 小结 301
Chapter 11.名字与地址转换 303
11.1 概述 303
11.2 域名系统 303
11.3 gethostbyname函数 307
11.4 gethostbyaddr函数 310
11.5 getservbyname和getservbyport函数 311
11.6 getaddrinfo函数 315
11.7 gai_strerror函数 320
11.8 freeaddrinfo函数 321
11.9 getaddrinfo函数:IPv6 322
11.10 getaddrinfo函数:示例 324
11.11 host_serv函数 325
11.12 tcp_connect函数 326
11.13 tcp_listen函数 330
11.14 udp_client函数 334
11.15 udp_connect函数 337
11.16 udp_server函数 338
11.17 getnameinfo函数 340
11.18 可重入函数 341
11.19 gethostbyname_r和gethostbyaddr_r函数 344
11.20 废弃的IPv6地址解析函数 346
11.21 其他联网信息 348
11.22 小结 349
Part 3.高级套接字 351
Chapter 12.IPv4与IPv6的互操作性 353
12.1 概述 353
12.2 IPv4客户与IPv6服务器 354
12.3 IPv6客户与IPv4服务器 357
12.4 IPv6地址测试宏 360
12.5 源代码可移植性 361
12.6 小结 362
Chapter 13.守护进程和 inetd超级服务器程序 363
13.1 概述 363
13.2 syslogd守护进程 364
13.3 syslog函数 365
13.4 daemon_init函数 367
13.5 inetd守护进程 371
13.6 daemon_inetd函数 377
13.7 小结 379
Chapter 14.高级I/O函数 381
14.1 概述 381
14.2 套接字超时 381
14.3 recv和send函数 387
14.4 readv和writev函数 389
14.5 recvmsg和sendmsg函数 390
14.6 辅助数据 395
14.7 排队的数据量 398
14.8 套接字和标准I/O 399
14.9 高级轮询技术 402
14.10 小结 408
Chapter 15.Unix域协议 411
15.1 概述 411
15.2 Unix域套接字地址结构 412
15.3 socketpair函数 414
15.4 套接字函数 415
15.5 Unix域流客户/服务器 416
15.6 Unix域数据报客户/服务器 418
15.7 描述符传递 420
15.8 接收发送者的凭证 429
15.9 小结 432
Chapter 16.非阻塞I/O 435
16.1 概述 435
16.2 非阻塞读和写:再论str_cli函数 437
16.3 非阻塞connect 448
16.4 非阻塞connect:时间获取客户程序 449
16.5 非阻塞connect:Web客户程序 452
16.6 非阻塞accept 461
16.7 小结 463
Chapter 17.ioctl操作 465
17.1 概述 465
17.2 ioctl函数 466
17.3 套接字操作 466
17.4 文件操作 468
17.5 接口配置 468
17.6 get_ifi_info函数 469
17.7 接口操作 480
17.8 ARP高速缓存操作 481
17.9 路由表操作 483
17.10 小结 484
Chapter 18.路由套接字 485
18.1 概述 485
18.2 数据链路套接字地址结构 486
18.3 读和写 487
18.4 sysctl操作 495
18.5 get_ifi_info函数 500
18.6 接口名字和索引函数 504
18.7 小结 508
Chapter 19.密钥管理套接字 511
19.1 概述 511
19.2 读和写 512
19.3 安全关联数据库的转储 514
19.4 创建静态安全关联 517
19.5 动态维护安全关联 524
19.6 小结 528
Chapter20.广播 529
20.1 概述 529
20.2 广播地址 531
20.3 单播和广播的比较 532
20.4 使用广播的dg_cli函数 535
20.5 竞争状态 538
20.6 小结 547
Chapter 21.多播 549
21.1 概述 549
21.2 多播地址 549
21.3 局域网上多播和广播的比较 553
21.4 广域网上的多播 556
21.5 源特定多播 558
21.6 多播套接字选项 559
21.7 mcast_join和相关函数 565
21.8 使用多播的dg_cli函数 570
21.9 接收IP多播基础设施会话声明 571
21.10 发送和接收 575
21.11 简单网络时间协议 579
21.12 小结 584
Chapter 22.高级UDP套接字 587
22.1 概述 587
22.2 接收标志、目的IP地址和接口索引 588
22.3 数据报截断 594
22.4 何时用UDP代替TCP 594
22.5 给UDP应用增加可靠性 597
22.6 绑定接口地址 608
22.7 并发UDP服务器 612
22.8 IPv6分组信息 615
22.9 IPv6路径MTU控制 618
22.10 小结 620
Chapter 23.高级SCTP套接字 621
23.1 概述 621
23.2 自动关闭的一到多式服务器程序 621
23.3 部分递送 622
23.4 通知 625
23.5 无序的数据 629
23.6 绑定地址子集 630
23.7 确定对端和本端地址信息 631
23.8 给定IP地址找出关联ID 635
23.9 心搏和地址不可达 636
23.10 关联剥离 637
23.11 定时控制 639
23.12 何时用SCTP代替TCP 641
23.13 小结 643
Chapter 24.带外数据 645
24.1 概述 645
24.2 TCP带外数据 645
24.3 sockatmark函数 654
24.4 TCP带外数据小结 661
24.5 小结 662
Chapter 25.信号驱动I/O 663
25.1 概述 663
25.2 套接字的信号驱动I/O 664
25.3 使用SIGIO的UDP回送服务器程序 666
25.4 小结 672
Chapter26.线程 675
26.1 概述 675
26.2 基本线程函数:创建和终止 676
26.3 使用线程的str_cli函数 679
26.4 使用线程的TCP回送服务器程序 681
26.5 线程特定数据 686
26.6 Web客户与同时连接(续) 694
26.7 互斥锁 697
26.8 条件变量 701
26.9 Web客户与同时连接(续) 705
26.10 小结 707
Chapter 27.IP选项 709
27.1 概述 709
27.2 IPv4选项 709
27.3 IP源路径选项 711
27.4 IPv6扩展首部 719
27.5 IPv6步跳选项和目的选项 719
27.6 IPv6路由首部 725
27.7 IPv6粘附选项 731
27.8 /历史性IPv6高级API 732
27.9 小结 733
Chapter 28.原始套接字 735
28.1 概述 735
28.2 原始套接字创建 736
28.3 原始套接字输出 737
28.4 原始套接字输入 739
28.5 ping程序 741
28.6 traceroute程序 755
28.7 一个ICMP消息守护进程 769
28.8 小结 786
Chapter 29.数据链路访问 787
29.1 概述 787
29.2 BSD分组过滤器 788
29.3 数据链路提供者接口 790
29.4 Linux:SOCK PACKET和PF PACKET 791
29.5 libpcap:分组捕获函数库 792
29.6 libnet:分组构造与注入函数库 793
29.7 检查UDP的校验和字段 793
29.8 小结 815
Chapter 30.多种客户/服务器设计方式 817
30.1 概述 817
30.2 各种TCP客户程序设计方式 819
30.3 TCP测试用客户程序 820
30.4 TCP迭代服务器程序 821
30.5 TCP并发服务器程序,每个客户一个子进程 822
30.6 TCP预先派生子进程服务器程序,accept无上锁保护 826
30.7 TCP预先派生子进程服务器程序,accept使用文件上锁保护 832
30.8 TCP预先派生子进程服务器程序,accept使用线程上锁保护 835
30.9 TCP预先派生子进程服务器程序,传递描述符 836
30.10 TCP并发服务器程序,每个客户一个线程 842
30.11 TCP预先创建线程服务器程序,每个线程各自accept 844
30.12 TCP预先创建线程服务器程序,主线程统一accept 846
30.13 小结 849
Chapter 31.STREAMS 851
31.1 概述 851
31.2 概貌 851
31.3 getmsg和putmsg函数 856
31.4 getpmsg和putpmsg函数 857
31.5 ioctl函数 857
31.6 传输提供者接口 858
31.7 小结 868
Appendix A.IPv4、IPv6、ICMPv4和ICMPv6 869
A.1 概述 869
A.2 IPv4首部 869
A.3 IPv6首部 871
A.4 IPv4地址 874
A.5 IPv6地址 877
A.6 因特网控制消息协议(ICMPv4和ICMPv6) 882
Appendix B.虚拟网络 885
B.1 概述 885
B.2 The MBone 885
B.3 The 6bone 887
B.4 IPv6过渡:6to4 889
Appendix C.调试技术 891
C.1 系统调用跟踪 891
C.2 标准因特网服务 893
C.3 sock程序 893
C 4 小测试程序 896
C.5 tcpdump程序 896
C.6 netstat程序 896
C.7 lsof程序 897
Appendix D.其他源代码 899
D.1 unp.h头文件 899
D.2 config.h头文件 904
D.3 标准错误处理函数 910
Appendix E.精选习题答案 913
参考文献 947