覆盖tcp段时的TCP FIN行为

时间:2015-08-11 04:55:43

标签: sockets networking tcp network-programming protocols

在浏览开源代码库时,我想到了一个有趣的场景。假设TCP连接建立成功后,TCP客户端发送序列号为101,len = 100的数据包。服务器尚未从客户端接收seq = 1,len = 100的数据。 之后,客户端发送序列号为151的FIN。现在TCP服务器认为FIN为重传。我的问题是,如果服务器收到覆盖TCP段的FIN数据包,那么根据RFC的TCP端点的行为应该是什么。 FIN会被处理,丢弃还是依赖于TCP实现?

2 个答案:

答案 0 :(得分:1)

  

是否会处理,丢弃FIN或依赖于TCP实现?

这是重叠段的特殊情况,即服务器接收第一个段以及后来在第一个段内具有开始的另一个段。大多数实现都会认为后面的段无效,但像@EJP已经评论过RFC通常不关心定义无效数据的行为。

以任何方式,段重叠或类似的无效数据通常可用于绕过客户端和服务器之间的防火墙,因为这些防火墙要么没有保持足够的状态来过滤掉无效数据(因为状态需要资源会减慢防火墙的速度)或者只是在处理无效数据时以不同方式向客户端和服务器显示行为。

答案 1 :(得分:1)

这个问题与我在4周前回复的问题非常相似。如果不相等。我认为两个线程的响应是一样的。请查看@EJP在该主题中与您的问题相关的评论。 out of order FIN packet and overwrite?