我有一个相当有趣的问题。我们有两个工作中的网络彼此物理重复(网络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
这些2个设备经由簇H的广播发现彼此eartbeats。心跳包含设备IP地址等,这使得它们可以建立彼此的通信。相当标准的东西。现在,可以说我这样介绍,这些设备中的一个被配置为一个不同的sunbet网络配置错误:
设备X IP:192.168.1.115 子网掩码:255.255.255.0 默认网关:192.168.1.1
这里发生的是两台设备仍然从集群广播中相互了解(它们在同一交换机上物理连接在一起)。但是,正如您所期望的那样,他们无法按预期相互沟通。但是,当这些设备试图彼此通信时,我发现连接超时方面存在一些奇怪的行为。例如,如果设备连接在网络A上,则连接尝试在几秒钟内超时,这很好。现在,如果我将两台设备放在网络B上,我会看到完全不同的行为。在网络B上,connect()调用在设备之间建立套接字连接不会很快失败。相反,它们落入这种退避和重新传输循环中,最终放弃需要189秒(在经Wirehark验证的3,6,12,24,48和96秒时重新传输)。
所以我想知道的是为什么connect()调用在网络A中失败如此之快,而不是在网络B中。我尝试过使用阻塞套接字和调用connect()以及非阻塞套接字并调用connect(),然后调用select()。在这两种情况下,我都无法让连接放弃189秒。我知道我可以在呼叫中加入更短的暂停,以便尽早选择并放弃,但这不是重点。我试图理解这两个网络导致此问题的可能不同之处。
防火墙可能会拒绝TCP段而不回复任何内容,以便主机连接将继续尝试... –
嗯...在网络A的情况下,当立即发生超时时,实际上看不到任何数据包离开设备。所以也许问题是为什么在网络A中,我在网络B上没有看到任何数据包,我呢? – Chappelle