如何模拟客户端和服务器之间的完整网络丢失?

时间:2018-11-06 20:56:26

标签: go networking network-programming

我试图了解在使用“阻塞”调用时客户端(在客户端-服务器体系结构中)是否会以某种方式完全失去连接的另一端而没有任何丢失的迹象。我认为这可能会正常发生,因为大多数网络有时会出现问题。问题是我想重复一下这个想法:客户端以阻塞模式连接,服务器接受连接,然后消失,然后可能以后重新出现,但不是以服务器关闭连接或“ nacks”的方式出现或其他任何内容。

有没有办法在本地网络中诱发这种行为?

事实证明,这个特定的应用程序是用Go编写的,但我不知道这有多重要。

1 个答案:

答案 0 :(得分:2)

冒着愚蠢的危险...您是否考虑过手动拔下电缆/关闭网络接口?如果这仅是为了测试,那么如果您失去连接会发生什么情况,则可以选择。

另一种选择是使用操作系统的防火墙来丢弃特定的流量,例如在基于Linux的OS中添加带有iptables的规则。

//Block incoming port 80 (web)
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j DROP
//Block outgoing port 80 (web)
$ sudo iptables -I OUTPUT -p tcp -m tcp --dport 80 -j DROP

//Remove block incoming port 80 (web)
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
//Remove block outgoing port 80 (web)
$ sudo iptables -I OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

当然,您可以根据需要在程序中执行此命令。