《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》

举报
华章计算机 发表于 2019/11/19 20:11:35 2019/11/19
【摘要】 本节书摘来自华章计算机《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》一作者是[美]W. 理查德·史蒂文斯(W.Richard Stevens) ,胡谷雨 吴礼发 等译 谢希仁 校。

 

TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议

TCP/IP Illustrated, Volume 3: TCP for Transactions,HTTP,NNTP,and the UNIX Domain Protocols

 

1574165389346481.jpg

[美]W. 理查德·史蒂文斯(W.Richard Stevens) 著

胡谷雨 吴礼发 等译 谢希仁 校

 

 

 


 

 

出版者的话



文艺复兴以来,源远流长的科学精神和逐步形成的学术规范,使西方国家在自然科学的各个领域取得了垄断性的优势;也正是这样的优势,使美国在信息技术发展的六十多年间名家辈出、独领风骚。在商业化的进程中,美国的产业界与教育界越来越紧密地结合,计算机学科中的许多泰山北斗同时身处科研和教学的最前线,由此而产生的经典科学著作,不仅擘划了研究的范畴,还揭示了学术的源变,既遵循学术规范,又自有学者个性,其价值并不会因年月的流逝而减退。

近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界都既是机遇,也是挑战;而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。

机械工业出版社华章公司较早意识到“出版要为教育服务”。自1998年开始,我们就将工作重点放在了遴选、移译国外优秀教材上。经过多年的不懈努力,我们与Pearson、McGraw-Hill、Elsevier、MIT、John Wiley & Sons、Cengage等世界著名出版公司建立了良好的合作关系,从它们现有的数百种教材中甄选出Andrew S. Tanenbaum、Bjarne Stroustrup、Brian W. Kernighan、Dennis Ritchie、Jim Gray、Afred V. Aho、John E. Hopcroft、Jeffrey D. Ullman、Abraham Silberschatz、William Stallings、Donald E. Knuth、John L. Hennessy、Larry L. Peterson等大师名家的一批经典作品,以“计算机科学丛书”为总称出版,供读者学习、研究及珍藏。大理石纹理的封面,也正体现了这套丛书的品位和格调。

“计算机科学丛书”的出版工作得到了国内外学者的鼎力相助,国内的专家不仅提供了中肯的选题指导,还不辞劳苦地担任了翻译和审校的工作;而原书的作者也相当关注其作品在中国的传播,有的还专门为其书的中译本作序。迄今,“计算机科学丛书”已经出版了近500个品种,这些书籍在读者中树立了良好的口碑,并被许多高校采用为正式教材和参考书籍。其影印版“经典原版书库”作为姊妹篇也被越来越多实施双语教学的学校所采用。

权威的作者、经典的教材、一流的译者、严格的审校、精细的编辑,这些因素使我们的图书有了质量的保证。随着计算机科学与技术专业学科建设的不断完善和教材改革的逐渐深化,教育界对国外计算机教材的需求和应用都将步入一个新的阶段,我们的目标是尽善尽美,而反馈的意见正是我们达到这一终极目标的重要帮助。华章公司欢迎老师和读者对我们的工作提出建议或给予指正,我们的联系方法如下:

华章网站:www.hzbook.com

电子邮件:hzjsj@hzbook.com

联系电话:(010)88379604

联系地址:北京市西城区百万庄南街1号

邮政编码:100037

 

 

 

 

本书赞誉

“绝对值得一读!它说明了如何将科学的思想方法和分析方法应用于实际的技术问题……它体现了技术写作和思考的最高水平。”

 

—Marcus J. Ranum, 防火墙设计师

“是继既清楚又准确的系列卓越标准之后的又一杰出力作。该书的内容覆盖了T/TCP和HTTP,并剖析了WWW,特别及时。”

—Vern Paxson, 劳伦斯伯克利国家实验室网络研究小组

“对需要理解Web服务器行为细节的任何人来说,该书对HTTP的介绍都是无价之宝。”

 

—Jeffrey Mogul, 数字设备公司

“卷3是对前两卷的自然补充,包括了Web服务中的网络技术和TCP事务传输的深入介绍。”

 

—Pete Haverlock,程序管理员,IBM

“在《TCP/IP详解》的最后一卷中,Rich Stevens保持了他在前两卷中给自己设定的高标准:清楚的表达和准确的技术细节。”

 

—Andras Olah,Twente大学

“这一卷保持了这套书前几卷中的极高质量,在新的方向上扩充了对网络实现技术的深入介绍。对于渴望了解当今Internet工作原理的任何人来说,这套书不可不读。”

 

—Ian Lance Taylor,《GNU/Talyor UUCP》的作者

 

 

 

 

译   者   序

