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

标签 go networking network-programming

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

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

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

最佳答案

冒犯傻的风险...您是否考虑过手动移除电缆/关闭网络接口(interface)?如果这只是为了测试如果您失去连接会发生什么,那是一种选择。

另一种选择是使用操作系统的防火墙来丢弃特定流量,例如在基于 Linux 的操作系统中使用 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

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

关于go - 如何模拟客户端和服务器之间的完全网络丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53179876/

相关文章:

json - Go websocket 序列化/反序列化 json

networking - FileZilla - 检索目录列表时出现 "The data connection could not be established: ECONNREFUSED - Connection refused by server"

linux - xfrm_replay_state_esn 字段是什么意思?

network-programming - libevent示例代码: how is invoked?的一个问题

ios - NSURLSession 方法不调用

linux - 基于 libpcap 的嗅探器是否适用于基于拨号的互联网连接

go - 从 golang 程序中执行另一个 go 程序

go - 关于 Golang 在上下文包中嵌入接口(interface)字段分配的困惑

go - 在 IntelliJ 中使用 File Watcher 运行 Makefile

android - 如何测试 android 应用程序的网络错误?