《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —2.3 T/TCP 实现所需变量

举报
华章计算机 发表于 2019/11/19 21:07:45 2019/11/19
【摘要】 本节书摘来自华章计算机《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》一书中第2章,第2.3节,作者是[美]W. 理查德·史蒂文斯(W.Richard Stevens) ,胡谷雨 吴礼发 等译 谢希仁 校。

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协议实现时就用这些变量。

image.png

在这个图中,我们用{}表示结构。图中的TCP控制块是一个tcpcb结构。所有TCP协议的实现都必须为其中的连接保存并维护一个控制块,控制块的形式可以多样,但必须包含特定连接的所有变量。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。