【问题标题】:Stress Testing - Connection Saturation压力测试 - 连接饱和度
【发布时间】:2014-01-08 08:45:14
【问题描述】:

我已经用 C#(UDP 数据包泛洪器)制作了一个快速压力测试器。

我用家里的另一台电脑作为测试目标。

第一次,我以 80Mbps 的速度淹没了计算机。

这会在几秒钟内终止互联网连接(在目标计算机中),从而无法访问任何页面。

但后来,我以 1Gbps 的速度(比第一次攻击强 10 倍以上)淹没了目标计算机,令我惊讶的是,它并没有切断互联网连接。

虽然 1Gbps 洪水确实使互联网连接变慢了很多,但它并没有杀死它。几分钟后页面成功加载。是的,很慢,但还活着。

但在 80Mbps 的洪流中,页面根本没有加载,即使过了一个小时也是如此。 80Mbps 完全杀死了它。

这怎么可能?

【问题讨论】:

  • 包的大小一样吗?
  • 没有。第一次洪水 (80Mbps) 的数据包长度为 3,而第二次洪水 (1Gbps) 的数据包长度为 65,500。

标签: c# testing udp stress-testing


【解决方案1】:

因此,在 80 Mbps 时,您每秒发送 2800 万个数据包,而在 1 Gbps 时,您每秒发送 16,400 个数据包。问题不在于数据量,而在于数据包的数量。每个数据包有一定的开销。不仅有数据开销,而且在网络硬件和必须解码数据包的软件中都有切换开销。

如果您在 80 Mbps 测试中增加数据包大小,它不会失败。

对 cme​​ts 的回应

计算数据包数量很简单,只需将数据速率除以数据包大小即可。 80 Mbps 除以每个数据包 3 个字节的数据约为 2800 万。

我不知道你用什么软件来产生洪水攻击。 UDP flood attack 的全部意义在于在短时间内发送尽可能多的数据包。因此,您希望数据包数据非常小。在 1 Gbps 测试中发送大数据包会阻止它发送尽可能多的数据包。

一个 UDP 数据包头是 8 个字节。添加您在 80 Mbps 测试中使用的数据的三个字节,然后向上取整(以允许可能的开销)到 16 个字节。您的 1 Gbps 测试使用了 65,500 字节或 2^16 (65,536) 的数据包长度(包括标头)。因此,这些大数据包中的一个可以容纳 2^12 (4,096) 个较小的数据包。使用两个线程只会使您的数据包速率增加一倍。它仍然没有接近您运行的数据包速率,然后数据包只有 3 个字节(加上标头)。

【讨论】:

  • 好的,非常感谢。另外,你是如何根据每秒比特数和包长度计算包发送速度的?
  • 我忘了说另一件事。我没有选择洪水速度(每秒位数)。 80 Mbps 洪水和 1 Gbps 洪水之间的唯一区别是数据包长度和线程数。 80 Mbps 洪水使用 1 个线程和 3 个数据包长度,而 1 Gbps 洪水使用 2 个线程和 65,500 数据包长度。所以如果我没记错的话,更大的数据包是每秒比特数增加的主要原因。
  • 最后一件事。正如我在上一条评论中所说,每秒比特数较高的原因主要是数据包大小。当我将数据包大小从 3 增加到 65,500 时,洪水的 BpS(每秒比特数)也相应增加。而且,我如何在 80 Mbps 洪水时发送更多数据包,而在 1 Gbps 洪水时发送更少数据包?我认为每秒更多的比特意味着更快的攻击,因此意味着更多的数据包。
  • 好的,谢谢。那么这是否意味着数据包长度为 3 和 5 个线程的数据包泛洪将比具有 1 个线程的相同泛洪更快地泛洪?例如,多线程真的可以将洪水速度从每秒 28M 提高到每秒 100M/200M 吗?
猜你喜欢
  • 2012-07-16
  • 2012-06-05
  • 2014-05-31
  • 2011-08-11
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多