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 以利用多宿主时,任何人都可以为我指出一个好的教程或就任何要注意的问题提供好的建议吗?