前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-TCP/IP(T/TCP:为事务用的TCP扩展)

速读原著-TCP/IP(T/TCP:为事务用的TCP扩展)

作者头像
cwl_java
发布2020-03-13 09:37:59
6140
发布2020-03-13 09:37:59
举报
文章被收录于专栏:cwl_Javacwl_Java

第24章 TCP的未来和性能

24.7 T/TCP:为事务用的TCP扩展

T C P提供的是一种虚电路方式的运输服务。一个连接的生存时间包括三个不同的阶段:建立、数据传输和终止。这种虚电路服务非常适合诸如远程注册和文件传输之类的应用。

但是,还有出现其他的应用进程被设计成使用事务服务。一个事务 ( t r a n s a c t i o n )就是符合下面这些特征的一个客户请求及其随后的服务器响应。

  1. 应该避免连接建立和连接终止的开销,在可能的时候,发送一个请求分组并接收一个应答分组。
  2. 等待时间应当减少到等于RT T与S P T之和。其中RTT (Round-Trip Ti m e )为往返时间,而SPT (Server Processing Ti m e )则是服务器处理请求的时间。
  3. 服务器应当能够检测出重复的请求,并且当收到一个重复的请求时不重新处理事务(避免重新处理意味着服务器不必再次处理请求,而是返回保存的、与该请求对应的应答)。

我们已经看到的一个使用这种类型服务的应用就是域名服务(第 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

通过使用加速打开来避免三次握手:

  1. 它为打开的连接指定一个 32 bit的连接计数CC (Connection Count),无论主动打开还是被动打开。一个主机的C C值从一个全局计数器中获得,该计数器每次被使用时加 1。
  2. 在两个使用T / T C P的主机之间的每一个报文段都包括一个新的 T C P选项C C。这个选项的长度为6个字节,包含发送方在该连接上的 32 bit的C C值。
  3. 一个主机维持一个缓存,该缓存保留每个主机上一次的 C C值,这些值从来自这个主机的一个可接受的S Y N报文段中获得。
  4. 当在一个开始的S Y N中收到一个C C选项的时候,接收方比较收到的值与为该发送方缓存的C C值。如果接收到的 C C比缓存的大,则该 S Y N是新的,报文段中的任何数据被传递给接收应用进程(服务器)。这个连接被称为半同步。如果接收的C C比缓存的小,或者接收主机上没有对应这个客户的缓存 C C,则执行正常的T C P三次握手过程。
  5. 为响应一个开始的S Y N,带有S Y N和A C K的报文段在另一个被称为 C C E C H O的选项中回显所接收到的C C值。
  6. 在一个非S Y N报文段中的C C值检测和拒绝来自同一个连接的前一个替身的任何重复的报文段。

这种“加速打开”避免了使用三次握手的要求,除非客户或者服务器已经崩溃并重新启动。这样做的代价是服务器必须记住从每个客户接收的最近的 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节)。

通过使用这些特征,最小的事务序列是交换三个报文段:

  1. 由一个主动打开引起的客户到服务器:客户的 S Y N、客户的数据(请求)、客户的F I N以及客户的C C。当被动的服务器T C P接收到这个报文段的时候,如果客户的 C C比为这个客户缓存的C C要大,则客户的数据被传送给服务器应用程序进行处理。
  2. 服务器到客户:服务器的 S Y N、服务器的数据(应答)、服务器的 F I N、对客户的F I N的A C K、服务器的 C C以及客户的 C C的C C E C H O。由于T C P的确认是累积的,这个对客户的F I N的A C K也对客户的S Y N、数据及F I N进行了确认。当客户T C P接收到这个报文段,就将其传送给客户应用进程。
  3. 客户到服务器:对服务器的 F I N的A C K,它也确认了服务器的S Y N、数据和F I N。客户对它的请求的响应时间为 RT T与S P T的和。

在参考资料中有许多关于实现这个 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处理差错检测、重传和重复压缩。它还支持多播通信。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第24章 TCP的未来和性能
    • 24.7 T/TCP:为事务用的TCP扩展
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档