[英]SCTP with Multihoming as a Drop In Replacement for TCP
SCTP
具有本机多宿主支持,如果我理解正确,则如果主接口出现故障,它将自动通过辅助NIC重新路由您的数据包。 我编写了一个自定义路由守护程序,以在主NIC发生故障时修改路由表,从而使用TCP复制了此功能。 我想尝试改用SCTP
。
在第288页的Steven的Unix网络编程V1第三版中 ,它说:
在此示例中,我们使用一对多样式的服务器。 我们做出这一选择的一个重要原因。 可以对第5章中的示例进行修改,使其在
SCTP
上运行,但有一点改动:修改socket
函数调用,以指定IPPROTO_SCTP
而不是IPPROTO_TCP
作为第三个参数。 但是,仅进行此更改将不会利用SCTP
提供的除多SCTP
之外的任何其他功能。
现在,我尝试了这种方法,但效果却很差。
我在安装了libsctp1,libsctp-dev和lksctp-tools软件包的Ubuntu 9.04上运行。 我已经使用lksctp-tools验证了SCTP
是否可以正常工作。
我以UNP示例代码为例,并按照~/unpv13e/tcpcliserv/tcpserv04.c
和~/unpv13e/select/tcpcli02.c
程序的指示进行了修改。
这是一个简单的回显服务器/客户端对。 服务器显然正在侦听,但是客户端退出说连接被拒绝。 由于netstat不支持SCTP
我使用了lsof -n | grep tcpserv
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所述,移植应用程序本身应该没有任何麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.