《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —3.4 服务器收到过时的重复SYN

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

3.4   服务器收到过时的重复SYN

如果服务器收到了一个看似过时的CC值该怎么办呢?我们让客户发出一个CC值为1的SYN报文段,这个值小于服务器刚刚从该客户收到的CC值(2,见图3-3)。事实上,这种情况也是可能发生的,比如:CC值等于1的这个报文段属于客户和服务器之间此前某个连接,它在网络上耽搁了一段时间,但还没有超过其报文段最大生存时间(发出后MSL秒),最终到达了服务器。

一个连接是由一对插口定义的,即包含客户端IP地址和端口号及服务器端IP地址和端口号的四元组。连接的新实例称为该连接的“替身”。

从图3-5我们可以看出,服务器收到一个CC值为1的SYN报文段后强迫执行三次握手操作,因为它无法判断该报文段是过时重复的还是新的。

由于激活了三次握手(这一点我们可以从服务器仅仅确认了客户的SYN而没有确认客户的数据来判断),服务器的TCP协议在握手过程完全结束以后才会把300字节的数据提交给服务器进程。

本例中,第1个报文段就是一个过时的重复报文段(客户的TCP此时并不在等待对这个报文段中SYN的响应),于是当第2个报文段中服务器发出的SYN/ACK到达时,客户端TCP协议的响应是要求重新建立连接(RST,第3个报文段)。这样做也是理所应当的。服务器的TCP协议收到这个RST后就扔掉那300字节的数据,而且accept函数也不返回到服务器进程。

image.png

图3-5   T/TCP服务器收到过时的重复SYN报文段

第1个报文段是由一个特殊的测试程序生成的。我们无法让客户的T/TCP协议自己生成这样的报文段,而只能让它以过时的重复报文段出现。作者曾试着把内核的tcp_ccgen变量值改为1,但是,正如我们将在图12-3中看到的,当内核的tcp_ccgen小于它最近一次发给对端的CC值时,TCP协议自动地发送一个CCnew选项而不是发送一个CC选项。

图3-6所示的就是这对客户-服务器之间的下一次,也是常规的一次T/TCP事务。正如我们所预期的,这是一个包含3个报文段的交换过程。

image.png

图3-6   常规的T/TCP客户-服务器事务

服务器希望这个客户发来的CC值大于2,因此收到CC值为3的SYN后TAO测试成功。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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