我们愿意向广大的读者推荐W. Richard Stevens关于TCP/IP的经典著作(共3卷)的中译本。本书是其中的第3卷—《TCP/IP详解   卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》。

大家知道,TCP/IP已成为计算机网络事实上的标准。在关于TCP/IP的论著中,最有影响的两部著作是:Douglas E. Comer的《用TCP/IP进行网际互连》(一套共3卷),以及Stevens写的这3卷书。这两套巨著都很有名,各有其特点。无论是从事计算机网络教学的教师还是进行计算机网络科研的技术人员,这两套书都应当是必读的。

这套书的特点是内容丰富,概念清楚且准确,讲解详细,例子很多。作者在书中举出的所有例子均在作者安装的计算机网络上做过实际验证,而且书后还给出了许多经典的参考文献,并一一写出评注。

第3卷是第1、2卷的继续和深入。读者在学习这一卷时,应当先具备第1卷和第2卷所阐述的TCP/IP的基本知识和实现知识。本卷仍然采用大量的源代码来讲述协议及其应用的实现,并且本卷使用的一部分源代码是对第1卷和第2卷中有关源代码的修改,需要对照参考。这些内容对于编写TCP/IP网络应用程序的程序员和研究TCP/IP的计算机网络研究人员是非常有用的。

本卷的前言由胡谷雨翻译,第1~5章由胡谷雨、马春华翻译,第6~12章由胡谷雨、张晖翻译,第13~15章由吴礼发、李旺翻译,第16~18章由吴礼发、金风林翻译,附录由胡谷雨翻译。全书由谢希仁进行校阅。

限于水平,翻译中不妥或错误之处在所难免,敬请广大读者批评指正。

 

 

 

前      言

引言和本书的组织

本书是套书《TCP/IP详解》的第3卷,这套书的卷1是[Stevens 1994],卷2是[Wright and Stevens 1995]。本书分成三个部分,每个部分覆盖了不同的内容。

1) TCP事务协议,通常叫作T/TCP。这是对TCP的扩展,其设计目的是使客户-服务器事务更快、更高效和更可靠。这个目标的实现省略了连接开始时TCP的三次握手,并缩短了连接结束时TIME_WAIT状态的持续时间。我们将会看到,在客户-服务器事务中,T/TCP的性能与UDP相当,而且T/TCP具有可靠性和适应性,这两点相对UDP来说都是很大的改进。

     事务是这样定义的:一个客户向服务器发出请求,接下来是服务器给出响应(这里的名词“事务”(transaction)并非数据库中的事务处理,数据库中的事务处理有封锁、两步提交和回退)。

2) TCP/IP应用,特别是HTTP(超文本传输协议,WWW的基础)和NNTP(网络新闻传输协议Usenet新闻系统的基础)。

3) Unix域协议。这些协议是所有Unix的TCP/IP实现中都提供的,在许多非Unix的实现中也有提供。这些协议提供了一种进程之间通信(IPC)的手段,采用了与TCP/IP中一样的插口接口。当客户与服务器进程在同一主机上时,Unix域协议通常要比TCP/IP快1倍。

第一部分是对T/TCP的介绍,又分成两个小部分。第1~4章介绍协议,并给出了大量实例来说明它们是怎样工作的。这些材料主要是对卷1中24.7节的补充,在那里对T/TCP只是做了简单的介绍。第5~12章介绍T/TCP在4.4BSD-Lite网络代码(即卷2中给出的代码)中的确切实现。由于最早的T/TCP实现迟至1994年9月才发布,已经是本书卷1出版一年以后了,那时卷2也快完成了,因此T/TCP的详细叙述,包括诸多实例和所有的实现细节都只好放在本系列书的卷3中了。

第二部分介绍HTTP和NNTP应用,是卷1的第25~30章中介绍的TCP/IP应用的延续。在卷1出版后的两年里,随着Internet的发展,HTTP得到了极大的流行,而NNTP的使用则在最近的10多年中每年增长了大约75%。T/TCP对HTTP来说也是非常好的,可以这样来用TCP:在少量数据传输中缩短连接时间,因为这种时候连接的建立和拆除时间往往占总时间的大头。在繁忙的Web服务器上,成千上万个不同而且不断变化的客户对HTTP(因此也对TCP)的高负荷使用,也提供了唯一可以对服务器上确切的分组进行考察的机会(第14章),可以回顾卷1和卷2中给出的TCP/IP的许多特性。

