【发布时间】:2012-06-20 14:51:50
【问题描述】:
什么会更好地淹没网络?
1- 向 http web 服务器打开一个套接字并写入数据直到崩溃
2- 打开多个套接字并写入数据直到崩溃
3- 打开一个套接字并发送 tcp 数据包直到崩溃
4- 打开多个套接字并发送 tcp 数据包直到崩溃?
【问题讨论】:
什么会更好地淹没网络?
1- 向 http web 服务器打开一个套接字并写入数据直到崩溃
2- 打开多个套接字并写入数据直到崩溃
3- 打开一个套接字并发送 tcp 数据包直到崩溃
4- 打开多个套接字并发送 tcp 数据包直到崩溃?
【问题讨论】:
听起来您要做的是测试 Web 服务器如何对各种类型的拒绝服务攻击作出反应。
需要考虑的是 Web 服务器中的拒绝服务逻辑是什么,以及拒绝服务保护通常如何在 Web 服务器中实现。例如,是否有逻辑来限制并发连接数或来自同一 IP 的并发连接数,或监控流量以在流量超过某个阈值时对其进行限制或断开连接。
要考虑的一件事是不要仅仅通过 TCP/IP 套接字推送大量字节。 Web 服务器正在解释字节并期望使用 HTTP 协议。那么,如果您使用 HTTP 协议以及构建在 HTTP 上的其他协议进行奇怪和不寻常的事情会发生什么。
对于选项 3 和 4,听起来您正在考虑使用其窗口逻辑绕过 TCP/IP 堆栈,并仅发送 TCP 协议数据包流而忽略回复数据包,直到有东西冒烟为止。这更像是对服务器上 TCP 堆栈健壮性的测试,而不是 Web 服务器本身的健壮性。
【讨论】:
达到网络饱和的能力取决于网络条件。可能会以这样的方式编写“洪水”,因为它会导致中间设备丢弃数据包,而服务器本身最终看不到其最大负载。
您的应用程序应该从一个连接开始,并监控数据速率。如果所有连接的总数据速率继续上升,则继续添加连接。一旦它不再上升,您就达到了吞吐量限制。如果它开始下降,则说明您超出了系统的容量,或者导致拥塞控制启动,或者服务器无法有效处理那么多连接。如果吞吐量限制远低于您的预期,那么您可能需要调试您的网络,或调整您的 TCP/socket 参数。如果是服务器变慢了,您需要对其进行分析以了解它为什么无法处理连接负载。
另外,检查每个连接的数据速率,看看某些连接是否比其他连接快得多。如果发生这种情况,则服务器存在公平问题,也应予以解决。不过,这与服务器和网络性能的关系不大,因为它与良好的用户体验有关。此类问题的存在可能会在拒绝服务攻击中被利用。
【讨论】: