UNIX网络编程(第3版)——第1卷 套接口API
|
|
| 新书城图书编号:9656 |
| 图书ISBN:7302119740 |
| 出版时间:2006-3-28 |
| 出版社:清华大学出版社 |
| 作者:(美)史蒂文斯,(美)芬纳,(美)鲁道夫 著,杨继张 译 |
|
市场价格:¥98 |
|
普通会员:¥78.4
|
80折 |
|
VIP会员:¥73.5
|
75折 |
|
|
|
|
|
|
|
【图书简介】
|
本书第1版和第2版由已故UNIX网络专家W. Richard Stevens博士独自编写。本书是3版,由世界著名网络专家Bill Fenner和Andrew M. Rudoff执笔,根据近几年网络技术的发展,对上一版进行全面修订,增添了IPv6的更新过的信息、SCTP协议和密钥管理套接口的内容,删除了X/Open传输接口的内容。 本书全面深入地介绍了如何使用套接口API进行网络编程。全书从对套接口API的综合讨论开始,论述了基本编程内容后,即转入高级套接口编程的相关主题,包括IPv4与IPv6的互操作性、UNIX域协议、非阻塞I/O、路由套接口、广播、多播、线程、原始套接口、数据链路访问等,对于客户/服务器程序的各种设计方法也作了完整的探讨,最后还对流这种设备驱动机制作了深入分析。在附录中给出了IPv6、ICMPv6、虚拟网络等内容以及部分习题答案。 本书内容详尽且具权威性,几乎每章都提供精选的习题,是计算机和网络专业高年级本科生和研究生的首选教材,本书也可作为网络研究和开发人员的自学教材和参考书。
|
|
|
|
【图书目录】
|
第1部分 简介和TCP/IP 第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部分 基本套接口编程 第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)〖LM〗 第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.4 sctp_connectx函数(233) 9.5 sctp_getpaddrs函数(233) 9.6 sctp_freepaddrs函数(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章 SCTP客户/服务器程序例子(244) 10.1 概述(244) 10.2 SCTP一到多式流分回射服务器程序:main函数(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部分 高级套接口编程 第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章 高级I/O函数(327) 14.2 套接口超时(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章 Unix域协议(354) 15.1 概述(354) 15.2 Unix域套接口地址结构(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.3 非阻塞connect(384) 16.4 非阻塞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.7 小结(437) 18.8 习题(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.10TCP并发服务器程序,每个客户一个线程(727) 30.11 TCP预先创建线程服务器程序,每个线程各自accept(728) 30.12 TCP预先创建线程服务器程序,主线程统一accept(730) 30.13 小结(733) 30.14 习题(734) 第31章 流(735) 31.1 概述(735) 31.2 概貌(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部分 附录 附录 AIPv4、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 6to4:IPv6过渡(769) 附录C 调试技术(772) C.1 系统调用跟踪(772) C.2 标准因特网服务(775) C.3 sock程序(775) C.4 小测试程序(778) C.5 tcpdump程序(778) C.6 netstat程序(778) C.7 lsof程序(779) 附录D 杂凑的源代码(780) D.1 unp.h头文件(780) D.2 config.h头文件(784) D.3 标准错误处理函数(788) 附录E 部分习题解答(792) 附录F 参考文献(824) 附录G 函数和宏定义索引表(832) 附录H 结构定义索引表(834) 附录I 中英文对照词汇表(836)
|
|
|
|