用TCP/IP进行网际互联第三卷:客户-服务器编程与应用(Linux/POSIX套接字版)
基本信息
- 原书名:Internetworking With TCP/IP Vol Ⅲ:Client-Server Programming And Applications Linux/POSIX Sockets V
编辑推荐
本书是一部关于计算机网络的经典教科书。它是目前美国大多数大学里所开设的计算机网络课程的主要参考书。目前国内外能见到的各种有关TCP/IP的书籍,其主要内容均出自本书。本书的特点是:强调原理、概念准确、深入浅出、内容丰富且新颖。全书共分为三卷。第三卷主要讨论应用软件如何使用TCP/IP,重点研究了客户-服务器范例,并考察了分布式程序中的客户和服务器,举例说明了各种设计,讨论了应用网关和隧道技术。第三卷共31章,各章之后附有很多很好的习题。本书可供计算机和通信专业的研究生、高年级本科生作为教科书和学习参考书,也可供从事科研和技术开发的人员参考。
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
Douglas Comer博士是TCP/IP协议和因特网的国际公认专家。自20世纪70年代末、80年代初形成因特网以来,他就一直致力于因特网的研究工作,他也是负责指导因特网开发的因特网体系小组(IAB)的成员,还是CSNET技术委员会的主席和CSNET执行委员会的成员。
Comer为一些公司提供网络设计和实现的咨询,还给全世界的技术和非技术人员开TCP/IP和互联网络的专业讲座。他的操作系统Ximu以及TCP/IP协议的实现在他的书中都有介绍,并且应用到了商业产品中。
Comer是Purdue大学计算机科学.. << 查看详细
Comer为一些公司提供网络设计和实现的咨询,还给全世界的技术和非技术人员开TCP/IP和互联网络的专业讲座。他的操作系统Ximu以及TCP/IP协议的实现在他的书中都有介绍,并且应用到了商业产品中。
Comer是Purdue大学计算机科学.. << 查看详细
目录回到顶部↑
第1章 引言和概述
1.1 使用tcp/ip的因特网应用
1.2 为分布式环境设计应用程序
1.3 标准和非标准的应用协议
1.4 使用标准应用协议的例子
1.5 telnet连接的例子
1.6 使用telnet访问其他服务
1.7 应用协议和软件的灵活性
1.8 从提供者的角度看服务
1.9 本教材的其余部分
1.10 小结
深入研究
习题
第2章 客户—服务器模型与软件设计
2.1 引言
2.2 动机
2.3 术语和概念
2.3.1 客户和服务器
2.3.2 特权和复杂性
2.3.3 标准和非标准客户软件
1.1 使用tcp/ip的因特网应用
1.2 为分布式环境设计应用程序
1.3 标准和非标准的应用协议
1.4 使用标准应用协议的例子
1.5 telnet连接的例子
1.6 使用telnet访问其他服务
1.7 应用协议和软件的灵活性
1.8 从提供者的角度看服务
1.9 本教材的其余部分
1.10 小结
深入研究
习题
第2章 客户—服务器模型与软件设计
2.1 引言
2.2 动机
2.3 术语和概念
2.3.1 客户和服务器
2.3.2 特权和复杂性
2.3.3 标准和非标准客户软件
前言回到顶部↑
Douglas E.Comer博士的系列著作——《用TCP/IP进行网际互联》是一套令人瞩目的丛书。能向开放源码(open source)读者介绍该书的第三卷,对我来说实在是荣幸之至。
开放源码和TCP/IP的历史是紧密相连的没有网络把你和合作者连接起来,就不能进行协作!而且,最早一批开放源码软件就有TCP/IP协议的实现。我记得在20世纪80年代初,“开放源码”还不像现在那样受媒体青睐,理解网络体系结构和实现的研究者屈指可数,而Douglas就是其中的佼佼者——他是一项广泛研究计划的负责人,全线出击,对当时遇到的很多问题提出挑战。
记得在20世纪90年代初,我们已经看到将技术应用到大工程领域的巨大趋势,这些领域渴望着知识和解决方案。那时,为公司构造基于互联网的环境,对工程师来说还是一个巨大的挑战。于是,Douglas便开始教导他们,让他们能够掌握下层网络的复杂性,给他们提供辛勤耕耘得来的经验教训。
21世纪来临了,新一代的设计者正在为因特网编写分布式应用程序。当前,我们听到许多激动人心的因特网应用,如 napster、gnutella以及infrasearcch。但奇怪的是,现在的开发人员很少有人牢固掌握网络工程原理——坦率地说,他们缺乏对基础的理解,这种缺乏不可避免地造成了应用程序的适应能力不强或者干脆就不能工作。 ’
正因为如此,Doug与David L.Stevens合著的第三卷:客户—服务器编程与应用才与今天的因特网息息相关。这本书教给我们如何设计和构建客户—服务器应用程序,而且更重要的是,它还教给我们如何理解每种设计决策中所蕴涵的利弊得失。
我希望读者能够像业界前辈一样,从Comer博士的智慧中获益。
Marshall T.Rose
Theorist,Implementor, and Agent Provocateur
Petaluma. California
开放源码和TCP/IP的历史是紧密相连的没有网络把你和合作者连接起来,就不能进行协作!而且,最早一批开放源码软件就有TCP/IP协议的实现。我记得在20世纪80年代初,“开放源码”还不像现在那样受媒体青睐,理解网络体系结构和实现的研究者屈指可数,而Douglas就是其中的佼佼者——他是一项广泛研究计划的负责人,全线出击,对当时遇到的很多问题提出挑战。
记得在20世纪90年代初,我们已经看到将技术应用到大工程领域的巨大趋势,这些领域渴望着知识和解决方案。那时,为公司构造基于互联网的环境,对工程师来说还是一个巨大的挑战。于是,Douglas便开始教导他们,让他们能够掌握下层网络的复杂性,给他们提供辛勤耕耘得来的经验教训。
21世纪来临了,新一代的设计者正在为因特网编写分布式应用程序。当前,我们听到许多激动人心的因特网应用,如 napster、gnutella以及infrasearcch。但奇怪的是,现在的开发人员很少有人牢固掌握网络工程原理——坦率地说,他们缺乏对基础的理解,这种缺乏不可避免地造成了应用程序的适应能力不强或者干脆就不能工作。 ’
正因为如此,Doug与David L.Stevens合著的第三卷:客户—服务器编程与应用才与今天的因特网息息相关。这本书教给我们如何设计和构建客户—服务器应用程序,而且更重要的是,它还教给我们如何理解每种设计决策中所蕴涵的利弊得失。
我希望读者能够像业界前辈一样,从Comer博士的智慧中获益。
Marshall T.Rose
Theorist,Implementor, and Agent Provocateur
Petaluma. California
序言回到顶部↑
Linux操作系统声名正旺,作为服务器系统,它对联网界尤其重要。这本使用Linux的新版第三卷是为那些渴望了解如何创建联网应用的程序员撰写的。大致说来,本书考察这样的问题,“应用软件如何使用TCP/IP协议通过因特网进行通信?”。本书重点研究了客户—服务器范例,并考察了在分布式程序中客户和服务器这两部分所用的算法。本卷举例说明了每种设计,并讨论了包括应用层网关和隧道等技术。另外,本卷还重温了几个标准应用协议,并用它们来说明一些算法和实现技术。
尽管本卷可以单独阅读和使用,但它实际是和另外两卷共同构成了一套丛书。丛书第一卷考虑的问题是:“什么是TCP/IP互联网?”;第二卷考察的问题是:“TCP/IP软件是如何工作的?”,它给出了更多的细节,考察了工作代码,比第一卷探讨得更深入。因此,虽然程序员可以只通过第三卷学习创建网络应用,但学习其他各卷可以更好地理解下层技术。
第三卷的这个新版本包含了最新的技术,如,有一章解释了Linux程序如何利用POSIX线程设施创建并发服务器;关于NFS的章节讨论了NFS的第三版,这一版将为Linux界采用。此外,还有部分章节解释了slirp等程序所蕴涵的概念,这种程序能通过拨号电话连接访问因特网,而不要求每台计算机有一个惟一的IP地址。
还有两章显得特别及时,它们集中讨论了流式概念以及相关的技术,这些技术用于通过因特网发送音频和视频数据。第28章描述了实时协议(RTP)、编码、抖动缓存等基本概念。第29章展示了用于接收和播放MP3音频的RTP实现。
本书代码可在线获得。要通过万维网得到一个副本,可在以下网址的联网书籍清单中查找第三卷:
http://www.cs.purdue.edu/homes/comer/netbooks.html
要通过FTP访问代码,使用以下网址:
ftp://ftp.cs.purdue.edu/pub/comer/TCPIP—vol3.1inux.dist.tar.Z
本书前几章介绍了客户—服务器模型,以及应用程序用于访问TCP/IP协议软件的套接字(socket)接口。此外,还描述了并发进程和用于创建进程的操作系统函数。随后的几章介绍了客户和服务器设计。
本书阐明了各式各样可能的设计并不是没有规则的。实际上,这些设计都遵循了一种模式。在考虑了并行性和传输的选择后,就可以理解这一观点。例如,有一章讨论了使用面向连接传输(如TCP)的非并发服务器设计,而另一章讨论了相似的设计,但它使用无连接传输(如UDP)。
我们描述了每个设计如何适应于各种可能的实现,但是,并没有试图开发一种客户—服务器交互的抽象“理论”。我们只是强调实用的设计原则,以及对程序员很重要的技术。每种技术在某些情况下都有其优点,并且每种技术都已用于正在工作的软件中。我们相信,理解这些设计之间的概念联系,将有助于读者理解每种方法的优缺点,并更容易在它们之间进行选择。
本书包含了多个例子程序,他们展现了各种设计实际上是如何进行的。大多数例子实现了标准的TCP/IP应用协议。在每一种情况下,我们都试图选择一个应用协议,使它可表达一种设计思路而又不太难理解。因此,虽然很少有令人激动的例子程序,但这里的每一个例子都说明了一个重要的概念。在第三卷的这个版本中,所有的例子程序都使用Linux套接字机制(即套接字API);本书还有两个其他版本,他们含有相同的例子,只不过使用了微软的windows Sockets和AT&T的TLI接口。
后几章集中讨论中间件,讨论了远程过程调用的概念,并描述它是怎样被用于构造分布式程序的。这些章将远程过程调用技术与客户—服务器模型相联系,并说明如何使用软件从远程过程调用描述生成出客户和服务器程序。有关TELNET的章节展现了细枝末节如何在一个实际工作的程序中占据支配地位,以及即使是实现一个简单的、面向字符的协议,其代码如何会变得复杂。本部分最后两章是关于流式传输协议的。
本书很大部分的重点在并发处理。编写过并发程序的学生可能熟悉我们所描述的许多概念,因为这些概念适用于所有的并发程序,而不仅仅是网络应用。没编写过并发程序的学生可能会觉得这些概念很难。
本书适于作为向高年级学生教授“套接字编程”,或向低年级研究生介绍分布式计算的一个学期的课程。由于本书重点是如何使用互联网,而不是互联网是如何工作的,因此学生几乎不需要太多的网络背景知识就能理解这些内容。只要教师按合适的进度循序渐进,本科生课程中不会有特别的概念令人感到太难。介绍操作系统概念或并发编程实际经验的基础课程,可提供最佳背景材料。
学生只有亲手使用教材后,才会欣赏它。因此,任何课程都应安排编程实践,强迫学生将其想法运用到实际程序中。大学本科生可通过反复设计其他的应用协议来学习基本概念。研究生则应构建更为复杂的分布式程序,这些程序强调一些细微的技术(如第16章中的并发管理技术和第18章和第19章中的互连技术)。
在此要感谢许多人的帮助。Purdue大学因特网研究小组的成员们给本书原稿提供了许多技术信息和建议。Michael Evangelista校对了本书并编写了RTP代码。Gustavo Rodriguez—Rivera阅读了本书的许多章节,并做了很多实验测试细节,还编辑了附录1。Dennis Brylow对本书许多章节提出了建议。Christine Comer进行了修订并改进了行文和一致性。
Douglas E.Comer
David L. Stevens
尽管本卷可以单独阅读和使用,但它实际是和另外两卷共同构成了一套丛书。丛书第一卷考虑的问题是:“什么是TCP/IP互联网?”;第二卷考察的问题是:“TCP/IP软件是如何工作的?”,它给出了更多的细节,考察了工作代码,比第一卷探讨得更深入。因此,虽然程序员可以只通过第三卷学习创建网络应用,但学习其他各卷可以更好地理解下层技术。
第三卷的这个新版本包含了最新的技术,如,有一章解释了Linux程序如何利用POSIX线程设施创建并发服务器;关于NFS的章节讨论了NFS的第三版,这一版将为Linux界采用。此外,还有部分章节解释了slirp等程序所蕴涵的概念,这种程序能通过拨号电话连接访问因特网,而不要求每台计算机有一个惟一的IP地址。
还有两章显得特别及时,它们集中讨论了流式概念以及相关的技术,这些技术用于通过因特网发送音频和视频数据。第28章描述了实时协议(RTP)、编码、抖动缓存等基本概念。第29章展示了用于接收和播放MP3音频的RTP实现。
本书代码可在线获得。要通过万维网得到一个副本,可在以下网址的联网书籍清单中查找第三卷:
http://www.cs.purdue.edu/homes/comer/netbooks.html
要通过FTP访问代码,使用以下网址:
ftp://ftp.cs.purdue.edu/pub/comer/TCPIP—vol3.1inux.dist.tar.Z
本书前几章介绍了客户—服务器模型,以及应用程序用于访问TCP/IP协议软件的套接字(socket)接口。此外,还描述了并发进程和用于创建进程的操作系统函数。随后的几章介绍了客户和服务器设计。
本书阐明了各式各样可能的设计并不是没有规则的。实际上,这些设计都遵循了一种模式。在考虑了并行性和传输的选择后,就可以理解这一观点。例如,有一章讨论了使用面向连接传输(如TCP)的非并发服务器设计,而另一章讨论了相似的设计,但它使用无连接传输(如UDP)。
我们描述了每个设计如何适应于各种可能的实现,但是,并没有试图开发一种客户—服务器交互的抽象“理论”。我们只是强调实用的设计原则,以及对程序员很重要的技术。每种技术在某些情况下都有其优点,并且每种技术都已用于正在工作的软件中。我们相信,理解这些设计之间的概念联系,将有助于读者理解每种方法的优缺点,并更容易在它们之间进行选择。
本书包含了多个例子程序,他们展现了各种设计实际上是如何进行的。大多数例子实现了标准的TCP/IP应用协议。在每一种情况下,我们都试图选择一个应用协议,使它可表达一种设计思路而又不太难理解。因此,虽然很少有令人激动的例子程序,但这里的每一个例子都说明了一个重要的概念。在第三卷的这个版本中,所有的例子程序都使用Linux套接字机制(即套接字API);本书还有两个其他版本,他们含有相同的例子,只不过使用了微软的windows Sockets和AT&T的TLI接口。
后几章集中讨论中间件,讨论了远程过程调用的概念,并描述它是怎样被用于构造分布式程序的。这些章将远程过程调用技术与客户—服务器模型相联系,并说明如何使用软件从远程过程调用描述生成出客户和服务器程序。有关TELNET的章节展现了细枝末节如何在一个实际工作的程序中占据支配地位,以及即使是实现一个简单的、面向字符的协议,其代码如何会变得复杂。本部分最后两章是关于流式传输协议的。
本书很大部分的重点在并发处理。编写过并发程序的学生可能熟悉我们所描述的许多概念,因为这些概念适用于所有的并发程序,而不仅仅是网络应用。没编写过并发程序的学生可能会觉得这些概念很难。
本书适于作为向高年级学生教授“套接字编程”,或向低年级研究生介绍分布式计算的一个学期的课程。由于本书重点是如何使用互联网,而不是互联网是如何工作的,因此学生几乎不需要太多的网络背景知识就能理解这些内容。只要教师按合适的进度循序渐进,本科生课程中不会有特别的概念令人感到太难。介绍操作系统概念或并发编程实际经验的基础课程,可提供最佳背景材料。
学生只有亲手使用教材后,才会欣赏它。因此,任何课程都应安排编程实践,强迫学生将其想法运用到实际程序中。大学本科生可通过反复设计其他的应用协议来学习基本概念。研究生则应构建更为复杂的分布式程序,这些程序强调一些细微的技术(如第16章中的并发管理技术和第18章和第19章中的互连技术)。
在此要感谢许多人的帮助。Purdue大学因特网研究小组的成员们给本书原稿提供了许多技术信息和建议。Michael Evangelista校对了本书并编写了RTP代码。Gustavo Rodriguez—Rivera阅读了本书的许多章节,并做了很多实验测试细节,还编辑了附录1。Dennis Brylow对本书许多章节提出了建议。Christine Comer进行了修订并改进了行文和一致性。
Douglas E.Comer
David L. Stevens








点击看大图







加载中...


