书籍详情

用TCP/IP进行网际互联

用TCP/IP进行网际互联

作者:(美)Douglas E.Comer,(美)David L.Stevens著;赵刚 等译

出版社:电子工业出版社

出版时间:2001-04-01

ISBN:9787505365902

定价:¥48.00

购买这本书可以去
内容简介
  很荣幸DougComer给我这个机会,让我能在他的这本书第三版付印时与诸位探讨一些个人的想法。在这过去的十年期间,Internet以惊人的速度发展着。Internet上主机的数目从1989年的100000台发展到1998年的30000000台。在本书第二版出版的时候,连接到Internet的网络大约有26000个。到1998年,这个数字大约在2000000到350000之间,这还不包括那些利用互联网技术但未连接到公共网络上的专用内联网。除了规模上的变化,Internet在应用上也发生了惊人的变化。Internet技术与正在蓬勃发展的WWW作为一个完整的、不可缺少的系统已被人们所认可。而WWW在商业、学术和政府等部门都掀起了一场革命。在WWW上每天出现的“网页”可达三亿两千万之多,并且还在不断涌现。有些学校大约四分之一的入学申请都是通过电子邮件或其他网页申请形式进行的。Dell公司透露,他们通过网站每天销售价值大约六百万美元的PC机。Amazon网上书店以季度盈利达六千六百万美元成为历史上发展最快的公司,这也是第一个在一年之内销售额超过两亿五千万美元的公司。目前,至少有两千多家无线电台将他们的音频服务推向了Internet,许多网站也开始提供音频甚至低质量的视频服务。随着将访问速率提高到兆比特的范围,以及主干网容量的增加,视频服务的质量也将得到提高。随着1996年网络电视和1997年Nokia推出的支持网络功能的手机的问世,其他支持网络功能的产品也不断地涌现。更多的实用产品实现了相似的网络功能,例如水暖加热器既可以用家用电脑来控制,也可以由电力公司来控制用以满足适度的调峰需求。尽管智能代理还没有成为主流,但是XML近来的发展也表明Internet上有关事务处理的应用正在急剧增多。SML的标准“文档”表示方式以及一致的常用解释格式构成了一种可传输对象,该对象已形成所有商业、金融、事务、数据库事务及其他需要标准表示方式和解释格式的交易的基础。再回头看看电话产品的发展,无论传统的服务商还是现代企业都在将支持网络的电话产品推向市场。“软PBX”系统利用LAN和Internet实现传统的专用交换机的功能,基于微处理器的电话机也正在改变远程通信的经济情况和可操作性。具有IP功能的传真机已经出现。网关把原有的模拟世界与现在的Internet世界联系在一起,起着非常重要的作用。对Internet服务需求量的增长速度赶上甚至超过了网络本身的增长。主干网络的速度达到每秒622兆已是很平常的事。新一代利用硬件IP中继器的路由器可望以每秒10G(OC192)以上的速度处理Internet上传输的数据。下一个挑战是利用单模光纤处理每秒兆兆字节的信息量。网络的安全性过去总是处于后台操作状态,随着越来越多领域依赖于Internet,安全性已逐渐走向前台。防火墙技术、端-端加密、密钥管理、信用证策略或鉴认系统已成为成功管理Internet的关键因素。再向未来展望,网络协议和结构已经朝着星际互连的方向发展,也许会形成和互联网一样的形式。域名系统如果还存在,还要考虑将不同的行星计入命名体系。“互连的Internet”协议将能够处理更高的延迟,传统的TCP概念也将被更多的单向过程取代。未来的网际遨游者回看这十年,一定会觉得这是个充满挑战但技术相对落后的时代。在他们看来,这段前言中的观点可能已经过时又难以理解,因为他们所面对的是经历了另外二十年革命的Internet。序言用TCP/IP进行网际互联第二卷提供了第一卷所没有包含的关于TCP/IP协议的一些细节问题。第二卷如同将TCP/IP置于放大镜下,考察每个协议的具体细节。它讨论了协议的实现方案,并着重于介绍协议软件的内部机制。第三版包含了对某些协议的修改和更新的内容。其中的代码改用C++语言的ANSI标准C子集,包含了函数原型和参数的声明。另外还纠正了一些错误。我们将SNMP更新为标准的第二版,这包括替换了地址转换表,增加了UDPlistener列表。在本书的最后,还增加了附录2,给出了书中代码所用到的主要数据结构的声明及变量的交叉参考表,并扩充了附录1中的过程调用交叉参考的内容。书中的范例代码用GnuC++编译器在Intel体系平台编译通过,也在PentiumTM系统上经过测试。所有的代码均可在以下网址得到:ftp://ftp.cs.purdue.edu/pub/comer/TCPIP-vol2.dist.tar.Z虽然本书受到版权保护,但书中的代码可供读者使用,而且已经在许多商业产品中实现。这些代码使用的惟一限制是不得在公开出版物中出版。我们鼓励读者利用计算机工具来查看、修改、编译和测试这些代码。事实上,尽管附录1和附录2中提供了定位代码条目的有效途径,但在查看大段代码时,UNIXgrep程序的价值更是不可估量。对于各种正式的协议规范,以及对协议的实现和使用的讨论,可参见请求评论文档(RFC)。尽管一些RFC文档对初学者来讲难以理解,但这些文档是信息详尽的权威性资源,没有哪个作者能够做到在自己编写的书中包涵RFC文档中的所有内容。尽管RFC文档涉及了每一个协议,但有时它们对协议之间的交互问题并未加以说明。例如,选路信息协议(RIP或OSPF)之类的选路协议规定了网关如何将路由置入IP路由表中,以及如何将表中的路由通知其他网关。RIP还规定路由必须设立定时机制,一旦某条路由超时,就将其删除。但是,我们在RFC文档中并不容易看出RIP和其他协议之间是如何交互作用的,随之而来的问题是:“路由超时机制将如何影响路由表中那些由ICMP设置的路由呢?”我们可能还会考虑这样一个问题:“当RIP更新路由时,应不应该推翻那些由管理员直接输入的路由呢?”为了有助于解释协议之间的交互作用,并确保我们的方案能协调工作,我们设计并构造了一个工作系统,作为全书的中心范例。该系统提供了TCP/IP协议族中的大部分协议,包括:TCP、IP、ICMP、IGMP、UDP、ARP、RIP、SNMPv2以及OSPF的主要部分。另外,还具有一个finger服务的客户和服务器范例。由于本书包括了每一个协议的程序代码,读者可以研究其实现方法及理解其内部结构。最重要的是,由于范例系统将所有协议软件集成为一个工作整体,读者可以清楚地了解协议之间的交互作用。范例的程序代码试图做到一方面遵守协议标准,另一方面引入一些新的思想。例如,我们的TCP程序代码中包含了“糊涂窗口预防”技术、Jacobson-Karels的“慢启动”和“防拥塞”等优化技术,诸如此类的性能可能在商业实现中被忽略。但同时,我们也清楚地认识到商业领域并不总是遵从已经公布的标准,因此我们也努力将系统调整到能够在现实环境中使用。例如,程序代码中包含了一个配置参数,使得它既可以采纳Internet标准,也可以采纳BSDUNIX中“TCP紧急数据指针”的实现方法。我们并不认为书中所提供的程序代码都是准确无误的,甚至不能断言它肯定比其他实现方法要好。事实上,经过多年使用,我们仍然在不断完善这套软件,同时,也希望读者跟我们一起继续改进它。本书可以作为网络工程人员的高级教程,或者作为研究生教材使用。在作为本科教程使用时,应将重点放在前几章,而忽略有关OSPF、SNMP和RIP这几章内容。研究生可能会在有关TCP的章节中发现一些最为有趣和最难理解的概念。为保证其高性能而采用的自适应重发和相关的试探法尤为重要,应当仔细加以研究。纵观全书,绝大部分习题都向大家提示了其他可选择的实现方案及其大致情况,它们并不要求死记硬背,因此学生们可能需要阅读本书以外的其他资料,才能解答这些习题。正如任何耗费甚巨的工程一样,本书中包含了许多人的心血,对此我们表示衷心的感谢。作者之一DavidStevens完成了大部分软件的编制工作,其中包括一个完整的TCP版本。ShawnOstermann为本书付出了许多努力。Shawn将TCP/IP代码集成到Xinu版本8中,并将其从最初的Sun3平台移植到DECstation3100上。在这一版本中,他还对上一版中由VicNorman编写的SNMP软件进行了大量的修改,以满足第二版的标准,也有助于代码的调试。JohnLin对书中的技术细节进行了校对,纠正了一些错误。珀杜(Purdue)大学的网际互连研究小组(InternetworkingResearchGroup)的许多成员对程序代码的早期版本做过很多贡献。AndyMuckelbauer和SteveChapin建立了一个UNIX兼容库,并与ShawnOstermann和ScottMark合作,使用TCP代码运行一个Xwindow服务器。他们对TCP做了大量的测试工作,并指出其性能上存在的几个问题。ScottM.Ballew参与了一些软件的开发工作。我的妻子Christine对本书手稿进行了编辑,并提出许多建议。最后,我们感谢珀杜大学的计算机科学系和计算中心所提供的帮助。DouglasE.ComerDavidL.Stevens1998年5月
作者简介
  作者:DouglasE.ComerDouglasE.Comer博士从20世纪70年代开始从事互联网的研究和开发工作,他曾是互联网体系结构委员会的成员,该委员会是确定互联网发展标准的权威机构;他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重要的网络之一。他现在是美国普渡大学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。Internet技术基础>>更多作品
目录
第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 标准和非标准客户软件 
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.7 LINIX中提供的基本I/O功能 
4.8 将Linux I/O用于TCP/IP 
4.9 小结 
深入研究 
习题 
第5章 套接字API 
5.1 引言 
5.2 Berkeley套接字 
5.3 指明一个协议接口 
5.4 套接字的抽象 
5.4.1 套接字描述符和文件描述符 
5.4.2 针对套接字的系统数据结构 
5.4.3 主动套接字或被动套接字 
5.5 指明端点地址 
5.6 类属地址结构 
5.7 套接字API中的主要系统调用 
5.7.1 socket调用 
5.7.2 connect调用 
5.7.3 send调用 
5.7.4 recv调用 
5.7.5 close调用 
5.7.6 bind调用 
5.7.7 listen调用 
5.7.8 accept调用 
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.10 TCP客户算法 
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.18 UDP客户的编程 
6.19 连接的和非连接的UDP套接字 
6.20 对UDP使用connect 
6.21 使用UDP与服务器通信 
6.22 关闭使用UDP的套接字 
6.23 对UDP的部分关闭 
6.24 关于UDP不可靠性的警告 
6.25 小结 
深入研究 
习题 
第7章 客户软件举例 
7.1 引言 
7.2 小例子的重要性 
7.3 隐藏细节 
7.4 针对客户程序的过程库例子 
7.5 connectTCP的实现 
7.6 connectUDP的实现 
7.7 构成连接的过程 
7.8 使用例子库 
7.9 DAYTIME服务 
7.10 针对DAYTIME的TCP客户实现 
7.11 从TCP连接中进行读 
7.12 TIME服务 
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.1 TCP语义 
8.5.2 UDP语义 
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.4 TIME服务器举例 
9.5 小结 
深入研究 
习题 
第10章 循环的、面向连接的服务器(TCP) 
10.1 引言 
10.2 分配被动的TCP套接字 
10.3 用于DAYTIME服务的服务器 
10.4 进程结构 
10.5 DAYTIME服务器举例 
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.2 Linux线程概述 
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.11 UNIX超级服务器,inetd 
15.12 inetd服务器的例子 
15.13 服务器的几种变形清单 
15.14 小结 
深入研究 
习题 
第16章 服务器并发性的统一、高效管理 
16.1 引言 
16.2 在循环设计和并发设计间选择 
16.3 并发等级 
16.4 需求驱动的并发 
16.5 并发的代价 
16.6 额外开销和时延 
16.7 小时延可能出麻烦 
16.8 从线程/进程预分配 
16.8.1 Linux中的预分配 
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.16 SLIRP的运行 
19.17 SLIRP如何处理连接 
19.18 IP寻址和SLIRP 
19.19 小结 
深入研究 
习题 
第20章 外部数据表示(XDR) 
20.1 引言 
20.2 数据表示 
20.3 N平方转换问题 
20.4 网络标准字节顺序 
20.5 外部数据表示的事实上的标准 
20.6 XDR数据类型 
20.7 隐含类型 
20.8 使用XDR的软件支持 
20.9 XDR库例程 
20.10 一次一片地构造报文 
20.11 XDR库中的转换例程 
20.12 XDR流、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.10 Sun Microsystems的远程过程调用定义 
21.11 远程程序和过程 
21.12 减少参数的数量 
21.13 标识远程程序和过程 
21.14 适应远程程序的多个版本 
21.15 远程程序中的互斥 
21.16 通信语义 
21.17 至少一次语义 
21.18 RPC重传 
21.19 将远程程序映射到协议端口 
21.20 动态端口映射 
21.21 RPC端口映射器算法 
21.22 ONC RPC的报文格式 
21.23 对远程过程进行参数排序 
21.24 21.24 鉴别 
21.25 21.25 RPC报文表示的例子 
21.26 UNIX鉴别字段的例子 
21.27 小结 
深入研究 
习题 
第22章 分布式程序的生成(rpcgen的概念) 
22.1 引言 
22.2 使用远程过程调用 
22.3 支持RPC的编程工具 
22.4 将程序划分成本地过程和远程过程 
22.5 为RPC增加代码 
22.6 stub过程 
22.7 多个远程过程和分派 
22.8 客户端的stub过程的名字 
22.9 使用rpcgen生成分布式程序 
22.10 rpcgen输出和接口过程 
22.11 rpcgen的输入和输出 
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.9 rpcgen产生的.h文件 
23.10 rpcgen产生的XDR转换文件 
23.11 rpcgen产生的客户代码 
23.12 rpcgen产生的服务器代码 
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.6 NFS和UNIX的文件语义 
24.7 UNIX文件系统的回顾 
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.14 stat操作 
24.7.15 文件命名机制 
24.7.16 文件系统mount 
24.7.17 UNIX文件名解析 
24.7.18 符号链接 
24.8 NFS下的文件 
24.9 NFS的文件类型 
24.10 NFS文件模式 
24.11 NFS文件属性 
24.12 NFS客户和服务器 
24.13 NFS客户操作 
24.14 NFS客户与UNIX系统 
24.15 NFS安装 
24.16 文件句柄 
24.17 句柄取代路径名 
24.18 无状态服务器的文件定位 
24.19 对目录的操作 
24.20 无状态地读目录 
24.21 NFS服务器中的多个分层结构 
24.22 安装(mount)协议 
24.23 NFS的传输协议 
24.24 小结 
深入研究 
习题 
第25章 网络文件系统协议(NFS,Mount) 
25.1 引言 
25.2 用RPC定义协议 
25.3 用数据结构和过程定义协议 
25.4 NFS常数、类型和数据声明 
25.4.1 NFS常数 
25.4.2 NFS的typedef声明 
25.4.3 NFS数据结构 
25.5 NFS过程 
25.6 NFS操作的语义 
25.6.1 NFSPROC3_NULL(过程0) 
25.6.2 NFSPROC3_GETATTR(过程1) 
25.6.3 NFSPROC3_SETATTR(过程2) 
25.6.4 NFSPROC3_LOOKUP(过程3) 
25.6.5 NFSPROC3_ACCESS(过程4) 
25.6.6 NFSPROC3_READLINK(过程5) 
25.6.7 NFSPROC3_READ(过程6) 
25.6.8 NFSPROC3_WRITE(过程7) 
25.6.9 NFSPROC3_CREATE(过程8) 
25.6.10 NFSPROC3_MKDIR(过程9) 
25.6.11 NFSPROC3_SYMLINK(过程10) 
25.6.12 NFSPROC3_MKNOD(过程11) 
25.6.13 NFSPROC3_REMOVE(过程12) 
25.6.14 NFSPROC3_RMDIR(过程13) 
25.6.15 NFSPROC3_RENAME(过程14) 
25.6.16 NFSPROC3_LINK(过程15) 
25.6.17 NFSPROC3_READDIR(过程16) 
25.6.18 NFSPROC3_READDIRPLUS(过程17) 
25.6.19 NFSPROC3_FSSTAT(过程18) 
25.6.20 NFSPROC3_FSINO(过程19) 
25.6.21 NFSPROC3_PATHCONF(过程20) 
25.6.22 NFSPROC3_COMMIT(过程21) 
25.7 安装协议 
25.7.1 安装协议的常数定义 
25.7.2 安装协议的类型定义 
25.7.3 安装数据结构 
25.8 安装协议中的过程 
25.9 安装操作的语义 
25.9.1 MOUNTPROC3_NULL(过程0) 
25.9.2 MOUNTPROC3_MNT(过程1) 
25.9.3 MOUNTPROC3_DUMP(过程2) 
25.9.4 MOUNTPROC3_UMNT(过程3) 
25.9.5 MOUNTPROC3_UMNTALL(过程4) 
25.9.6 MOUNTPROC3_EXPORT(过程5) 
25.10 NFS和安装鉴别 
25.11 文件加锁 
25.12 NFS第3版与第4版之间的变化 
25.13 小结 
深入研究 
习题 
第26章 TELNET客户(程序结构) 
26.1 引言 
26.2 概述 
26.2.1 用户终端 
26.2.2 命令和控制信息 
26.2.3 终端、窗口和文件 
26.2.4 对并发性的需要 
26.2.5 TELNET客户的过程模型 
26.3 TELNET客户算法 
26.4 Linux中的终端I/O 
26.4.1 控制设备驱动器 
26.5 建立终端模式 
26.6 用于保存状态的全局变量 
26.7 在退出之前恢复终端模式 
26.8 客户挂起与恢复 
26.9 有限状态机的规约 
26.10 在TELNET数据流中嵌入命令 
26.11 选项协商 296
26.12 请求/提供的对称性 
26.13 TELNET字符定义 
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.26 TELNET客户的参数 
26.27 TELNET客户的核心 
26.28 主有限状态机的实现 
26.29 小结 
深入研究 
习题 
第27章 TELNET客户(实现细节) 
27.1 引言 
27.2 有限状态机动作过程 
27.3 记录选项请求的类型 
27.4 完成空操作 
27.5 对回显选项的WILL/WONT做出响应 
27.6 对未被支持的选项的WILL/WONT做出响应 
27.7 对 no go-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.9 RTP控制协议(RTCP) 
28.10 多种流同步 
28.11 RTP传输和多对多传输 
28.12 会话、流、协议端口和分用 
28.13 编码的基本方法 
28.14 RTP软件的概念性组织 
28.15 进程/线程结构 
28.16 API的语义 
28.17 抖动缓存的设计和重新缓存 
28.18 事件处理 
28.19 回放异常及时间戳的复杂性 
28.20 实时库例子的大小 
28.21 MP3播放器的例子 
28.22 小结 
深入研究 
习题 
第29章 流式音频和视频传输(RTP实现示例) 
29.1 引言 
29.2 集成实现 
29.3 程序结构 
29.4 RTP定义 
29.5 时间值的处理 
29.6 RTP序列空间的处理 
29.7 RTP分组队列的处理 
29.8 RTP输入处理 
29.9 为RTCP保存统计信息 
29.10 RTP初始化 
29.11 RTCP的定义 
29.12 接收RTCP发送方的报告 
29.13 产生RTCP接收方的报告 
29.14 创建RTCP的首部 
29.15 RTCP时延的计算 
29.16 RTCP Bye(再见)报文的产生 
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.10 Linux umask 
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.3 I/O重定向的限制 
30.24.4 客户-服务器的解决方案 
30.24.5 syslog机制 
30.24.6 syslog的报文类 
30.24.7 syslog的设施 
30.24.8 syslog的优先级 
30.24.9 使用syslog 
30.24.10 syslog配置文件举例 
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 系统调用与套接字使用的库例程 
附录2 Linux文件和套接字描述符的操作 
参考文献 
猜您喜欢

读书导航