-1


我正在开发一个 P2P 应用程序,我正在使它扩展到数千万用户。我正在向每个其他对等方广播一个数据包并期待响应。在继续我的编码之前,我想确认我是否可以在不到一分钟的时间内将数据包发送到数以千万计的不同 IP 地址。如果它们都响应,那么我的应用程序甚至我的 PC 是否能够在这么短的时间内处理这么多的连接和数据包?

使用 TCP 和 Windows。
允许的最大 CPU 使用率:20%
互联网带宽:假设 2Mbps
基于使用 WinSock2 的 C 编程的应用程序
假设普通 PC 具有 2 GB Ram、Core 2 Duo、2.8 GHz

4

2 回答 2

1

嗯,是的,你可以,但你可能需要使用 UDP。然而,响应 backc 也将是一个自我 DoS。

于 2013-01-17T18:26:48.807 回答
1

通常,需要在一分钟内与数千万用户直接通信的应用程序将基于具有可用互联网带宽和计算能力的服务器集群,因此它们本身不会 DoS。P2P 应用程序不应该要求单个主机与那么多用户进行通信,尤其是在这么短的时间范围内。

雷是正确的,即使您能够发送消息,您最终也会对自己的响应进行 DoSing,除非您在客户端程序中故意放置许多不同长度的延迟以隔开它们的响应。如果您要尝试这样做,他应该使用 UDP 也是正确的。我发现您的操作系统不太可能支持维护 10,000,000 个并发 TCP 连接。

为了从单个主机向数千万主机发送通知,原始主机应通知数千万主机列表中大小为 n 的某个小子集。这些主机中的每一个将依次通知 n 多个主机,依此类推。这将需要 n log_n_(主机总数)时间与主机时间数量的顺序。

如果响应消息只是对收到原始消息的确认,则可以将与此相反的系统用于确认。每个主机都可以向发送消息的主机发送一个 ack,然后一旦该主机收到所有的 ack 或发生超时,它就会向发送它的主机发送一个 ack,其中包含哪些主机的信息已经给它发了一个ack。此过程继续备份树,直到组合的 ack 到达原始主机。这意味着您会收到大约 n 个返回给原始主机的响应,而不是数千万的数量级。

如果响应不仅仅是一个确认,那么您的应用程序可能无法扩展任何远程接近您描述的硬件的东西,因为在太短的时间内将有太多的传入数据。您很可能会自己进行 DoS 攻击,并且很可能会从您的 ISP 那里得到一个 nastygram。

于 2013-01-17T22:06:17.157 回答