8

SCTP具有本机多宿主支持,如果我理解正确,如果主接口出现故障,它将自动通过辅助 NIC 重新路由您的数据包。如果我的主 NIC 出现故障,我通过编写自定义路由守护程序来修改路由表,从而使用 TCP 复制了此功能。我想尝试SCTP改用。

在 Steven 的Unix Network Programming V1 第 3 版第 288 页中,它说:

对于此示例,我们使用一对多样式的服务器。我们做出这个选择有一个重要原因。第 5 章中的示例可以通过SCTP一个小改动进行修改:修改socket 函数调用以指定 IPPROTO_SCTP而不是 IPPROTO_TCP作为第三个参数。但是,简单地进行此更改不会利用SCTP 除多宿主之外的任何附加功能。

现在我已经尝试过了,结果相当糟糕。

我在安装了 libsctp1、libsctp-dev 和 lksctp-tools 软件包的 Ubuntu 9.04 上运行。我已经用 lksctp-tools 验证了SCTP它工作正常。

我采用了UNP 示例代码并按照上述~/unpv13e/tcpcliserv/tcpserv04.c~/unpv13e/select/tcpcli02.c程序进行了修改。

这是一个简单的回显服务器/客户端对。服务器显然在监听,但客户端退出时说连接被拒绝。由于 netstat 不支持SCTP我使用lsof -n | grep tcpserv的它向我展示了:

tcpserv04 6208      alice    3u     sock        0,4            33889 can't identify protocol

除了 tcpserv04 打开了某种套接字之外,这似乎并没有告诉我太多。

我已经在 perl 中重写并测试了原始 TCP 客户端,所以我将它切换到 sctp 并且能够连接,尽管在 stdin 上管道文件并没有完全工作(通过接收回声的方式挂了大约 2/3) .

似乎 UNP 暗示将 TCP 应用程序移植到 SCTP 以利用多宿主是微不足道的,但基于这种简单的尝试似乎并非如此。

在将 TCP 应用程序移植到一对一样式的 SCTP 以利用多宿主时,任何人都可以为我指出一个好的教程或就任何要注意的问题提供好的建议吗?

4

1 回答 1

2

tcpcli02尝试连接到端口 7,同时tcpserv04侦听端口 9877(默认值SERV_PORT)。将它们更改为匹配后,它对我有用。

对 SCTP 的支持通常非常糟糕。除非您控制要连接的主机之间的整个网络基础设施,否则我不会指望它能够可靠地工作。正如 UNP 中提到的,移植应用程序本身应该是相当轻松的。

于 2012-02-12T21:37:24.353 回答