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

网友投稿 716 2022-05-29

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

1.8   历史

RFC 938 [Miller 1985]是较早讲述事务的RFC文档之一。该文档中规定了IRTP,即:Internet可靠的事务协议,它能保证数据分组的可靠、按顺序提交。该文档中把事务定义为一个短小的、自包含的报文;而IRTF定义了任意两台主机(即IP地址)之间持续存在的优选连接,当其中任何一台主机重新启动后,该连接都会重新同步。IRTF协议位于IP协议之上,并定义了专门的8字节首部。

RFC 955 [Braden 1985]本质上并未规定任何协议,而只是给出了事务协议的一些设计准则。它认为UDP和TCP这两个主流的运输层协议所提供的业务相差太大,而事务协议正好填补了TCP和UDP之间的空档。该RFC文档把事务定义为一次简单的报文交换:一个请求发给服务器,然后一个应答发回到客户。它还认为各种事务都有如下特征:不对称的模式(一端是服务器,另一端是客户)、单工数据传递(任一时刻都只有一个方向有数据传输)、持续时间短(可能延续几十秒,但绝不可能几小时)、时延小、数据分组少以及面向报文(不是字节流)。

该RFC中列举了域名服务系统(DNS)的例子。它认为,在考虑是用UDP还是用TCP作为域名服务系统的运输层协议时,设计者往往陷入两难的境地。一个理想的解决方案应该既能提供可靠的数据传输,又不需要专门地建立和释放连接,不需要报文的分段和重组(从而使应用程序不再需要知道像576这样的神秘数字),同时还能使两端的空闲状态所处时间最短。TCP什么都好,只可惜它需要建立和释放连接。

另一个相关的协议是RDP,即可靠数据协议。该协议在RFC 908 [Velten,inden,and Sax 1984]中定义,后来又更新为RFC 1151 [Patridge and Hinden 1990]。与RDP实现有关的经验在参考文献[Patridge 1987] 中可以找到。参考文献[Patridge 1990a]中对RDP有如下评价:“当人们寻求一个可靠的数据报协议时,他们通常是想要一个事务协议,一个能够让他们与多个远端系统可靠地交换数据单元的协议,一个类似于可靠UDP的协议。RDP应该看作是一个面向记录的TCP协议,它利用连接可靠地传输有格式数据块流。RDP并不是一个事务协议。”(RDP不是事务协议的理由是,它和TCP一样采用了三次握手技术。)

RDP使用通常的插口应用编程接口。与TCP类似,RDP提供流插口接口(SOCK_ STREAM)。另外,RDP还提供SOCK_RDM插口类型(可靠的报文提交)和SOCK_SEQPACKET插口类型(有序的分组)。

VMTP,即通用报文事务协议,是在RFC 1045 [Cheriton 1998]中规定的,是一个专门用于事务的协议,就像远程过程调用一样。像IRTP和RDP那样,VMTP也是IP之上的运输层协议,但VMTP还支持多播通信,这个特性是T/TCP以及本节提到过的其他协议所不具备的(参考文献[Floyd et al. 1995]中有不同意见,他们认为提供可靠的多播通信是应用层的任务,而不是运输层的任务)。

VMTP还为应用程序提供不一样的应用编程接口,其插口类型为SOCK_TRANSACT。具体定义详见RFC 1045。

虽然T/TCP的许多概念早在RFC 955中就已经出现,但直到RFC 1379 [Braden 1992b]发布才正式有了T/TCP的第一个规范。该RFC文档定义了T/TCP的概念,接下来的RFC 1644 [Braden 1994]给出了更多细节,并讨论了一些实现问题。

图1-15比较了实现各种运输层协议分别都需要多少行C源代码。

图1-15   实现各种运输层协议所需要的源代码行数

为支持T/TCP所需增加的源代码行数(大约1200行)是UDP协议源代码行数的1.5倍。为使4.4BSD支持多播通信,需要增加大约2000行源代码(设备驱动程序的改变和支持多播路由所需要的代码行数尚未计算在内)。

VMTP可以从ftp://gregorio.stanford.edu/vmtp-ip得到。RDP通常还无法得到。

HTTP UDP Unix TCP/IP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:我是如何根据豆瓣api来理解Restful API设计的
下一篇:GitLab CI/CD关键词解析系列
相关文章