TCP RST报文能减少连接超时吗?



作为了解原始套接字如何工作的一种方法,我编写了一个虚拟防火墙,它根据TCP目的端口丢弃数据包。它正在工作,但问题是客户端重试相当长的一段时间,直到最终达到超时。

我想知道是否可能客户端重试这么长时间,因为它没有收到任何答案。在这种情况下,如果防火墙用TCP RST回复来自客户端的TCP SYNC消息,会有帮助吗?如果没有,是否有任何方法强制客户端停止重试(不减少Linux中的超时时间,而是更多,获得其数据包的特定答案,这将使客户端停止)?

您可以将防火墙视为主机操作系统上端口关闭的情况。主机操作系统的TCP/IP栈会做什么?

RFC 793(原始TCP RFC)对这种情况有以下说明:

如果连接不存在(CLOSED),则发送重置响应任何传入段,除了另一次复位。在特别是,不存在连接的syn地址将被拒绝

你应该阅读TCP rfc,并确保你的TCP RST包符合这种情况的要求。错误的RST将被客户端忽略。

RFC 1122还指出,包含2-4码的ICMP Destination Unreachable会导致连接中止。注意代码是很重要的,因为0、1和5被列为绝对不能终止连接

目的地不可达——代码2-4

这些是硬错误条件,所以TCP应该中止连接。

您的防火墙运行正常。不向攻击者泄露任何信息是信息安全的基本原则。发送RST将表明主机存在。

15-20年前有防火墙可以做到这一点,但当时人们不赞成。现在他们的行为就像你的一样:他们只是把包扔掉,不做任何回应。

如果没有响应,客户端在放弃之前重试几次是正常的,但与您在评论中被告知的相反,如果收到RST,客户端将立即放弃'connection refused'。

最新更新