2014-10-01 24 views
1

我们已经开发了多宿主应用程序现在在测试我的设置是:SCTP多归属问题

ETH4作为主接口背靠背连接到另一台机器。 Eth5作为辅助接口连接到另一台机器。

我让我的porimary接口下来,现在当INIT被被送到它 达到同行机似乎采用二次接口,但保留了源 IP地址是主接口的不仅是因为其在同行 机试图响应INIT_ACK它试图发送主要的 接口IP,这是关闭的,并且由于ICMP它丢弃了该数据包。

我不太擅长路由,但似乎有一些路由没有 被正确配置,为什么它总是使用主ip?

我已经测试了相同的部分,当我已经通过路由器连接我的主要& 辅助接口但facrd同样的问题。

回答

2

为了大家的利益,我在谈到要点之前就谈到了几点。

SCTP端点可以有多个IP地址。也就是说,应用程序可以打开一个SCTP套接字并将选定的一组地址或所有IP地址绑定到该套接字。 SCTP中的一个关联是在一对端点之间。 SCTP端点应交换IP地址列表,以便每个端点可以接收来自其他端点中任何地址的消息。 IP地址列表的交换是在协会启动时完成的。但是,SCTP应使用一个IP地址作为通信的主地址,而其他IP地址将用于重发,以防连续失败发送数据或控制块。

从RFC4960(SCTP)中,您会注意到“在关联初始化期间,如果接收到的INIT中存在主机名参数,端点应将该主机名解析为IP地址列表,并通过将解析的IP地址与SCTP源端口相结合来推导出该对等体的传输地址。“

然而RFC4960(SCTP)的一个关键点是时间将主机名解析为IP地址的重要性。它指出,“在名字翻译涉及潜在的长时间延迟的情况下,INIT的接收方必须推迟名称解析直到从对方接收到COOKIE ECHO块。在这种情况下,INIT的接收方应该建立使用收到的主机名称(而不是目标传输地址)发送状态Cookie,并将INIT ACK发送到从其接收到INIT的源IP地址。“

如果我们从上述信息中单独查看您的场景: 考虑到在发送INIT块后主接口被关闭,并且假定将主机名解析为IP地址的时间在服务器中占用过多时间,可以假定INIT-ACK已经发送到从其接收到INIT的源IP地址(主接口)。但是,如果仔细阅读SCTP的RFC,RFC4960(SCTP)中有一个关于INIT-ACK的明确说明,声明“INIT ACK必须发送到INIT的源地址”。请参阅RFC3286 (SCTP)似乎表示它是一种保护机制,因为它声称“由于INIT ACK始终返回到INIT的源地址,因此盲人攻击者将无法获得Cookie。“

现在,如果我们通过考虑上述信息来考虑您的情况: 很明显,服务器总是将响应INIT ACK块发送到位于IP头部的源地址INIT。