[英]Socket connect timeouts differ between networks
我有一个相当有趣的问题。 我们有2个网络在工作,它们是彼此的物理副本(网络A和网络B)。 它们只是在不同的子网上运行。
我正在为在网络上相互群集的设备进行一些容错改进。 我正在测试的一个测试案例是引入错误配置时这些设备的行为。 例如,假设我有两个具有以下接口配置的设备:
设备X IP:10.200.234.127子网掩码:255.255.254.0默认网关:10.200.234.1
设备Y IP:10.200.234.127子网掩码:255.255.254.0默认网关:10.200.234.1
这两个设备通过群集心跳的广播相互发现。 心跳包含设备的ip地址等,从而使它们之间可以建立通信。 很标准的东西。 现在,可以说我引入了一个网络配置错误,使得这些设备之一针对不同的sunbet配置:
设备X IP:192.168.1.115子网掩码:255.255.255.0默认网关:192.168.1.1
此处发生的是,两个设备仍从群集广播中相互学习(它们在同一交换机上物理连接在一起)。 但是,正如您期望的那样,它们无法按预期相互通信。 但是,当这些设备尝试相互通信时,我看到一些有关连接超时的奇怪行为。 例如,如果设备连接到网络A,则连接尝试在几秒钟内超时,这非常好。 现在,如果我将两个设备都放在网络BI上,则会看到完全不同的行为。 在网络B上,在设备之间建立套接字连接的connect()调用不会很快失败。 相反,它们陷入了此退避和重新传输周期,该周期花了189秒才能最终放弃(如通过wireshark验证的3、6、12、24、48和96秒重新传输)。
所以我想知道的是,为什么connect()调用在网络A而不是网络B中如此快速地失败。我尝试使用阻塞套接字和对connect()的调用以及非阻塞套接字和对connect(),然后调用select()。 在这两种情况下,我都无法早于189秒放弃连接。 我知道我可以在选择和放弃电话时强加较短的超时时间,但这不是重点。 我试图了解导致这两个问题的这两个网络上可能有什么不同。
也许您应该提供更多地址? 目前尚不清楚IP是什么。
我的猜测是:
请尝试跟踪阻塞套接字,错误代码应该不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.