TCP/IP详解 卷三:TCP事务协议,HTTP,NNTP和UNIX域协议
作者 : W.Richard Stevens
译者 : 胡谷雨 吴礼发
出版日期 : 2000-09-01
ISBN : 7-111-07568-4
定价 : 35.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 252
开本 : 16开
原书名 : TCP/IP Illustrated, Volume 3: TCP for Transactions,HTTP,NNTP,and the UNIX Domain Protocols
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

本书是“TCP/IP详解系列”的延续。主要内容包括:TCP事务协议,即T/TCP,这是对TCP的扩展,使客户-服务器事务更快、更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。本书同样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序。
  本书适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。

图书前言

前言:
引言和本书的组织
  本书是“TCP/IP详解系列”的延续:此系列的卷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快一倍。
  第一部分,即对T/TCP的介绍,又分成两个小部分。第1~4章介绍协议,并给出了大量实例来说明它们是怎样工作的。这些材料主要是对卷1中24.7节的补充,在那里对T/TCP只是做了简单的介绍。第2小部分,即第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章路由表的源码则包括下面这样的版权说明:

印刷惯例
  当需要显示交互的输入和输出信息时,将用黑体表示键盘输入,而计算机输出则用Courrier体,并用中文宋体作注释。
  书中总是把系统名作为命令解释程序提示符的一部分(例如sun),以说明命令是在哪个主机上执行的。在正文中引用的程序名通常都是首字母大写(如Telnet和Tcpdump),以避免过多的字体形式。
  在整个这本书中,我们将用像上述这段文字一样的缩进、附加的注释来说明实现细节中的历史阶段。

W. Richard Stevens
Tucson, Arizona
1995年11月
rstevens@noao.edu
http://www.noao.edu/~rstevens

作者简介

W.Richard Stevens:W.Richard Stevens: W. Richard Stevens (1951~1999) 是一位非常受人尊敬的专家,除了《TCP/IP详解》三卷本外,他还有其他两部最为畅销的作品:《UNIX环境高级编程》和《UNIX网络编程》(两卷本)。

译者简介

胡谷雨 吴礼发:暂无简介

译者序

译者序:
  我们愿意向广大的读者推荐W. Richard Stevens关于TCP/IP的经典著作(共3卷)的中译本。这里是其中的第3卷:《TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP、UNIX域协议》。
  大家知道,TCP/IP已成为计算机网络的事实上的标准。在关于TCP/IP的论著中,最有影响的就是两部著作。一部是Douglas E. Comer的《用TCP/IP进行网际互连》,一套共3卷(中译本已由电子工业出版社于1998年出版),而另一部就是Stevens写的这3卷书。这两套巨著都很有名,各有其特点。无论是从事计算机网络的教师还是进行科研的技术人员,这两套书都应当是必读的。
  本书的特点是内容丰富,概念清楚且准确,讲解详细,例子很多。作者在书中举出的所有例子均在作者安装的计算机网络上经过实际验证。在本书的最后,作者给出了许多经典的参考文献,并一一写出评注。
  第3卷是第1、2卷的继续和深入。读者在学习这一卷时,应当先具备第1卷和第2卷所阐述的、关于TCP/IP的基本知识和实现知识。本卷仍然采用了大量的源代码来讲述协议及其应用的实现,并且本卷使用的一部分源代码是对第1卷和第2卷中有关源代码的修改,需要对照参考。这些内容对于编写TCP/IP网络应用程序的程序员和研究TCP/IP的计算机网络研究人员是非常有用的。
  本卷书的前言由胡谷雨翻译,第1~5章由胡谷雨、马春华翻译,第6~12章由胡谷雨、张晖翻译,第13~15章由吴礼发、李旺翻译,第16~18章由吴礼发、金风林翻译,附录由胡谷雨翻译。全书由谢希仁进行校阅。
  限于水平,翻译中不妥或错误之处在所难免,敬请广大读者批评指正。

译者
2000年5月于解放军理工大学,南京

图书目录

目录:
译者序
前言
第一部分 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 请求或应答超出报文段最大长度MSS    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.2.1 新的自动变量    77
9.2.2 增加隐藏的状态标志    77
9.2.3 在SYN_SENT状态不要重传SYN    78
9.2.4 发送器的糊涂窗口避免机制    78
9.2.5 有RST或SYN标志时强制发送报文段    79
9.2.6 发送MSS选项    80
9.2.7 是否发送时间戳选项    80
9.2.8 发送T/TCP的CC选项    80
9.2.9 根据TCP选项调整数据长度    83
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.3.1 报文类型:请求与响应    132
13.3.2 首部字段    133
13.3.3 响应代码    133
13.3.4 各种报文头举例    134
13.3.5 例子:客户程序缓存    135
13.3.6 例子:服务器重定向    136
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

教学资源推荐
作者: 陈庆章 王子仁
作者: 黄文斌 刘君 熊建强
参考读物推荐
作者: 李金榜 尹烨 刘天斯 陈纯著
作者: 饶琛琳 编著
作者: Bruce Davie Yakov Rekhter