SCTP
具有本机多宿主支持,如果我理解正确的话,如果主接口出现故障,它将自动通过辅助 NIC 重新路由您的数据包。我通过编写一个自定义路由守护程序来使用 TCP 复制此功能,以便在我的主 NIC 出现故障时修改路由表。我想尝试使用SCTP
反而。
在史蒂文的Unix网络编程V1第3版 http://www.unpbook.com/第 288 页上写道:
对于这个例子,我们使用
一对多风格的服务器。我们做
这一选择有一个重要原因。
第 5 章中的例子可以是
修改为跑过SCTP
与一个
小改动:修改socket
函数调用来指定IPPROTO_SCTP
代替IPPROTO_TCP
作为第三个参数。
然而,简单地进行此更改,
不会利用任何
提供的附加功能SCTP
除了多归属。
现在我已经尝试过,但结果相当糟糕。
我在 Ubuntu 9.04 上运行,安装了 libsctp1、libsctp-dev 和 lksctp-tools 软件包。我已经用 lksctp-tools 验证了SCTP
工作正常。
我拿了UNP 示例代码 http://www.unpbook.com/src.html并按上述修改~/unpv13e/tcpcliserv/tcpserv04.c
and ~/unpv13e/select/tcpcli02.c
程式。
这是一个简单的回显服务器/客户端对。服务器运行时表面上正在监听,但客户端退出时表示连接被拒绝。由于netstat不支持SCTP
I used 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 以利用多宿主时需要注意的问题提供好的建议吗?