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以利用多宿主时,是否有人可以指点我一个好的教程或给出任何问题的建议?
答案 0 :(得分:2)
tcpcli02
尝试连接到端口7,而tcpserv04
侦听端口9877(SERV_PORT
的默认值)。在改变那些匹配之后,它对我有用。
支持SCTP通常非常糟糕。除非您在尝试连接的主机之间控制整个网络基础架构,否则我不会指望它可靠地工作。 如UNP中所述,移植应用程序本身应该相当轻松。