《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —2 T/TCP协议
第2章 T/TCP协议
2.1 概述
我们分两章(第2章和第4章)讨论T/TCP协议。这样,在深入研究T/TCP协议之前(第3章),我们可以先看一些应用T/TCP的例子。本章主要对协议应用技巧和实现中用到的变量做一个介绍。下一章我们学习一些T/TCP应用的示例程序。第4章结束我们对T/TCP协议的学习。
在第1章中我们已经看到了,当把TCP协议应用于客户-服务器事务时会存在两个问题:
1) 如图1-8所示,三次握手使客户端测得的事务时间额外多出一个RTT。
2) 由于客户进程主动关闭连接(即由客户进程首先发出FIN),因而在客户收到服务器的FIN后还要在TIME_WAIT状态滞留大约240秒。
TIME_WAIT状态和16位TCP端口号这两者结合起来限制了两台主机之间的最大事务速率。例如,如果同一台客户主机要不断地和同一台服务器主机进行事务通信,那么它要么每完成一次事务后等待240秒才开始下一个事务,要么为紧接着的事务选择另外一个端口号。但每240秒的时间内至多只能有64 512个端口(65 535减去1023个知名端口)可用,从而每秒最多也就只能处理268个事务。在RTT值为1~3ms的局域网上,实际上可能会超过这个速率。
而且,即使应用程序的事务速率低于这个速率—比如每240秒50 000次事务,当客户端处于TIME_WAIT状态时,协议还是需要控制块来保存连接的状态。卷2中给出的BSD实现中,每个连接都需要一个Internet协议控制块(84字节)、一个TCP控制块(140字节)和一个TCP/IP首部模板(40字节)。这样总共就需要13 200 000字节的内核存储空间。这个开销即便在内存不断扩大的今天依然显得大了些。
现在,T/TCP协议解决了这两个问题,采用的方法是绕过三次握手,并把TIME_WAIT状态的保持时间由240秒缩短到大约12秒。我们将在第4章中详细研究这两个特点。
T/TCP协议的核心称为TAO,即TCP加速打开,跳过了TCP的三次握手。T/TCP给主机建立的每个连接分配一个唯一的标识符,称为连接计数(CC)。每台T/TCP主机都要将不同主机对之间的最新连接计数CC保持一段时间。当服务器收到来自T/TCP客户的SYN时,如果其中携带的CC大于该主机对最新连接的CC,就保证这是一个新的SYN,于是就接受该连接请求,而不需要三次握手。这个过程称为TAO测试。如果测试失败,TCP还是用三次握手的老方法来确认当前这个SYN是否为新的。
- 点赞
- 收藏
- 关注作者
评论(0)