Sockets TCP服务器被客户机压垮,这些客户机只有;“连接”;不发送任何数据

Sockets TCP服务器被客户机压垮,这些客户机只有;“连接”;不发送任何数据,sockets,tcp,tcpclient,tcplistener,denial-of-service,Sockets,Tcp,Tcpclient,Tcplistener,Denial Of Service,我已经使用.NET TcpListener创建了一个TCP服务器 我有一些担心,它如何被滥用,通过滥发大量类似于DoS攻击的虚假连接 我创建了一个小的控制台应用程序来反复启动与服务器的连接(仅“连接”而不传输其他类型的数据)。“最大允许并发连接限制”(MaxAllowed concurrent connections limit)是服务器中的一个设置,用于防止服务器被淹没,它在瞬间得到满足。这使得我的服务器几乎毫无用处,因为它无法接受新的连接,除非其他假连接断开连接。这证明我的担心并非毫无根据

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

我有一些担心,它如何被滥用,通过滥发大量类似于DoS攻击的虚假连接

我创建了一个小的控制台应用程序来反复启动与服务器的连接(仅“连接”而不传输其他类型的数据)。“最大允许并发连接限制”(MaxAllowed concurrent connections limit)是服务器中的一个设置,用于防止服务器被淹没,它在瞬间得到满足。这使得我的服务器几乎毫无用处,因为它无法接受新的连接,除非其他假连接断开连接。这证明我的担心并非毫无根据

我们可以从应用程序级别采取什么方法来防止这种情况? 我想要求客户端在连接时发送一种令牌,服务器会拒绝不发送令牌的连接,但我不认为TCP是这样工作的


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

在每个接受的套接字上设置读取超时,如果它触发,请将其关闭。

在每个接受的套接字上设置读取超时,如果它触发,请将其关闭。

请阅读、分享您的研究并提出一个非常具体的问题。还提供有关服务性质的更多信息以缩小范围。据我们所知,你只有一个你信任的客户,然后你可以通过在VPN后面隐藏这个东西来得到帮助。对“如何防止互联网连接服务被滥用”编写一个恰当、详尽的答案太长了。在应用程序级别:如果可能,使用比SYN cookies更好的安全可靠的UDP库。否则,如果在5秒钟内没有收到数据,则至少执行超时以终止单个连接;然后保留一个计数器,记录当前打开的连接数;当计数器达到阈值且另一个TCP连接进入时,选择一个现有TCP连接并关闭它(),从而防止总连接数超过阈值。(不过,请尝试选择尚未发送任何数据的现有最旧连接,这样“坏”连接就不会赶走“好”连接)谢谢您的评论。我觉得他们很有见地。虽然无法完全消除这些问题,但至少在应用程序级别上进行缓解是一个良好的开端。请阅读、分享您的研究并提出一个非常具体的问题。还提供有关服务性质的更多信息以缩小范围。据我们所知,你只有一个你信任的客户,然后你可以通过在VPN后面隐藏这个东西来得到帮助。对“如何防止互联网连接服务被滥用”编写一个恰当、详尽的答案太长了。在应用程序级别:如果可能,使用比SYN cookies更好的安全可靠的UDP库。否则,如果在5秒钟内没有收到数据,则至少执行超时以终止单个连接;然后保留一个计数器,记录当前打开的连接数;当计数器达到阈值且另一个TCP连接进入时,选择一个现有TCP连接并关闭它(),从而防止总连接数超过阈值。(不过,请尝试选择尚未发送任何数据的现有最旧连接,这样“坏”连接就不会赶走“好”连接)谢谢您的评论。我觉得他们很有见地。尽管无法完全消除这些问题,但至少在应用程序级别进行缓解是一个良好的开端。