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/