为什么默认情况下不启用 net.ipv4.tcp_rfc1337?

Nun*_*uno 6 tcp rfc rst sysctl time-wait

tcp_rfc1337 设置似乎有解决 TIME-WAIT 暗杀的方法。

第一个问题是新连接中可能会错误地接受旧的重复数据,导致发送的数据损坏。
第二个问题是连接可能会变得不同步并进入 ACK 循环,因为旧的重复数据包进入新连接,这将变得不同步。
第三个也是最后一个问题是旧的重复数据包可能会错误地进入新建立的连接并杀死新连接。

从我读到的内容来看,为了解决问题,设置的作用是在套接字处于 TIME-WAIT 状态时忽略 RST(重置)数据包

那么,为什么默认情况下不启用此设置?使用这个有什么缺点?

当我研究如何阻止 SYN 泛洪攻击时,我实际上了解了这个变量。您认为此设置有助于阻止它们吗?

Mar*_*ell 9

我同意格雷格的评论。RFC 1337只是一个信息 RFC,不是 TCP 标准的一部分。为确保生产网络中没有任何意外变化,默认情况下禁用此功能并将其留给网络管理员决定是否要启用它以进行测试是有意义的。

在 TIME-WAIT 中丢弃套接字的 RST 数据包似乎不会产生任何负面影响,但这并不意味着没有任何负面影响 - 也许是尚未完全探索的奇怪边缘情况。

有趣的是,tcp_rfc1337的内核文档似乎不正确:

tcp_rfc1337 - BOOLEAN
    If set, the TCP stack behaves conforming to RFC1337. If unset,
    we are not conforming to RFC, but prevent TCP TIME_WAIT
    assassination.
    Default: 0
Run Code Online (Sandbox Code Playgroud)

如果设置了该选项,我们将符合 RFC 1337 并丢弃 RST 数据包,从而防止 TIME-WAIT 暗杀。如果该选项未设置(默认),我们不符合 RFC 1337 很容易受到 TIME-WAIT 暗杀。