Linux TCP RST数据包能否减少连接超时?

Linux TCP RST数据包能否减少连接超时?,linux,tcp,Linux,Tcp,为了了解原始套接字是如何工作的,我编写了一个虚拟防火墙,它根据TCP目标端口丢弃数据包。它正在工作,但问题是客户端会重试相当长的一段时间,直到最终达到超时 我想知道客户机是否因为没有收到任何答案而重试了这么长时间。在这种情况下,如果防火墙用TCP-RST回复来自客户端的TCP-SYNC消息,会有帮助吗?如果没有,是否有任何方法可以强制客户端停止重试(不减少Linux中的超时时间,但更多,获取其数据包的特定答案,从而使客户端停止)?您可以将防火墙视为主机操作系统上关闭端口的情况。主机操作系统的TC

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


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

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

(原TCP RFC)对本案有以下说法:

如果连接不存在(关闭),则发送重置 响应除另一个重置之外的任何传入段。在里面 特别是,寻址到不存在的连接的SYN被拒绝 通过这种方式

您应该阅读TCP RFC,并确保您的TCP RST数据包符合本案例的要求。客户端将忽略格式错误的RST

还指示包含代码2-4的ICMP目标不可访问应导致连接中止。请务必注意这些代码,因为0、1和5被列为中止连接的“不得”代码

无法到达目的地--代码2-4

这些是硬错误条件,因此TCP应该中止 连接


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

15-20年前,有防火墙可以做到这一点,但人们对此表示不满。现在他们的行为和你的一样:他们只是丢下包裹,什么也不做回应


如果没有响应,客户端在放弃之前重试几次是正常的,但与评论中告诉您的相反,如果客户端收到RST,它将立即放弃“连接被拒绝”。只有在完全没有响应时才会重试。

请记住,对数据包的任何响应都会向客户端显示防火墙的存在。这就是为什么防火墙经常被配置为不响应。好吧,我理解,但我只是想尝试了解更多关于TCP的信息。问题是,我正在发回RST消息,但什么也没有发生,因此我不确定它们是否构建错误,或者这是否是TCPI的正常行为,是否希望客户端继续尝试使用
RST
RST
表示对话中出现意外消息。由于客户正在尝试开始新的对话,我希望许多客户会再试一次。很可能您希望发送的是。我想知道使用TCP fin进行回复是否会优雅地结束连接。谢谢您的回答。不幸的是,ICMP目的地不可到达或TCP FIN都没有帮助。在这两种情况下(以及TCP RST),我都会在大约31秒后超时(TCP_syn_retries=4)。问题是TCP RST没有正确创建,因为我在校验和中有一个错误