TCP 服务器被仅 "connect" 且未发送任何数据的客户端淹没

TCP Server is overwhelmed by clients that only "connect" without sending any data

我已经使用 .NET TcpListener 创建了一个 TCP 服务器。

我担心它会如何通过发送大量类似于 DoS 类攻击的虚假连接来滥用它。

我创建了一个小型控制台应用程序来重复启动与服务器的连接(仅 "connect" 不传输其他类型的数据)。 "max allowable concurrent connections limit" 是服务器中防止服务器被淹没的设置,瞬间就满足了。这使我的服务器几乎毫无用处,因为它无法接受新连接,除非其他假连接断开连接。这证明我的担心不是多余的。

我们有什么办法可以从应用程序级别来防止这种情况发生吗? 我在考虑要求客户端在连接时发送一种令牌,而服务器会拒绝不发送的连接,但我认为 TCP 不会那样工作。

依赖外部解决方案是唯一的办法吗?例如。 VPN、防火墙、NAT 等?

在每个接受的套接字上设置读取超时,并在触发时关闭它。