0

我正在研究这个分布式计算项目,我必须模拟一些“节点”失败一段时间,即它们将无法读取或写入任何传出的 tcp 连接。一种方法是读取和丢弃消息,但我在 C/C++ 中寻找任何内置选项,您可以在其中设置套接字以丢弃任何传入消息。

4

2 回答 2

2

如果您通过关闭套接字来模拟故障,那么您会错过很多发生问题的情况。您 可能希望同时测试封闭和无响应的端点。主机上的解决方案,例如关闭套接字会模拟主机错误,但网络上的解决方案需要应用程序/操作系统支持解决方案。

封闭的套接字会自行清理。当您尝试访问使用关闭的套接字运行的操作系统时,它会返回错误。所有这些都是你应该检查的东西。然而,真正的故障,特别是在网络中而不是在主机中,只会丢弃数据包。这可能会使您的系统等待很长时间,而 tcp 超时。

模拟网络故障的最佳方法是使用防火墙规则。在防火墙处阻止连接的一端或两端,模拟网络故障。iptables,我相信还有其他解决方案,允许您丢弃部分数据包或具有某些特征的数据包。

于 2013-04-22T21:43:35.373 回答
2

只需关闭“失败”节点正在使用的所有套接字。

取决于 OP 节点应用程序的完成方式(问题中未提及).. 模拟故障节点的最简单方法是“杀死”节点应用程序,然后将跳过所有 TCP“关闭”数据包,其他节点将不知道连接关闭或(作为第一阶段)只需手动关闭节点上的所有通信套接字。这意味着不是完全干净的实验,因为其他节点会知道连接以“正确”的方式关闭,但足以检查系统的其余部分在某些节点丢失的情况下如何表现。

于 2013-04-22T19:46:43.920 回答