第三部分中的Unix域协议原本是准备在卷2中介绍的,但由于卷2已多达1200页而删去了。在名为《TCP/IP详解》这样的套书中夹杂着TCP/IP以外的协议不免令人奇怪,但Unix域协议几乎15年前就已经伴随着BSD版TCP/IP的实现在4.2BSD中发布了。今天,它们在任何一个从伯克利衍生而来的内核中都在频繁地使用,但它们的使用往往“被掩盖在后台”,大多数用户不知道它们的存在。除了在从伯克利衍生而来的内核中充当Unix管道的基础外,它们的另一个大用户是当客户程序和服务器程序在同一主机(典型的情况是工作站)上时的X Window系统。Unix域的插口也用于进程之间传递描述符,是进程之间通信的一个强大工具。由于Unix域协议所用的插口API(应用编程接口)与TCP/IP所用的插口API几乎是相同的,Unix域协议以最小的代码变化提供了一个简单的手段来增强本地应用的性能。

以上三个部分的每个部分都可以独立阅读。

读者

与这套书的前两卷一样,这一卷是为所有想要理解TCP/IP如何工作的人写的:编写网络应用的程序员,负责维护采用TCP/IP的计算机网络的系统管理员,以及在日常工作中经常与TCP/IP应用程序打交道的用户。

第一和第二部分是理解TCP/IP工作原理的基础。不熟悉TCP/IP的读者应该看看这套书的卷1,见[Stevens 1994],以便对TCP/IP协议集有一个全面的了解。第一部分的前半部分(第1~4章,TCP/IP中的概念和例子)与卷2无关,可以直接阅读。但后半部分(第5~12章,T/TCP的实现)则需要先熟悉4.4 BSD-Lite网络程序,这些内容在卷2中介绍。

在整本书中有大量的向前和向后参考索引,这些参考索引是针对本书的两个主题,以及对卷1和卷2的内容,为想要了解更详细内容的读者提供的。在本书最后有书中用到的所有缩略语,书中介绍的所有结构、函数和宏(以字母顺序排列)及其介绍起始页码的交叉索引。如果本书引用了卷2中的定义,则该交叉索引也列出了卷2中的定义。

源码版权

本书中引自4.4BSD-Lite版的所有源码(源程序)都包括下面这样的版权声明:

第6章路由表的源码则包括下面这样的版权声明:

印刷惯例

当需要显示交互的输入和输出信息时,将用黑体表示键盘输入,而计算机输出则用Courier体,并用中文宋体做注释。

书中总是把系统名作为命令解释程序提示符的一部分(例如sun),以说明命令是在哪个主机上执行的。在正文中引用的程序名通常都是首字母大写(如Telnet和Tcpdump),以避免过多的字体形式。

在整本书中,我们会使用这种缩进格式的附加说明来描述实现细节或历史观点。

 

W. Richard Stevens

图森,亚利桑那

1995年11月

rstevens@noao.edu

http://www.noao.edu/~rstevens

 

 

 

目录

出版者的话

本书赞誉

译者序

前言

第一部分   TCP事务协议

第1章   T/TCP概述    1

1.1   概述 1

1.2   UDP上的客户-服务器     1

1.3   TCP上的客户-服务器      6

1.4   T/TCP上的客户-服务器   12

1.5   测试网络       15

1.6   时间测量程序      15

1.7   应用 17

1.8   历史 19

1.9   实现 20

1.10   小结      21

第2章   T/TCP协议    23

2.1   概述 23

2.2   T/TCP中的新TCP选项    23

2.3   T/TCP实现所需变量  25

2.4   状态变迁图   27

2.5   T/TCP的扩展状态      28

2.6   小结 30

第3章   T/TCP使用举例   31

3.1   概述 31

3.2   客户重新启动      31

3.3   常规的T/TCP事务     33

3.4   服务器收到过时的重复SYN   34

3.5   服务器重启动      35

3.6   请求或应答超出报文段最大长度  36

3.7   向后兼容性   39

3.8   小结 41

第4章   T/TCP协议(续)      43

4.1   概述 43

4.2   客户的端口号和TIME_WAIT状态 43

4.3   设置TIME_WAIT状态的目的  45

4.4   TIME_WAIT状态的截断    48

4.5   利用TAO跳过三次握手   51

4.6   小结 55

第5章   T/TCP实现:插口层  56

5.1   概述 56

5.2   常量 56

5.3   sosend函数  56

5.4   小结 58

第6章   T/TCP实现:路由表  59

6.1   概述 59

6.2   代码介绍       59

6.3   radix_node_head结构      60

6.4   rtentry结构   61

6.5   rt_metrics结构    61

6.6   in_inithead函数  61

6.7   in_addroute函数 62

6.8   in_matroute函数 63

6.9   in_clsroute函数   63

6.10   in_rtqtimo函数 64

6.11   in_rtqkill函数    66

6.12   小结      69

第7章   T/TCP实现:协议控制块 70

