基本信息·出版社:电子工业出版社 ·页码:431 页 ·出版日期:2007年09月 ·ISBN:7505365908 ·条形码:9787505365902 ·版本:第1版 ·装帧:平装 · ...
商家名称 |
信用等级 |
购买信息 |
订购本书 |
|
|
用TCP/TP进行网际互联(第3卷):客户-服务器编程与应用(Linux.POSIX套接字版) |
|
|
|
用TCP/TP进行网际互联(第3卷):客户-服务器编程与应用(Linux.POSIX套接字版) |
|
基本信息·出版社:电子工业出版社
·页码:431 页
·出版日期:2007年09月
·ISBN:7505365908
·条形码:9787505365902
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:国外计算机科学教材系列
·外文书名:Internetworking With TCP/IP Vol Ⅲ:Client-Server Programming And Applications Linux/POSIX Sockets Version
内容简介 《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》是一部关于计算机网络的经典教科书。它是目前美国大多数大学里所开设的计算机网络课程的主要参考书。目前国内外能见到的各种有关TCP/IP的书籍,其主要内容均出自《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》。《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》的特点是:强调原理、概念准确、深入浅出、内容丰富且新颖。全书共分为三卷。第三卷主要讨论应用软件如何使用TCP/IP,重点研究了客户-服务器范例,并考察了分布式程序中的客户和服务器,举例说明了各种设计,讨论了应用网关和隧道技术。第三卷共31章,各章之后附有很多很好的习题。《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》可供计算机和通信专业的研究生、高年级本科生作为教科书和学习参考书,也可供从事科研和技术开发的人员参考。
作者简介 David L.Stevens,TCP/IP协议和Internet的国际公认专家,一直致力于Internet的研完工作。他是负责指导Internet,开发的Internet体系委员会(IAB)成员,还是CSNET技术委员会的主席和CSNET执行委员会的成员。Comer是美国普度大学计算机科学系的教授,主要讲授计算机网络、互联网络和操作系统的课程,并且进行相关的研究。他是多本畅销书的作者,包括三卷本《用TCP/IP进行网际互联》、《计算机网络与互联网》等。
编辑推荐 《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》是经典的“用TCP/IP进行网际互联”系列丛书的第三卷。作者讲解了应用程序软件如何利用TCP/IP在Intemet上通信,并且这一版对全书内容进行了重新组织和全面更新。书中解释了客户/服务器范例及应用程序用于网络通信的套接字API,讨论了如何使用基本工具来创建服务器,并重点强调了实际的设计过程和技术,这些概念对于编程人员都是非常重要的。
《用TCP/TP进行网际互联第三卷:客户-服务器编程与应用》的主要特点:
对于实际的客户/服务器设计原则和技术,分别就每种方法的优点和缺点进行了讨论
全面介绍了服务器技术,说明了如何选择服务器算法和构建高级服务器以满足应用程序的需要
讨论了适用于万维网的各种服务器设计和其他一些应用程序
关于流技术和实时传输协议的章节解释了如何在互联网上传输音频和视频
在说明每一种客户/服务器设计时都加以详细的示例,这些示例在Linux系统中已经过测试,并且可以在网上下载书中的所有代码
验证了应用网关和隧道技术等高级技术
详细解释了远程过程调用(RCP),以及如何用于构建分布式程序。
目录 第1章引言和概述
1.1使用TCP/IP的因特网应用
1.2为分布式环境设计应用程序
1.3标准和非标准的应用协议
1.4使用标准应用协议的例子
1.5telnet连接的例子
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标准和非标准客户软件
2.3.4客户的参数化
2.3.5无连接的和面向无连接的服务器
2.3.6无状态和有状态服务器
2.3.7无状态文件服务器的例子
2.3.8有状态文件服务器的例子
2.3.9标识客户
2.3.10无状态是一个协议问题
2.3.11充当客户的服务器
2.4小结
深入研究
习题
第3章客户-服务器软件中的并发处理
3.1引言
3.2网络中的并发
3.3服务器中的并发
3.4术语和概念
3.4.1进程概念
3.4.2局部和全局变量的共享
3.4.3过程调用
3.5一个创建并发进程的例子
3.5.1一个顺序执行的C实例
3.5.2程序的并发版本
3.5.3时间分片
3.5.4单线程的进程
3.5.5使各进程分离
3.6执行新的代码
3.7上下文切换和协议软件设计
3.8并发和异步I/O
3.9小结
深入研究
习题
第4章协议的程序接口
4.1引言
4.2不精确指明的协议软件接口
4.2.1优点与缺点
4.3接口功能
4.4概念性接口的规约
4.5系统调用
4.6网络通信的两种基本方法
4.7LINIx中提供的基本I/O功能
4.8将LinuxI/O用于TCP/IP
4.9小结
深入研究
习题
第5章套接字API
5.1引言
5.2Berkeley套接字
5.3指明一个协议接口
5.4套接字的抽象
5.4.1套接字描述符和文件描述符
5.4.2针对套接字的系统数据结构
5.4.3主动套接字或被动套接字
5.5指明端点地址
5.6类属地址结构
5.7套接字API中的主要系统调用
5.7.1socket调用
5.7.2connect调用
5.7.3send调用
5.7.4recv调用
5.7.5close调用
5.7.6bind调用
5.7.7listen调用
5.7.8accept调用
5.7.9在套接字中使用read和write
5.7.10套接字调用小结
5.8用于整数转换的实用例程
5.9在程序中使用套接字调用
5.10套接字调用的参数所使用的符号常量
5.11小结
深入研究
习题
第6章客户软件设计中的算法和问题
6.1引言
6.2不是研究细节而是学习算法
6.3客户体系结构
6.4标识服务器的位置
6.5分析地址参数
6.6查找域名
6.7由名字查找某个熟知端口
6.8端口号和网络字节顺序
6.9由名字查找协议
6.10TCP客户算法
6.11分配套接字
6.12选择本地协议端口号
6.13选择本地IP地址中的一个基本问题
6.14将TCP套接字连接到某个服务器
6.15使用TCP与服务器通信
6.16从TCP连接中读取响应
6.17关闭TCP连接
6.17.1对部分关闭的需要
6.17.2部分关闭的操作
6.18UDP客户的编程
6.19连接的和非连接的UDP套接字
6.20对UDP使用connect
6.2l使用UDP与服务器通信
6.22关闭使用UDP的套接字
6.23对UDP的部分关闭
6.24关于UDP不可靠性的警告
6.25小结
深入研究
习题
第7章客户软件举例
7.1引言
7.2小例子的重要性
7.3隐藏细节
7.4针对客户程序的过程库例子
7.5connectTCP的实现
7.6connectUDP的实现
7.7构成连接的过程
7.8使用例子库
7.9DAYTIME服务
7.10针对DAYTIME的TCP客户实现
7.1l从TCP连接中进行读
7.12TIME服务
7.13访问TIME服务
7.14精确时间和网络时延
7.15针对TIME服务的UDP客户
7.16.ECHO服务
7.17针对ECHO服务的TCP客户
7.18针对ECHO服务的UDP客户
7.19小结
深入研究
习题
第8章服务器软件设计的算法和问题
8.1引言
8.2概念性的服务器算法
8.3并发服务器和循环服务器
8.4面向连接的和无连接的访问
8.5传输协议的语义
8.5.1TCP语义
8.5.2UDP语义
8.6选择传输协议
8.7面向连接的服务器
8.8无连接的服务器
8.9故障、可靠性和无状态
8.10优化无状态服务器
8.11四种基本类型的服务器
8.12请求处理时间
8.13循环服务器的算法
8.14一种循环的、面向连接的服务器的算法
8.15用INADDR_ANY绑定熟知端口
8.16将套接字置于被动模式
8.17接受连接并使用这些连接
8.18循环的、无连接的服务器的算法
8.19在无连接的服务器中构造应答
8.20并发服务器的算法
8.21主线程和从线程
8.22并发的、无连接的服务器的算法
8.23并发的、面向连接服务器的算法
8.24服务器并发性的实现
8.25把单独的程序作为从进程来使用
8.26使用单线程获得表面上的并发性
8.27各服务器类型所适用的场合
8.28服务器类型小结
8.29重要问题--服务器死锁
8.30其他的实现方法
8.31小结
深入研究
习题
第9章循环的、无连接服务器(UDP)
9.1引言
9.2创建被动套接字
9.3进程结构
9.4TIME服务器举例
9.5小结
深入研究
习题
第10章循环的、面向连接的服务器(TCP)
10.1引言
10.2分配被动的TCP套接字
10.3用于DAYTIME服务的服务器
10.4进程结构
10.5DAYTIME服务器举例
10.6关闭连接
10.7连接终止和服务器的脆弱性
10.8小结
深入研究
习题
第11章并发的、面向连接的服务器(TCP)
11.1引言
11.2并发ECHO
11.3循环与并发实现的比较
11.4进程结构
11.5并发ECHO服务器举例
11.6清除游离(errant)进程
11.7小结
深入研究
习题
第12章将线程用于并发(TCP)
12.1引言
12.2Linux线程概述
12.3线程的优点
12.4线程的缺点
12.5描述符、延迟和退出
12.6线程退出
12.7线程协调和同步
12.7.1互斥
12.7.2信号量
12.7.3条件变量
12.8使用线程的服务器实例
12.9监控
12.10小结
深入研究
习题
第13章单线程、并发服务器(TCP)
13.1引言
13.2服务器中的数据驱动处理
13.3用单线程进行数据驱动处理
13.4单线程服务器的线程结构
13.5单线程ECHO服务器举例
13.6小结
深入研究
习题
第14章多协议服务器(TCP,UDP)
14.1引言
14.2减少服务器数量的动机
14.3多协议服务器的设计
14.4进程结构
14.5多协议DAYTIME服务器的例子
14.6共享代码的概念
14.7并发多协议服务器
14.8小结
深入研究
习题
第15章多服务服务器(TCP,UDP)
15.1引言
15.2合并服务器
15.3无连接的、多服务服务器的设计
15.4面向连接的、多服务服务器的设计
15.5并发的、面向连接的、多服务服务器
15.6单线程的、多服务服务器的实现
15.7从多服务服务器调用单独的程序
15.8多服务、多协议设计
15.9多服务服务器的例子
15.10静态的和动态的服务器配置
15.11UNIX超级服务器,inetd
15.12inetd服务器的例子
15.13服务器的几种变形清单
15.14小结
深入研究
习题
第16章服务器并发性的统一、高效管理
16.1引言
16.2在循环设计和并发设计间选择
16.3并发等级
16.4需求驱动的并发
16.5并发的代价
16.6额外开销和时延
16.7小时延可能出麻烦
16.8从线程/进程预分配
16.8.1Linux中的预分配
16.8.2面向连接服务器中的预分配
16.8.3互斥、文件锁定和accept并发调用
16.8.4无连接服务器中的预分配
16.8.5预分配、突发通信量和NFS
16.8.6多处理器上的预分配
16.9延迟的从线程/进程分配
16.10两种技术统一的基础
16.11技术的结合
16.12小结
深入研究
习题
第17章客户进程中的并发
17.1引言
17.2并发的优点
17.3运用控制的动机
17.4与多个服务器的并发联系
17.5实现并发客户
17.6单线程实现
17.7使用ECHO的并发客户例子
17.8并发客户的执行
17.9例子代码中的并发性
17.10小结
习题
第18章运输层和应用层的隧道技术
18.1引言
18.2多协议环境
18.3混合网络技术
18.4动态电路分配
18.5封装和隧道技术
18.6通过IP互联网的隧道技术
18.7客户和服务器之间的应用级隧道技术
18.8隧道技术、封装和电话拨号线
18.9小结
深入研究
习题
第19章应用级网关
19.1引言
19.2在受约束的环境中的客户和服务器
19.2.1限制访问的现实
19.2.2有限功能的计算机
19.2.3安全性引起的连通性约束
19.3使用应用网关
19.4通过邮件网关互操作
19.5邮件网关的实现
19.6应用网关与隧道技术的比较
19.7应用网关和有限因特网连接
19.8为解决安全问题而使用的应用网关
19.9应用网关和额外跳问题
19.10应用网关举例
19.11一个应用网关的实现
19.12应用网关的代码
19.13网关交换的例子
19.14使用rfcd和.forward或slocal文件
19.15通用的应用网关
19.16SLIRP的运行
19.17SLIRP如何处理连接
19.18IP寻址和SLIRP
19.19小结
深入研究
习题
第20章外部数据表示(XDR)
20.1引言
20.2数据表示
20.3N平方转换问题
20.4网络标准字节顺序
20.5外部数据表示的事实上的标准
20.6XDR数据类型
20.7隐含类型
20.8使用XDR的软件支持
20.9XDR库例程
20.10一次一片地构造报文
20.11XDR库中的转换例程
20.12XDR流、I/O和TCP
20.13记录、记录边界和数据报I/O
20.14小结
深入研究
习题
第21章远程过程调用(RPC)的概念
21.1引言
21.2远程过程调用模型
21.3构建分布式程序的两种模式
21.4常规过程调用的概念性模型
21.5过程模型的扩充
21.6常规过程调用的执行和返回
21.7分布式系统中的过程模型
21.8客户-服务器和RPC之间的类比
21.9作为程序的分布式计算
21.10SunMicrosystems的远程过程调用定义
21.11远程程序和过程
21.12减少参数的数量
21.13标识远程程序和过程
21.14适应远程程序的多个版本
21.15远程程序中的互斥
21.16通信语义
21.17至少一次语义
21.18RPC重传
21.19将远程程序映射到协议端口
21.20动态端口映射
21.21RPC端口映射器算法
21.22ONCRPC的报文格式
21.23对远程过程进行参数排序
21.2421.24鉴别
21.2521.25RPC报文表示的例子
21.26UNIX鉴别字段的例子
21.27小结
深入研究
习题
第22章分布式程序的生成(rpcgen的概念)
22.1引言
22.2使用远程过程调用
22.3支持RPC的编程工具
22.4将程序划分成本地过程和远程过程
22.5为RPC增加代码
22.6stub过程
22.7多个远程过程和分派
22.8客户端的stub过程的名字
22.9使用rpcgen生成分布式程序
22.10rpcgen输出和接口过程
22.11rpcgen的输入和输出
22.12使用rpcgen构建客户和服务器
22.13小结
深入研究
习题
第23章分布式程序的生成(rpcgen的例子)
23.1引言
23.2说明rpcgen的例子
23.3查找字典
23.4分布式程序的八个步骤
23.5步骤1:构建常规应用程序
23.6步骤2:将程序划分成两部分
23.7步骤3:创建rpcgen规约
23.8步骤4:运行rpcgen
23.9rpcgen产生的.h文件
23.10rpcgen产生的XDR转换文件
23.11rpcgen产生的客户代码
23.12rpcgen产生的服务器代码
23.13步骤5:编写stub接口过程
23.13.1客户端接口例程
23.13.2服务器端接口例程
23.14步骤6:编译和链接客户程序
23.15步骤7:编译和链接服务器程序
23.16步骤8:启动服务器和执行客户
23.17使用make实用程序
23.18小结
深入研究
习题
第24章网络文件系统(NFS)的概念
24.1引言
24.2远程文件存取和传送
24.3对远程文件的操作
24.4异构计算机之间的文件存取
24.5无状态服务器
24.6NFS和UNIX的文件语义
24.7UNIX文件系统的回顾
24.7.1基本定义
24.7.2无记录界限的字节序列
24.7.3文件拥有者和组标识符
24.7.4保护和存取
24.7.5打开-读-写-关闭范例
24.7.6数据传送
24.7.7搜索目录权限
24.7.8随机存取
24.7.9搜索超过文件的结束
24.7.10文件位置和并发存取
24.7.11在并发存取时的“写(write)”语义
24.7.12文件名和路径
24.7.13索引节点(inode):存储在文件中的信息
24.7.14stat操作
24.7.15文件命名机制
24.7.16文件系统mount
24.7.17UNIX文件名解析
24.7.18符号链接
24.8NFS下的文件
24.9NFS的文件类型
24.10NFS文件模式
24.11NFS文件属性
24.12NFS客户和服务器
24.13NFS客户操作
24.14NFS客户与UNIX系统
24.15NFS安装
24.16文件句柄
24.17句柄取代路径名
24.18无状态服务器的文件定位
24.19对目录的操作
24.20无状态地读目录
24.21NFS服务器中的多个分层结构
24.22安装(mount)协议
24.23NFS的传输协议
24.24小结
深入研究
习题
第25章网络文件系统协议(NFS,Mount)
25.1引言
25.2用RPC定义协议
25.3用数据结构和过程定义协议
25.4NFS常数、类型和数据声明
25.4.1NFS常数
25.4.2NFS的typedef声明
25.4.3NFS数据结构
25.5NFS过程
25.6NFS操作的语义
25.6.1NFSPROC3_NULL(过程0)
25.6.2NFSPROC3_GETATTR(过程1)
25.6.3NFSPROC3_SETATTR(过程2)
25.6.4NFSPROC3_LOOKUP(过程3)
25.6.5NFSPROC3_ACCESS(过程4)
25.6.6NFSPROC3_READLINK(过程5)
25.6.7NFSPROC3_READ(过程6)
25.6.8NFSPROC3_WRITE(过程7)
25.6.9NFSPROC3_CREATE(过程8)
25.6.10NFSPROC3_MKDIR(过程9)
25.6.11NFSPROC3_SYMLINK(过程10)
25.6.12NFSPROC3_MKNOD(过程11)
25.6.13NFSPROC3_REMOVE(过程12)
25.6.14NFSPROC3_RMDIR(过程13)
25.6.15NFSPROC3_RENAME(过程14)
25.6.16NFSPROC3_LINK(过程15)
25.6.17NFSPROC3_READDIR(过程16)
25.6.18NFSPROC3_READDIRPLUS(过程17)
25.6.19NFSPROC3_FSSTAT(过程18)
25.6.20NFSPROC3_FSINO(过程19)
25.6.21NFSPROC3_PATHCONF(过程20)
25.6.22NFSPROC3_COMMIT(过程21)
25.7安装协议
25.7.1安装协议的常数定义
25.7.2安装协议的类型定义
25.7.3安装数据结构
25.8安装协议中的过程
25.9安装操作的语义
25.9.1MOUNTPROC3_NULL(过程0)
25.9.2MOUNTPROC3_MNT(过程1)
25.9.3MOUNTPROC3_DUMP(过程2)
25.9.4MOUNTPROC3_UMNT(过程3)
25.9.5MOUNTPROC3_UMNTALL(过程4)
25.9.6MOUNTPROC3_EXPORT(过程5)
25.10NFS和安装鉴别
25.11文件加锁
25.12NFS第3版与第4版之间的变化
25.13小结
深入研究
习题
第26章TELNET客户(程序结构)
26.1引言
26.2概述
26.2.1用户终端
26.2.2命令和控制信息
26.2.3终端、窗口和文件
26.2.4对并发性的需要
26.2.5TELNET客户的过程模型
26.3TELNET客户算法
26.4Linux中的终端I/O
26.4.1控制设备驱动器
26.5建立终端模式
26.6用于保存状态的全局变量
26.7在退出之前恢复终端模式
26.8客户挂起与恢复
26.9有限状态机的规约
26.10在TELNET数据流中嵌入命令
26.11选项协商296
26.12请求/提供的对称性
26.13TELNET字符定义
26.14针对来自服务器数据的有限状态机
26.15在各种状态之间转移
26.16有限状态机的实现
26.17压缩的有限状态机表示
26.18在运行时维持压缩表示
26.19压缩表示的实现
26.20构造有限状态机转移矩阵
26.21套接字输出有限状态机
26.22套接字输出有限状态机的相关定义
26.23选项子协商有限状态机
26.24选项子协商有限状态机的相关定义
26.25有限状态机初始化
26.26TELNET客户的参数
26.27TELNET客户的核心
26.28主有限状态机的实现
26.29小结
深入研究
习题
第27章TELNET客户(实现细节)
27.1引言
27.2有限状态机动作过程
27.3记录选项请求的类型
27.4完成空操作
27.5对回显选项的WILL/WONT做出响应
27.6对未被支持的选项的WILL/WONT做出响应
27.7对nogo-ahead选项的WILL/WONT做出响应
27.8生成用于二进制传输的DO/DONT
27.9对未被支持的选项的DO/DONT做出响应
27.10对传输二进制选项的DO/DONT做出响应
27.11对终端类型选项的DO/DONT做出响应
27.12选项子协商
27.13发送终端类型信息
27.14终止子协商
27.15向服务器发送字符
27.16显示在用户终端上出现的传入数据
27.17使用termcap控制用户终端
27.18将数据块写到服务器
27.19与客户进程交互
27.20对非法命令做出响应
27.21脚本描述文件
27.22脚本描述的实现
27.23初始化脚本描述
27.24收集脚本文件名的字符
27.25打开脚本文件
27.26终止脚本描述
27.27打印状态信息
27.28小结
深入研究
习题
第28章流式音频和视频传输(RTP概念和设计)
28.1引言
28.2流式传输服务
28.3实时交付
28.4抖动的协议补偿
28.5重传、丢失和恢复
28.6实时传输协议
28.7流的转换和混合
28.8迟延回放和抖动缓存
28.9RTP控制协议(RTCP)
28.10多种流同步
28.11RTP传输和多对多传输
28.12会话、流、协议端口和分用
28.13编码的基本方法
28.14RTP软件的概念性组织
28.15进程/线程结构
28.16API的语义
28.17抖动缓存的设计和重新缓存
28.18事件处理
28.19回放异常及时间戳的复杂性
28.20实时库例子的大小
28.21MP3播放器的例子
28.22小结
深入研究
习题
第29章流式音频和视频传输(RTP实现示例)
29.1引言
29.2集成实现
29.3程序结构
29.4RTP定义
29.5时间值的处理
29.6RTP序列空间的处理
29.7RTP分组队列的处理
29.8RTP输入处理
29.9为RTCP保存统计信息
29.10RTP初始化
29.11RTCP的定义
29.12接收RTCP发送方的报告
29.13产生RTCP接收方的报告
29.14创建RTCP的首部
29.15RTCP时延的计算
29.16RTCPBye(再见)报文的产生
29.17集成实现的大小
29.18小结
深入研究
习题
第30章Linux服务器中的实用技巧和技术
30.1引言
30.2后台操作
30.3编写在后台运行的服务器
30.4打开描述符和继承
30.5对服务器编程以关闭所继承的描述符
30.6来自控制TTY的信号
30.7对服务器编程以改变它的控制TTY
30.8转移到一个安全的和已知的目录
30.9对服务器编程以改变目录
30.10Linuxumask
30.11对服务器编程以设置其umask
30.12进程组
30.13对服务器编程以设置其进程组
30.14标准I/O描述符
30.15对服务器编程以打开标准描述符
30.16服务器互斥
30.17对服务器编程以避免多个副本
30.18记录服务器的进程ID
30.19对服务器编程以记录其进程ID
30.20等待一个子进程退出
30.21对服务器编程以等待每个子进程退出
30.22外来信号
30.23对服务器编程以忽略外来信号
30.24使用系统日志设施
30.24.1产生日志报文
30.24.2间接方式和标准差错的优点
30.24.3I/O重定向的限制
30.24.4客户-服务器的解决方案
30.24.5syslog机制
30.24.6syslog的报文类
30.24.7syslog的设施
30.24.8syslog的优先级
30.24.9使用syslog
30.24.10syslog配置文件举例
30.25小结
深入研究
习题
第31章客户-服务器系统中的死锁和资源缺乏
31.1引言
31.2死锁的定义
31.3死锁检测的难度
31.4避免死锁
31.5客户和服务器间的死锁
31.6在单个交互中避免死锁
31.7一组客户和一个服务器之间的资源缺乏
31.8忙连接和资源缺乏
31.9避免阻塞的操作
31.10进程、连接和其他限制
31.11客户和服务器的循环
31.12用文档确认依赖性
31.13小结
习题
附录1系统调用与套接字使用的库例程
附录2Linux文件和套接字描述符的操作
参考文献
……
序言 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-vo13.1inux.dist.tar.Z
本书前几章介绍了客户-服务器模型,以及应用程序用于访问TCP/IP协议软件的套接字(socke)接口。此外,还描述了并发进程和用于创建进程的操作系统函数。随后的几章介绍了客户和服务器设计。
本书阐明了各式各样可能的设计并不是没有规则的。实际上,这些设计都遵循了一种模式。在考虑了并行性和传输的选择后,就可以理解这一观点。例如,有一章讨论了使用面向连接传输(如TCP)的非并发服务器设计,而另一章讨论了相似的设计,但它使用无连接传输(如UDP)。
我们描述了每个设计如何适应于各种可能的实现,但是,并没有试图开发一种客户一服务器交互的抽象“理论”。我们只是强调实用的设计原则,以及对程序员很重要的技术。每种技术在某些情况下都有其优点,并且每种技术都已用于正在工作的软件中。我们相信,理解这些设计之间的概念联系,将有助于读者理解每种方法的优缺点,并更容易在它们之间进行选择。
文摘 插图: