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

时间:2010-02-11 09:22:21

标签: sockets tcp network-programming network-protocols sctp

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

在第288页的史蒂文的Unix Network Programming V1 3rd Edition中,它说:

  

对于这个例子,我们使用a   一对多风格的服务器。我们做   这个选择有一个重要原因。   第5章中的例子可以是   修改为在SCTP上运行一个   小改动:修改socket   函数调用指定   IPPROTO_SCTP代替   IPPROTO_TCP作为第三个参数。   但是,只需进行此更改即可   不会利用任何一个   SCTP提供的其他功能   除了多宿主。

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

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

我接受了UNP example code并按照上面~/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

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

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

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

当有人将TCP应用程序移植到一对一风格的SCTP以利用多宿主时,是否有人可以指点我一个好的教程或给出任何问题的建议?

1 个答案:

答案 0 :(得分:2)

tcpcli02尝试连接到端口7,而tcpserv04侦听端口9877(SERV_PORT的默认值)。在改变那些匹配之后,它对我有用。

支持SCTP通常非常糟糕。除非您在尝试连接的主机之间控制整个网络基础架构,否则我不会指望它可靠地工作。 如UNP中所述,移植应用程序本身应该相当轻松。