基本信息
- 原书名:Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition)
- 原出版社: Addison-Wesley Professional
- 作者: (美)W. Richard Stevens Bill Fenner Andrew M. Rudoff
- 丛书名: 图灵程序设计丛书 操作系统
- 出版社:人民邮电出版社
- ISBN:9787115228406
- 上架时间:2010-6-28
- 出版日期:2010 年6月
- 开本:16开
- 页码:804
- 版次:1-1
- 所属分类:计算机 > 操作系统 > UNIX
编辑推荐
UNIX网络专家W. Richard Stevens的传世之作的最新版。
世界著名网络专家Bill Fenner和Andrew M. Rudoff执笔 紧跟网络技术新发展,深入探讨最新关键标准、实现和技术 所有示例均是在UNIX系统中测试通过的真实的、可运行的代码
内容简介
计算机书籍
这是一部传世之作!顶级网络编程专家Bill Fenner和Andrew M. Rudoff应邀执笔,对W. Richard Stevens的经典作品进行修订。书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。
书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调的理念:“学习网络编程的最好方法就是下载这些程序,对其进行修改和改进。只有这样实际编写代码才能深入理解有关概念和方法。”读者可以从图灵网站(www.turingbook.com)本书网页免费注册下载这些示例的源代码。
本书为UNIX网络编程提供全面的指导,是网络研究和开发人员公认的权威参考书,无论网络编程的初学者还是网络专家都会大受裨益。
作译者
Bill Fenner AT&T实验室的主要技术人员,专攻IP多播、网络管理和测量,他是IETF路由的领域主管之一,负责审批作为RFC出版的所有路由相关文档。
Andrew M. Rudoff Sun公司的资深软件工程师,专攻网络、操作系统内核、文件系统和高可用性软件体系结构。
目录
第1章 简介 2
1.1 概述 2
1.2 一个简单的时间获取客户程序 5
1.3 协议无关性 9
1.4 错误处理:包裹函数 10
1.5 一个简单的时间获取服务器程序 12
1.6 本书中客户/服务器程序示例索引表 14
1.7 OSI模型 16
1.8 BSD网络支持历史 17
1.9 测试用网络及主机 19
1.10 Unix标准 22
1.11 64位体系结构 24
1.12 小结 25
习题 25
第2章 传输层:TCP、UDP和SCTP 27
2.1 概述 27
2.2 总图 27
2.3 用户数据报协议(UDP) 29
2.4 传输控制协议(TCP) 30
前言
本书面向的读者是那些希望自己编写的程序能使用称为套接字(socket)的API进行彼此通信的人。有些读者可能已经非常熟悉套接字了,因为这个模型几乎已经成了网络编程的同义词,但有些读者可能仍需要从头开始学习。本书想达到的目标是向大家提供网络编程指导。这些内容不仅适用于专业人士,也适用于初学者;不仅适用于维护已有代码,也适用于开发新的网络应用程序;此外,还适用于那些只是想了解一下自己系统中网络组件的工作原理的人。
书中的所有示例都是在Unix系统上测试通过的真实的、可运行的代码。但是,考虑到许多非Unix的操作系统也支持套接字API,因而我们选取的示例与所讲述的一般性概念,在很大程度上是与操作系统无关的。几乎每种操作系统都提供了大量的网络应用程序,如网页浏览器、电子邮件客户端、文件共享服务器等。我们按常规的划分方法把这些应用程序分为客户程序和服务器程序,并在书中多次编写了相应的小型示例。
面向Unix介绍网络编程自然免不了要介绍Unix本身和TCP/IP的相关背景知识。需要更详尽的背景知识时,我们会指引读者查阅其他书籍。本书中经常提到以下4本书,我们将其简记如下:
APUE:Advanced Programming in the UNIX Environment [Stevens 1992];
TCPv1:TCP/IP Illustrated, Volume 1 [Stevens 1994];
TCPv2:TCP/IP Illustrated, Volume 2 [Wright and Stevens 1995];
TCPv3:TCP/IP Illustrated, Volume 3 [Stevens 1996]。
其中TCPv2包含了与本书内容密切相关的细节,它描述并给出了套接字API中网络编程函数(socket、bind、connect等)的真实4.4BSD实现。如果已经理解某个特性的实现,那么在应用程序中使用该特性就更有意义了。
与第2版的区别
从20世纪80年代开始,套接字就差不多是现在这个样子了。时至今日,套接字仍然是网络API的首选,其最初的设计的确值得称道。因此,当读者发现我们对出版于1998年的第2版又做了不少改动时,可能会觉得惊讶。本书中所做的改动归纳如下。
新版本包含了IPv6的最新信息。在第2版出版时,IPv6尚处于草案阶段,这些年来已经有所发展。
更新了全部函数和示例的描述,以反映最新的POSIX规范(POSIX 1003.1-2001),即Single Unix Specification Version 3。
删去了X/Open传输接口(XTI)的内容。这个API已经不常用了,连最新的POSIX 规范也不再提到。
删去了事务TCP协议(T/TCP)的内容。
新增了三章用于描述一种相对较新的传输协议——SCTP。这个可靠的面向消息的协议能够在两个端点之间提供多个流,并为多归属技术提供传输层支持。该协议最初是为了在因特网上传输电话信号而设计的,但它的一些特性可以用于许多应用。
新增一章描述密钥管理套接字,该套接字可用于网际协议安全(IPsec)和其他网络安全服务。
第2版中使用的机器及Unix变体都按最新版本更新,示例也根据机器的特性做了修改。许多情况下,修改示例是因为操作系统厂商修正了程序缺陷或者新增了特性。但读者可以想见,新的缺陷总能不时地被发现。本书中用于测试示例的机器如下:
运行MacOS/X 10.2.6的Apple Power PC;
运行HP-UX 11i 的HP PA-RISC;
序言
现在UUCP网络已经很罕见了,而无线网络等新技术则变得无处不在!在这种背景下,新的网络协议和编程范型业已开发出来,但程序员却苦于找不到一本好的参考书来学习这些复杂的新技术。
这本书填补了这一空白。拥有本书旧版的读者一定想要一个新的版本来学习新的编程方法,了解IPv6等下一代协议方面的新内容。所有人都非常期待本书,因为它完美地结合了实践经验、历史视角以及在本领域浸淫多年才能获得的透彻理解。
阅读本书是一种享受,我收获颇丰。相信大家定会有同感。
Sam Leffler
媒体评论
——Sam Leffler,FreeBSD基金会副主席
“这部著作在计算机科学领域里的传奇得以延续,Bill Fenner和Andrew Rudoff居功至伟。”
——Art Sedighi
“这套书是学习网络编程最好的书。全世界最最好的,远超群伦。”
——S. Devasundaram
——Thomas Haugland Jensen
“这本书不会让你一夜之间成为专家,但它终究会让你成为专家。”
——John Nguyen
书摘
SCTP是一个面向消息的协议,递送给用户的是部分的或完整的消息。部分消息的递送前提是应用进程选择向对端发送大消息(譬如大于套接字缓冲区一半大小)。部分消息被递送给应用进程之后,多个部分消息组合成单个完整消息并不由SCTP负责。在应用进程看来,一个消息既可以由单个输入操作接收,也可以由若干个相继的输入操作接收。我们将通过一个作为例子的函数说明处理这种部分递送机制的一个方法。
SCTP服务器程序既可以迭代运行,也可以并发运行,这取决于应用程序开发人员选取的套接字式样。SCTP还提供了从一到多式套接字抽取某个关联并使其成为一到一式套接字的方法。本方法允许构造既可迭代运行又可并发运行的服务器程序。
回顾我们在第10章中编写的服务器程序,它不保持任何关联状态,因为它依赖客户程序关闭关联。依赖客户关闭关联存在这样的弱点:要是客户打开一个关联后从不发送任何数据,将发生什么?服务器不得不将资源分配给从不使用这些资源的客户。懒惰的客户会无意中造成对于SCTP实现的拒绝服务攻击。