7.1   概述 70

7.2   in_pcbladdr函数 71

7.3   in_pcbconnect函数   71

7.4   小结 72

第8章   T/TCP实现: TCP概要   73

8.1   概述 73

8.2   代码介绍       73

8.3   TCP的protosw结构  74

8.4   TCP控制块   74

8.5   tcp_init函数  75

8.6   tcp_slowtimo函数     75

8.7   小结 76

第9章   T/TCP实现:TCP输出     77

9.1   概述 77

9.2   tcp_output函数   77

9.3   小结 83

第10章  T/TCP实现:TCP函数     84

10.1   概述      84

10.2   tcp_newtcpcb函数   84

10.3   tcp_rtlookup函数    85

10.4   tcp_gettaocache函数     86

10.5   重传超时间隔的计算      86

10.6   tcp_close函数   89

10.7   tcp_msssend函数    90

10.8   tcp_mssrcvd函数     91

10.9   tcp_dooptions函数 96

10.10   tcp_reass函数 98

10.11   小结    99

第11章   T/TCP实现:TCP输入   101

11.1   概述      101

11.2   预处理  103

11.3   首部预测     104

11.4   被动打开的启动       105

11.5   主动打开的启动       108

11.6   PAWS:防止序号重复   114

11.7   ACK处理     115

11.8   完成被动打开和同时打开     115

11.9   ACK处理(续)       116

11.10   FIN处理    118

11.11   小结    119

第12章   T/TCP实现:TCP用户请求  120

12.1   概述      120

12.2   PRU_CONNECT请求      120

12.3   tcp_connect函数     120

12.4   PRU_SEND和PRU_SEND_EOF请求  124

12.5   tcp_usrclosed函数   125

12.6   tcp_sysctl函数  126

12.7   T/TCP的前景     126

12.8   小结      127

第二部分   TCP的其他应用

第13章   HTTP:超文本传输协议 129

13.1   概述      129

13.2   HTTP和HTML概述 130

13.3   HTTP     132

13.4   一个例子     136

13.5   HTTP的统计资料     138

13.6   性能问题     139

13.7   小结      141

第14章   在HTTP服务器上找到的分组     142

14.1   概述      142

14.2   多个HTTP服务器    144

14.3   客户端SYN的到达间隔时间       145

14.4   RTT的测量  149

14.5   用listen设置入连接队列的容量 150

14.6   客户端的SYN选项  154

14.7   客户端的SYN重传  156

14.8   域名      157

14.9   超时的持续探测       157

14.10   T/TCP路由表大小的模拟    160

14.11   mbuf的交互    162

14.12   TCP的PCB高速缓存和首部预测    163

14.13   小结    165

第15章   NNTP:网络新闻传输协议   166

15.1   概述      166

15.2   NNTP    167

15.3   一个简单的新闻客户      170

15.4   一个复杂的新闻客户      171

15.5   NNTP的统计资料    172

15.6   小结      173

第三部分   Unix域协议

第16章   Unix域协议:概述  175

16.1   概述      175

16.2   用途      176

16.3   性能      177

16.4   编码举例     177

16.5   小结      179

第17章   Unix域协议:实现  180

17.1   概述      180

17.2   代码介绍     180

17.3   Unix domain和protosw结构     181

17.4   Unix域插口地址结构     182

17.5   Unix域协议控制块  183

17.6   uipc_usrreq函数      185

17.7   PRU_ATTACH请求和unp_attach函数     186

17.8   PRU_DETACH请求和unp_detach函数   187

17.9   PRU_BIND请求和unp_bind函数      189

17.10   PRU_CONNECT请求和unp_connect函数   191

17.11   PRU_CONNECT2请求和unp_connect2函数      195

17.12   socketpair系统调用     198

17.13   pipe系统调用 202

17.14   PRU_ACCEPT请求 203

17.15   PRU_DISCONNECT请求和unp_disconnect函数      204

17.16   PRU_SHUTDOWN请求和unp_shutdown函数  205

17.17   PRU_ABORT请求和unp_drop函数 206

17.18   其他各种请求  207

17.19   小结    209

第18章   Unix域协议:I/O和描述符的传递    210

18.1   概述      210

18.2   PRU_SEND和PRU_RCVD请求   210

18.3   描述符的传递    214

18.4   unp_internalize函数       218

18.5   unp_externalize函数      220

18.6   unp_discard函数     221

18.7   unp_dispose函数    222

18.8   unp_scan函数   222

18.9   unp_gc函数      223

18.10   unp_mark函数       230

18.11   性能(再讨论)     231

18.12   小结    231

附录A   测量网络时间       232

附录B   编写T/TCP应用程序  242

参考文献    246

缩略语 251


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。