具有多宿主功能的SCTP替代TCP

Rob*_*nes 8 sockets network-programming tcp network-protocols sctp

SCTP具有本机多宿主支持,如果我理解正确,将在主接口关闭时通过辅助NIC自动重新路由您的数据包.我通过编写自定义路由守护程序来复制此功能,以便在主NIC发生故障时修改路由表.我想尝试使用SCTP.

在Steven的Unix网络编程V1第3版第288页中,它说:

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

现在我尝试了相当差的结果.

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

我拿了UNP示例代码并修改了如上所示~/unpv13e/tcpcliserv/tcpserv04.c~/unpv13e/select/tcpcli02.c程序.

这是一个简单的echo服务器/客户端对.服务器运行显然正在侦听,但客户端退出说连接被拒绝.由于netstat不支持SCTP我使用的lsof -n | grep tcpserv显示我:

tcpserv04 6208      alice    3u     sock        0,4            33889 can't identify protocol
Run Code Online (Sandbox Code Playgroud)

除了tcpserv04有某种套接字打开之外,这似乎并没有告诉我什么.

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

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

任何人都可以指点我一个好的教程,或者在将TCP应用程序移植到一对一风格的SCTP以利用多宿主的时候注意任何问题吗?

fnl*_*fnl 2

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

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