如何在 Linux 中强制删除有限数量的连接?

如何在 Linux 中强制删除有限数量的连接?

如果服务器有太多连接,我希望能够强制丢弃一堆连接。

答案1

唯一支持的方法是让服务器应用程序本身强制限制连接数。它可以考虑连接的生命周期、空闲时间以及其他因素来决定哪个连接最适合关闭。

通过各种黑客手段可以从应用程序本身的外部关闭连接,但没有一种手段是特别干净的。而且所有这些手段都缺乏任何好的方法来挑选要关闭的连接。

  • 使用ip6tables(或iptables) 创建规则,以 RST 数据包响应服务器为每个连接生成的下一个数据包。这样做的一个缺点是它不会终止空闲连接。如果应用程序配置了 keepalive(它应该配置),那么即使是空闲连接最终也会被终止,但通过这种方法无法快速关闭空闲连接。
  • 暂时将客户端的 IP 地址添加到dummy0网络接口。然后打开一个与服务器完全相同的客户端 IP 和端口号的新连接,以替换旧连接。您可以使用命令nc创建这样的连接。一旦您nc再次终止,旧连接和新连接都将消失。然后dummy0再次从接口中删除 IP 地址。这种方法的一个缺点是,在执行此操作时,您将中断与该远程 IP 地址的所有通信,这可能会导致不相关的连接出现问题。
  • 如果服务器应用程序使用每个连接一个进程的模型,您可以终止单个子进程来关闭连接。但是,这可能会阻止服务器应用程序正确清理,并且可能会扰乱您的日志记录。
  • 使用工具来伪造 RST 数据包。第一个伪造的 RST 数据包将由于序列号不正确而无法被接受,但它将生成一个包含有关正确序列号的信息的质询数据包,然后可以使用该数据包生成正确的 RST 数据包。

相关内容