如何检测网络连接失败?

Ian*_*Ian 1 networking centos

我在 Windows 机器和 Linux 机器之间有直接的以太网连接。如果我在 Windows 端禁用连接,Linux 似乎仍然相信链接已启动。

这是正常行为吗?if down如果链接失败以及ifup何时返回,我希望 Linux 能够运行。那可能吗?

War*_*ung 7

您正在尝试向 Linux 添加 Windows 错误功能。Linux 并不是故意的。

我称其为错误功能,因为当 Windows 执行此操作时,即使没有丢失任何数据包,它也会终止使用该网络接口的所有连接。此外,除非您处于最简单的情况,只有两台机器和一条交叉电缆(或 MDI-X),否则它无法检测物理层连接的中间或远程部分的故障。

想一想:Windows 仅在检测到很可能是暂时的本地故障时才断开连接,但甚至不会尝试检测更远的故障。

Windows 可能希望这些中介及其远程对等方会复制其错误功能,但他们不会这样做,因为它们的设计原则与 Internet 本身的协议相同,而 Internet 本身的协议设计时考虑到了失败。当核心路由器出现一点点故障时,整个互联网不会爆炸。它应付。

如果你想知道我持有这种强烈观点的立场是什么,那就是我已经编写网络程序大约二十年了。那次经历将墨菲定律推向了你:任何可能出错的事情都会出错。每次小失败都举手投降只会让你的程序变得脆弱。应对比较好。

有没有注意到当网络链接断开时,您的 Web 浏览器没有关闭所有选项卡?那是因为它可以应对网络故障。有些是由于 HTTP 的设计,但有些也是 Web 浏览器设计者在处理可检测故障时的选择。相比之下,Windows 资源管理器My Computer会将所有打开的资源管理器窗口返回到默认文件夹(通常为 ),因此当您在短暂停留后返回机器时,您就失去了工作位置。

如果您绝对必须这样做,那么 robbat2 的答案中建议的工具将执行此操作。然而,编写网络程序来应对网络链接故障要好得多。

如果不能选择失败,请使用 Linux 内核的 NIC 通道绑定功能设置冗余网络接口。您可以将系统配置为在一个链接出现故障时自动故障转移到第二个(或第三个!)网络接口。