SCTP多宿主问题

时间:2014-10-01 13:49:01

标签: sctp

我们现在开发了多宿主应用程序,同时测试我的设置是:

Eth4作为主要接口连接到另一台机器。 Eth5作为辅助接口连接到另一台机器。

当我发送INIT时,我现在缩小了我的porimary界面 到达对等机器似乎使用辅助接口但源 保持的IP地址只是主要接口,因为当对等时 机器尝试响应它尝试发送主要的INIT_ACK 接口IP已关闭,由于ICMP,它会丢弃数据包。

我在路由方面不太好但似乎有些路由没有 已正确配置,为什么它总是使用主IP?

当我连接我的主要和& 通过路由器的辅助接口,但同样的问题。

1 个答案:

答案 0 :(得分:2)

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

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

从RFC4960(SCTP),您会注意到#"在关联启动期间,如果收到的INIT中存在Host Name参数,则端点应将该主机名解析为IP地址列表( es)并通过将已解析的IP地址与SCTP源端口相结合来导出该对等体的传输地址。"

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

如果我们仅从上述信息中查看您的方案: 考虑到在发送INIT块之后主接口被关闭并且假设将主机名解析为IP地址的时间在服务器中花费太多时间,可以假设INIT-ACK已被发送到源IP收到INIT的地址(主要接口)。

但是,如果您仔细阅读SCTP的RFC,则会在RFC4960(SCTP)中明确说明INIT-ACK声明" INIT ACK必须发送到INIT的源地址。 "请参阅RFC3286(SCTP)似乎将其作为保护机制传达,因为它声称"因为INIT ACK总是返回到INIT的源地址,盲人攻击者将不会获得Cookie。"

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