繁体   English   中英

具有多宿主的SCTP作为TCP的替代品

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM