《UNIX网络编程 卷1 套接字联网API 英文版 第3版》PDF下载

  • 购买积分:25 如何计算积分?
  • 作  者:(美)W.RICHARD STEVENS,BILL FENNER,ANDREW M.RUDOFF著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2016
  • ISBN:9787115401304
  • 页数:956 页
图书介绍:本书是一部UNIX网络编程的经典之作!书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/服务器程序的各种设计方法也作了完整的探讨,最后还深入分析了流这种设备驱动机制。本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案,是网络研究和开发人员理想的参考书。

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