如何关闭 TCP 连接的一侧而使另一侧保持打开状态? (未发送 FIN 或 RST)

如何关闭 TCP 连接的一侧而使另一侧保持打开状态? (未发送 FIN 或 RST)

我正在尝试重新创建一个场景,其中 Solaris 客户端通过 TCP 套接字连接到 Linux 服务器,但连接的客户端突然断开,而没有发送 FIN 或 RST 数据包。这与拉动客户端和服务器之间的网络电缆的结果非常相似。

Solaris 中是否有任何命令或一系列命令可以重现这种情况,而无需拉动任何网络电缆?

答案1

您可能需要设置与该特定连接匹配的 ipfilter 丢弃规则,然后使用tcpdrop或者类似的东西告诉 Solaris 只清除套接字。

需要首先设置 ipfilter 丢弃规则,否则当第一个传入数据包tcpdrop到达时,内核可能仍会响应 RST 数据包。如果您可以在 Solaris 端让连接自行超时,那么这tcpdrop并不是绝对必要的。

请注意,它tcpdrop使用未记录的内核接口,因此不能保证它可以与比其设计版本更新的 Solaris 版本一起使用。

如果您想要保留的同一主机没有其他流量,另一种可能性是为服务器主机添加黑洞路由。但与仅删除单个 TCP 连接相比,这是一个相当生硬的工具,它会杀死同一主机的所有其他连接,造成附带损害。

也可以看看:https://www.oracle.com/technetwork/systems/networking/tcpdrop-jsp-135583.html

相关内容