2011-10-25 78 views
0

我有一个相当有趣的问题。我们有两个工作中的网络彼此物理重复(网络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秒。我知道我可以在呼叫中加入更短的暂停,以便尽早选择并放弃,但这不是重点。我试图理解这两个网络导致此问题的可能不同之处。

+0

防火墙可能会拒绝TCP段而不回复任何内容,以便主机连接将继续尝试... –

+0

嗯...在网络A的情况下,当立即发生超时时,实际上看不到任何数据包离开设备。所以也许问题是为什么在网络A中,我在网络B上没有看到任何数据包,我呢? – Chappelle

回答

0

也许你应该给更多的地址?目前尚不清楚知识产权是什么。

我的猜测是:

  • 在缓慢的情况下,你得到ARP故障(不响应,因为目标有不正确的网络掩码)
  • 在快速的情况下你得到一个路由故障。如果主机有一个不正确的较小的网络掩码,它甚至不会尝试ARP。

请尝试对阻塞套接字进行分隔,错误代码应该不同。

+0

谢谢你慢慢记住事情的arp一面。我甚至没有想到,实际上我的10.200.234.0/16网络中可能有一台设备,它具有IP 192.168.1.1,这是我选择的静态设备配置的网关IP。同样,这个想法是选择一个完全失败的配置。但是,一旦我捕获了所有的arp数据包,立即就会发现某些frickin设备在IP 192.168.1.1的网络上。所以这是所有超时麻烦的根源。再次感谢cdleonard。 – Chappelle