可以接收的最大数据包数是多少?

时间:2013-01-17 18:25:13

标签: windows networking tcp p2p packets


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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

通常,需要在一分钟内与数千万用户直接通信的应用程序将基于具有可用互联网带宽和计算能力的服务器群集,使得他们自己不会自己动手。 P2P应用程序不应该要求单个主机与那么多用户通信,尤其是在不到时间范围内。

Ray是正确的,即使您能够发送消息,您最终也会自己做出响应,除非您在客户端程序中添加了大量不同长度的故意延迟以消除其响应。如果您尝试使用UDP,他也应该使用UDP。我发现您的操作系统不太可能支持维护10,000,000个并发TCP连接。

为了从单个主机向数千万台主机发送通知,原始主机应该通知数千万台主机列表中n的一小部分子集。反过来,每个主机都会通知更多主机,依此类推。这将需要n log_n_(主机总数)时间与主机时间顺序的顺序。

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

如果响应不仅仅是一个ack,那么你的应用程序可能无法扩展到远离你所描述的硬件的任何东西,因为这会在太短的时间内输入过多的数据。很可能你会自己做,很可能会从你的ISP那里得到一个讨厌的数据。