tcp_rfc1337 设置似乎有 TIME-WAIT 暗杀的解决方案。
第一个问题是旧的重复数据可能在新连接中被错误地接受,导致发送的数据损坏。
第二个问题是,由于旧的重复数据包进入新的连接,连接可能会变得不同步并进入 ACK 循环,这将变得不同步。
第三个也是最后一个问题是旧的重复数据包可能会错误地进入新建立的连接并终止新连接。
从我读到的内容来看,为了解决问题,该设置所做的是在套接字处于其 TIME-WAIT 状态时忽略 RST (reset) 数据包。
那么,为什么默认情况下不启用此设置?使用这个有什么缺点?
当我研究阻止 SYN 泛洪攻击时,我实际上了解了这个变量。您认为此设置有助于阻止它们吗?
我同意格雷格的评论。RFC 1337只是一个信息 RFC,而不是 TCP 标准的一部分。为确保生产网络中没有任何意外更改,默认情况下禁用此功能并由网络管理员决定是否要启用它以进行测试是有意义的。
在 TIME-WAIT 中丢弃套接字的 RST 数据包似乎不会产生任何负面影响,但这并不意味着没有任何负面影响——也许是一个尚未完全探索的奇怪边缘情况。
有趣的是,tcp_rfc1337 的内核文档似乎不正确:
如果设置了该选项,我们将遵循 RFC 1337 并丢弃 RST 数据包,从而防止 TIME-WAIT 暗杀。如果该选项未设置(默认),我们不符合 RFC 1337 很容易受到 TIME-WAIT 暗杀。
我找到了 内核源代码,对我来说文档是正确的:默认 = 0:kill
默认值是有意义的:RFC 是信息性的,因此您必须设置此旋钮(值 = 1)以符合它。