SCTP具有 native 多宿主支持,如果我理解正确,则如果主接口(interface)出现故障,它将自动通过辅助NIC重新路由您的数据包。如果主NIC出现故障,我通过编写自定义路由守护程序来修改路由表,从而使用TCP复制了此功能。我想尝试使用SCTP代替。

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



现在,我已经尝试了此方法,但效果却很差。

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

我拿了UNP example code并按照~/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以利用多宿主的优势时,谁能为我指出一个好的教程或提供任何建议,以提防任何陷阱?

最佳答案

tcpcli02尝试连接到端口7,而tcpserv04监听端口9877(SERV_PORT的默认值)。更改它们以使其匹配后,它对我有用。

通常,对SCTP的支持非常差。除非您控制要连接的主机之间的整个网络基础结构,否则我不能指望它能够可靠地工作。
如UNP所述,移植应用程序本身应该没有任何麻烦。

关于sockets - 带有多宿主的SCTP作为TCP的替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2243411/

10-13 09:18