前言页 1
前言 1
第1部分 简介和TCP/IP 1
第1章 简介 1
1.1 概述 1
1.2 一个简单的时间/日期客户程序 4
1.3 协议无关性 8
1.4 错误处理:包裹函数 9
1.5 一个简单的时间/日期服务器程序 10
1.6 书中客户-服务器程序例子索引表 13
1.7 OSI模型 15
1.9 测试用网络及主机 16
1.8 BSD网络支持历史 16
1.10 Unix标准 20
1.11 64位体系结构 22
1.12 小结 23
1.13 习题 24
第2章 传输层:TCP和UDP 25
2.1 概述 25
2.2 总图 25
2.3 UDP:用户数据报协议 27
2.4 TCP:传输控制协议 28
2.5 TCP连接的建立和终止 29
2.6 TIME_WAIT状态 35
2.7 端口号 36
2.8 TCP端口号与并发服务器 38
2.9 缓冲区大小及限制 39
2.10 标准因特网服务 44
2.11 常见因特网应用程序的协议使用 45
2.12 小结 46
2.13 习题 46
第2部分 基本套接口编程 47
第3章 套接口编程简介 47
3.1 概述 47
3.2 套接口地址结构 47
3.3 值-结果参数 52
3.4 字节排序函数 54
3.5 字节操纵函数 57
3.6 inet_aton、inet_addr和inet_ntoa函数 58
3.7 inet_pton和inet_ntop函数 59
3.8 sock_ntop和相关函数 62
3.9 readn、writen和readline函数 64
3.10 isfdtype函数 67
3.11 小结 68
3.12 习题 69
第4章 基本TCP套接口编程 70
4.1 概述 70
4.2 socket函数 70
4.3 connect函数 73
4.4 bind函数 75
4.5 listen函数 77
4.6 accept函数 83
4.7 fork和exec函数 85
4.8 并发服务器 87
4.9 close函数 89
4.10 getsockname和getpeername函数 90
4.11 小结 92
4.12 习题 92
第5章 TCP客户-服务器程序例子 93
5.1 概述 93
5.2 TCP回射服务器程序:main函数 94
5.3 TCP回射服务器程序:str_echo函数 95
5.4 TCP回射客户程序:main函数 95
5.5 TCP回射客户程序:str_cli函数 96
5.6 正常启动 97
5.7 正常终止 98
5.8 Posix信号处理 99
5.9 处理SIGCHLD信号 102
5.10 wait和waitpid函数 105
5.11 accept返回前连接夭折 108
5.12 服务器进程终止 110
5.13 SIGPIPE信号 111
5.14 服务器主机崩溃 113
5.15 服务器主机崩溃后重启 113
5.16 服务器主机关机 114
5.17 TCP程序例子小结 114
5.18 数据格式 116
5.19 小结 118
5.20 习题 119
第6章 I/O复用:select和poll函数 121
6.1 概述 121
6.2 I/O模型 121
6.3 select函数 126
6.4 str_cli函数(修订版) 131
6.5 批量输入 133
6.6 shutdown函数 135
6.7 str_cli函数(再修订版) 137
6.8 TCP回射服务器程序(修订版) 138
6.9 pselect函数 143
6.10 poll函数 144
6.11 TCP回射服务器程序(再修订版) 146
6.12 小结 149
6.13 习题 149
第7章 套接口选项 151
7.1 概述 151
7.2 getsockopt和setsockopt函数 151
7.3 检查选项是否受支持并获取缺省值 153
7.4 套接口状态 156
7.5 基本套接口选项 156
7.6 IPv4套接口选项 169
7.7 ICMPv6套接口选项 170
7.8 IPv6套接口选项 171
7.9 TCP套接口选项 172
7.10 fcntl函数 175
7.11 小结 178
7.12 习题 178
第8章 基本UDP套接口编程 180
8.1 概述 180
8.2 recvfrom和sendto函数 180
8.4 UDP回射服务器程序:dg_echo函数 182
8.3 UDP回射服务器程序:main函数 182
8.5 UDP回射客户程序:main函数 184
8.6 UDP回射客户程序:dg_cli函数 185
8.7 数据报的丢失 185
8.8 验证接收到的响应 186
8.9 服务器进程未运行 188
8.10 UDP程序例子小结 189
8.11 UDP的connect函数 191
8.12 dg-cli函数(修订版) 194
8.13 UDP缺乏流量控制 195
8.14 UDP中外出接口的确定 199
8.15 使用select函数的TCP和UDP回射服务器程序 200
8.16 小结 202
8.17 习题 202
9.2域名系统 204
第9章 基本名字与地址转换 204
9.1 概述 204
9.3 gethostbyname函数 207
9.4 RES_USE_ INET6解析器选项 211
9.5 gethostbyname2函数与IPv6支持 212
9.6 gethostbyaddr函数 214
9.7 uname函数 215
9.8 gethostname函数 216
9.9 getservbyname和getservbyport函数 216
9.10 其他网络相关信息 219
9.11 小结 220
9.12 习题 221
10.2 IPv4客户与IPv6服务器 222
10.1 概述 222
第3部分 高级套接口编程 222
第10章 IPv4和IPv6的互操作性 222
10.3 IPv6客户与IPv4服务器 226
10.4 IPv6地址测试宏 227
10.5 IPV6-ADDRFORM套接口选项 228
10.6 源代码可移植性 230
10.7 小结 230
10.8 习题 231
第11章 高级名字与地址转换 232
11.1 概述 232
11.2 getaddrinfo函数 232
11.3 gai_strerror函数 236
11.4 freeaddrinfo函数 237
11.5 getaddrinfo函数:IPv6和UNIX域 238
11.6 getaddrinfo函数:例子 240
11.7 host_serv函数 241
11.8 tcp_connect函数 242
11.9 tcp_listen函数 245
11.10 udp_client函数 250
11.11 udp_connect函数 252
11.12 udp-server函数 253
11.13 getnameinfo函数 255
11.14 可重入函数 256
11.15 gethostbyname_r和gethostbyaddr_r函数 259
11.16 getaddrinfo和getnameinfo函数的实现 261
11.17 小结 281
11.18 习题 282
第12章 守护进程和inetd超级服务器 283
12.1 概述 283
12.2 syslogd守护进程 284
12.3 syslog函数 284
12.4 daemon_init函数 287
12.5 inetd守护进程 290
12.6 daemon_inetd函数 294
12.7 小结 296
12.8 习题 297
第13章 高级I/O函数 298
13.1 概述 298
13.2 套接口超时 298
13.3 recv和send函数 302
13.4 readv和writev函数 304
13.5 recvmsg和sendmsg函数 305
13.6 辅助数据 309
13.7 排队的数据量 312
13.8 套接口与标准I/O 312
13.9 T/TCP:事务TCP 315
13.10 小结 317
13.11 习题 317
第14章 Unix域协议 318
14.1 概述 318
14.2 Unix域套接口地址结构 318
14.3 socketpair函数 321
14.4 套接口函数 321
14.5 Unix域字节流客户-服务器程序 322
14.6 Unix域数据报客户-服务器程序 323
14.7 描述字传递 325
14.8 接收发送者的凭证 332
14.9 小结 336
14.10 习题 336
第15章 非阻塞I/O 338
15.1 概述 338
15.2 非阻塞读和写:str_cli函数(修订版) 339
15.3 非阻塞connect 348
15.4 非阻塞connect:日期/时间客户程序 349
15.5 非阻塞connect:Web客户程序 352
15.6 非阻塞accept 360
15.7 小结 361
15.8 习题 362
第16章 ioctl操作 363
16.1 概述 363
16.2 ioctl函数 363
16.3 套接口操作 364
16.4 文件操作 365
16.5 接口配置 366
16.6 get_ifi_info函数 367
16.7 接口操作 375
16.8 ARP高速缓存操作 376
16.9 路由表操作 378
16.10 小结 378
16.11 习题 379
17.2 数据链路套接口地址结构 380
第17章 路由套接口 380
17.1 概述 380
17.3 读和写 381
17.4 sysctl操作 388
17.5 get_ifi_info函数 392
17.6 接口名和索引函数 395
17.7 小结 399
17.8 习题 400
第18章 广播 401
18.1 概述 401
18.2 广播地址 402
18.3 单播和广播的比较 403
18.4 使用广播的dg_cli函数 406
18.5 竞争状态 409
18.6 小结 416
18.7 习题 416
第19章 多播 417
19.1 概述 417
19.2 多播地址 417
19.3 局域网上多播和广播的比较 420
19.4 广域网上的多播 422
19.5 多播套接口选项 424
19.6 mcast_join和相关函数 427
19.7 使用多播的dg-cli函数 430
19.8 接收MBone会话声明 431
19.9 发送和接收 434
19.10 SNTP简单网络时间协议 436
19.11 SNTP(续) 440
19.12 小结 451
19.13 习题 452
第20章 高级UDP套接口编程 454
20.1 概述 454
20.2 接收标志、目的IP地址和接口索引 454
20.3 数据报截断 461
20.4 何时使用UDP而不是TCP 461
20.5 给UDP应用程序增加可靠性 463
20.6 捆绑接口地址 472
20.7 并发UDP服务器 476
20.8 IPv6分组信息 478
20.9 小结 480
20.10 习题 481
第21章 带外数据 482
21.1 概述 482
21.2 TCP带外数据 482
21.3 sockatmark函数 488
21.4 TCP带外数据小结 494
21.5 客户-服务器心博函数 495
21.6 小结 499
21.7 习题 499
第22章 信号驱动I/O 501
22.1 概述 501
22.2 套接口上的信号驱动I/O 501
22.3 使用SIGIO的UDP回射服务器程序 503
22.4 小结 508
22.5 习题 509
23.1 概述 510
第23章 线程 510
23.2 基本线程函数:创建和终止 511
23.3 使用线程的str_cli函数 513
23.4 使用线程的TCP回射服务器程序 515
23.5 线程特定数据 519
23.6 Web客户与同时连接 526
23.7 互斥锁 529
23.8 条件变量 532
23.9 Web客户与同时连接(续) 535
23.10 小结 537
23.11 习题 537
24.2 IPv4选项 539
第24章 IP选项 539
24.1 概述 539
24.3 IP源路径选项 540
24.4 IPv6扩展头部 547
24.5 IPv6步跳选项和目的选项 548
24.6 IPv6路由头部 551
24.7 IPv6粘附选项 554
24.8 小结 555
24.9 习题 555
第25章 原始套接口 557
25.1 概述 557
25.2 原始套接口创建 557
25.3 原始套接口输出 558
25.4 原始套接口输入 559
25.5 Ping程序 561
25.6 Traceroute程序 572
25.7 一个ICMP消息守护进程 583
25.8 小结 597
25.9 习题 597
第26章 数据链路访问 599
26.1 概述 599
26.2 BPF:BSD分组过滤器 599
26.3 DLPI:数据链路提供者接口 601
26.4 Linux:SOCK_PACKET 602
26.5 libpcap:分组捕获函数库 603
26.6 检查UDP的校验和字段 603
26.8 习题 619
26.7 小结 619
第27章 客户-服务器程序其他设计方法 620
27.1 概述 620
27.2 TCP客户程序其他设计方法 622
27.3 TCP测试用客户程序 623
27.4 TCP迭代服务器程序 624
27.5 TCP并发服务器程序,每个客户一个子进程 624
27.6 TCP预先派生子进程服务器程序,accept无上锁保护 627
27.7 TCP预先派生子进程服务器程序,accept使用文件锁保护 633
27.8 TCP预先派生子进程服务器程序,accept使用线程互斥锁保护 636
27.9 TCP预先派生子进程服务器程序,传递描述字 637
27.10 TCP并发服务器程序,每个客户一个线程 642
27.11 TCP预先创建线程服务器程序,每个线程各自accept 643
27.12 TCP预先创建线程服务器程序,主线程统一accept 645
27.13 小结 648
27.14 习题 649
第4部分 XTI:X/Open传输接口编程 650
第28章 XTI:TCP客户程序 650
28.1 概述 650
28.2 t_open函数 651
28.3 t_error和t_strerror函数 654
28.4 netbuf结构和XTI结构 655
28.5 t_bind函数 656
28.6 t_connect函数 658
28.7 t_rcv和t_snd函数 658
28.8 t_look函数 660
28.9 t_sndrel和t_rcvrel函数 661
28.10 t_snddis和t_rcvdis函数 662
28.11 XTI TCP时间/日期客户程序 663
28.12 xti_rdwr函数 666
28.13 小结 667
28.14 习题 667
第29章 XTI:名字与地址函数 668
29.1 概述 668
29.2 /etc/netconfig文件与netconfig函数 668
29.3 NETPATH环境变量与netpath函数 670
29.4 netdir函数 671
29.5 t_alloc和t_free函数 673
29.6 t_getprotaddr函数 675
29.7 xti_ntop函数 675
29.8 tcp_connect函数 676
29.10 习题 680
29.9 小结 680
30.1 概述 681
第30章 XTI:TCP服务器程序 681
30.2 t_listen函数 682
30.3 tcp_listen函数 683
30.4 t_accept函数 685
30.5 xti_accept函数 686
30.6 简单的时间/日期服务器程序 687
30.7 多个待处理连接 689
30.8 xti_accept函数(修订版) 691
30.9 小结 698
30.10 习题 698
31.2 t_rcvudata和t_sndudata函数 700
31.3 udp_client函数 700
31.1 概述 700
第31章 XTI:UDP客户和服务器程序 700
31.4 t_rcvuderr函数:异步错误 704
31.5 udp_server函数 706
31.6 分片读取数据报 708
31.7 小结 710
第32章 XTI选项 711
32.1 概述 711
32.2 t_opthdr结构 713
32.3 XTI选项 714
32.4 t_optmgmt函数 717
32.5 检查选项是否受支持并获取缺省值 718
32.6 获取和设置XTI选项 721
32.7 小结 724
33.1 概述 725
33.2 概貌 725
第33章 流 725
33.3 getmsg和putmsg函数 729
33.4 getpmsg和putpmsg函数 730
33.5 ioctl函数 731
33.6 TPI:传输提供者接口 731
33.7 小结 740
33.8习题 740
34.2 非阻塞I/O 741
34.3 t_rcvconnect函数 741
34.1 概述 741
第34章 XTI:其他函数 741
34.4 t_getinfo函数 742
34.5 t_getstate函数 742
34.6 t_sync函数 743
34.7 t_unbind函数 745
34.8 t_rcvv和t_rcvvudata函数 745
34.9 t_sndv和t_sndvudata函数 746
34.10 t_rcvreldata和t_sndreldata函数 746
34.11 信号驱动I/O 747
34.12 带外数据 748
34.13 回馈传输提供者 752
34.14 小结 753
A.2 IPv4头部 754
A.1 概述 754
附录A IPv4、IPv6、ICMPv4和ICMPv6 754
第5部分 附录 754
A.3 IPv6头部 755
A.4 IPv4地址 758
A.5 IPv6地址 762
A.6 ICMPv4和ICMPv6:网际控制消息协议 766
附录B 虚拟网络 769
B.1 概述 769
B.2 MBone 769
B.3 6bone 771
附录C 调试技术 773
C.1 系统调用跟踪 773
C.2 标准因特网服务 777
C.3 sock程序 778
C.4 小测试程序 780
C.5 tcpdump程序 782
C.6 netstat程序 782
C.7 lsof程序 783
附录D 杂凑的源代码 784
D.1 unp.h头文件 784
D.2 config.h头文件 787
D.3 unpxti.h头文件 789
D.4 标准错误处理函数 791
附录E 部分习题解答 794
附录F 参考文献 828
附录G 函数和宏定义索引表 837
附录H 结构定义索引表 840
附录I 中英文对照词汇表 842