《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —2.3 T/TCP 实现所需变量
2.3 T/TCP 实现所需变量
T/TCP协议要求内核保存一些新增的信息,本节将对这些信息加以描述,后面几节将讨论如何使用这些新信息。
1) tcp_ccgen。这是一个32位的全局整型变量,记录待用的CC值。每当主机建立了一个连接,该变量的值就加1,无论是主动还是被动,也无论是否使用T/TCP协议。该变量永不为0。当变量渐渐增长时,如果又回到了0,那么就将其值置为1。
2) 每主机高速缓存(per-host cache),其中包含了三个新变量,即tao_cc、tao_ccsent和tao_mssopt。该高速缓存也称为TAO高速缓存。我们将看到,T/TCP协议为每一个与之通信的主机创建一个路由表项,并把这些信息存储在路由表项中(把每主机高速缓存安排在路由表中是很方便的。当然也可以另开一张完全分离的表作为每主机高速缓存。T/TCP协议不需要对IP路由功能做任何改动)。在每主机高速缓存中创建一个新表项时,tao_cc和tao_ccsent必须初始化为0,表示它们尚未定义。
tao_cc记录的是最后一次从对应主机接收到且不含ACK的合法的SYN报文段(即主动打开连接)中的CC值。当T/TCP主机收到一个带有CC选项的SYN报文段时,如果CC选项的值大于tao_cc,那么主机就知道这是一个新的SYN报文段,而不是一个重复的老SYN,这样就可以跳过三次握手(TAO测试)。
tao_ccsent记录的是发给相应主机的最后一个不含ACK的SYN报文段(即主动打开连接)中的CC值。如果该值未定义(为0),那么只有当对方发回一个CCecho选项,表示其可以使用T/TCP协议时,才将tao_ccsent设置为非0。
tao_mssopt是最后一次从相应主机接收到的报文段最大长度选项值。
3) 现有的TCP控制块中增加了3个新变量,即cc_send、cc_recv和t_duration。第1个变量记录的是该连接上发送的每一个报文段中的CC值,第2个变量记录的是希望对方发来的报文段中所携带的CC值,最后一个变量则用来记录连接已经建立了多长时间(以系统的时钟滴答计算)。当连接主动关闭时,如果该时间计数器显示的连接持续时间小于报文段最大生存时间(MSL),则TIME_WAIT状态将被截断。我们在4.4节中将更详细地讨论这个问题。
我们在图2-5中给出这些新变量。在后续章节讲T/TCP协议实现时就用这些变量。
在这个图中,我们用{}表示结构。图中的TCP控制块是一个tcpcb结构。所有TCP协议的实现都必须为其中的连接保存并维护一个控制块,控制块的形式可以多样,但必须包含特定连接的所有变量。
- 点赞
- 收藏
- 关注作者
评论(0)