T C P提供的是一种虚电路方式的运输服务。一个连接的生存时间包括三个不同的阶段:建立、数据传输和终止。这种虚电路服务非常适合诸如远程注册和文件传输之类的应用。
但是,还有出现其他的应用进程被设计成使用事务服务。一个事务 ( t r a n s a c t i o n )就是符合下面这些特征的一个客户请求及其随后的服务器响应。
我们已经看到的一个使用这种类型服务的应用就是域名服务(第 1 4章),尽管D N S与服务器重新处理重复的请求无关。如今一个应用程序设计人员面对的一种选择是使用 T C P还是U D P。T C P提供了过多的事务特征,而U D P提供的则不够。通常应用程序使用U D P来构造(避免T C P连接的开销),而许多需要的特征(如动态超时和重传、拥塞避免等)被放置在应用层,一遍又一遍的重新设计和实现。
一个较好的解决方法是提供一个能够提供足够多的事务处理功能的运输层。我们在本节所介绍的事务协议被称为 T / T C P。我们从它的定义,即 RFC 1379 [Braden 1992b]和[ B r a d e n 1 9 9 2 c ],开始介绍。
大多数的T C P需要使用7个报文段来打开和关闭一个连接(见图 1 8 - 1 3)。现在增加三个报文段:一个对应于请求,一个对应于应答和对请求的确认,第三个对应于对应答的确认。如果额外的控制比特被追加到报文段上—也就是,第 1个报文段带有 S Y N、客户请求和一个F I N—客户仍然能够看到一个 2倍的RT T与S P T之和的最小开销(与数据一起发送一个 S Y N和F I N是合法的;当前的T C P是否能够正确处理它们是另外一个问题)。
另一个与T C P有关的问题是 T I M E_WA I T状态和它需要的 2 M S L的等待时间。正如在习题1 8 . 1 4中看到的,这使两个主机之间的事务率降低到每秒 2 6 8个。T C P为处理事务而需要进行的两个改动是避免三次握手和缩短 WA I T _ T I M E状态。T / T C P
通过使用加速打开来避免三次握手:
这种“加速打开”避免了使用三次握手的要求,除非客户或者服务器已经崩溃并重新启动。这样做的代价是服务器必须记住从每个客户接收的最近的 C C值。基于在两个主机之间测量 RT T来动态计算 T I M E _ WA I T的延时,可以缩短 T I M E _ WA I T状态。T I M E _ WA I T时延被设置为8倍的重传超时值RTO(见2 1 . 3节)。
通过使用这些特征,最小的事务序列是交换三个报文段:
在参考资料中有许多关于实现这个 T C P选项的很好的地方。我们在这里将它们归纳如下: • 服务器的 S Y N和A C K(第2个报文段)必须被迟延,从而允许应答与它一起捎带发送(通常对S Y N的A C K是不迟延的)。但它也不能迟延得太多,否则客户将超时并引起重传。 • 请求可以需要多个报文段,但是服务器必须对它们可能失序达到的情况进行处理(通常当数据在S Y N之前到达时,该数据被丢弃并产生一个复位。通过使用 T / T C P,这些失序的数据将放入队列中处理)。 • A P I必须使服务器进程用一个单一的操作来发送数据和关闭连接,从而允许第二个报文段中的F I N与应答一起捎带发送(通常应用进程先写应答,从而引起发送一个数据报文段,然后关闭连接,引起发送 F I N)。 • 在收到来自服务器的 M S S通告之前,客户在第 1个报文段中正在发送数据。为避免限制客户的M S S为5 3 6,一个给定主机的M S S应该与它的C C值一起缓存。 • 客户在没有接收到来自服务器的窗口通告之前也可以向服务器发送数据。 T / T C P建议默认的窗口为4 0 9 6,并且也为服务器缓存拥塞门限。 • 使用最小3个报文段交换,在每个方向上只能计算一个 RT T。加上包括了服务器处理时间的客户测量RT T。这意味着被平滑的 RT T及其方差的值也必须为服务器缓存起来,这与我们在2 1 . 9节描述的类似。
T / T C P的特征中吸引人的地方在于它对现有协议进行了最小的修改,同时又兼容了现有的实现。它还利用了T C P中现有的工程特征(动态超时和重传、拥塞避免等),而不是迫使应用进程来处理这些问题。
一个可作为替换的事务协议是通用报文事务协议 V M T P(Versatile Message Tr a n s a c t i o nP r o t o c o l),该协议在RFC 1045 [Cheriton 1988]中进行了描述。与T / T C P是现有协议的一个小的扩充不同,V M T P是使用I P的一个完整的运输层。 V M T P处理差错检测、重传和重复压缩。它还支持多播通信。