SCTP
has native multi-homing support which if I understand it correctly will automatically reroute your packets over a secondary NIC if the primary interface goes down. I duplicated this functionality with TCP by writing a custom routing deamon to modify the routing tables if my primary NIC goes down. I would like to try using SCTP
instead.
In Steven's Unix Network Programming V1 3rd Edition on page 288 it says:
For this example, we use a one-to-many-style server. We make this choice for one important reason. The examples in Chapter 5 can be modified to run over
SCTP
with one minor change: modify thesocket
function call to specifyIPPROTO_SCTP
instead ofIPPROTO_TCP
as the third argument. Simply making this change, however, would not take advantage of any of the additional features provided bySCTP
except multi-homing.
Now I've tried this with fairly poor results.
I'm running on Ubuntu 9.04 with the libsctp1, libsctp-dev, and lksctp-tools packages installed. I've verified with lksctp-tools that SCTP
is working properly.
I took the UNP example code and modified as indicated above the ~/unpv13e/tcpcliserv/tcpserv04.c
and ~/unpv13e/select/tcpcli02.c
programs.
This is a simple echo server / client pair. The server runs apparently listening, but the client exits saying the connection was refused. Since netstat doesn't support SCTP
I used lsof -n | grep tcpserv
which showed me:
tcpserv04 6208 alice 3u sock 0,4 33889 can't identify protocol
This doesn't seem to tell me much other than tcpserv04 has some kind of socket open.
I had already rewrote and tested the original TCP client in perl, so I switched it to sctp and was able to connect although piping a file on stdin didn't completely work ( hung about 2/3's of the way through receiving the echo's back ).
It seems like UNP is implying that porting TCP applications to SCTP to take advantage of multi-homing is trivial, yet based this simple attempt that doesn't really seem to be the case.
Can anyone point me to a good tutorial or give good advice on any gotcha's to watch out for when porting TCP apps to one-to-one-style SCTP to take advantage of multi-homing?
Multihoming is the ability of an SCTP association to support multiple IP paths to its peer endpoint. The benefit of multihoming associations is that it makes the association more fault-tolerant against physical network failures and other issues on the interfaces.
SCTP is used for applications where monitoring and detection of loss of session is required. The SCTP path or session failure detection mechanism, for example, the heartbeat, monitors the connectivity of the session. Figure 1 illustrates the SCTP 4-way handshake and TCP 3-way handshake.
tcpcli02
tries to connect to port 7, while tcpserv04
listens on port 9877 (the default value for SERV_PORT
). After changing those to match, it works for me.
Support for SCTP generally is very bad. Unless you control the entire network infrastructure between the hosts you are trying to connect, I would not count on it to work reliably. Porting the applications itself should be fairly hassle-free, as mentioned in UNP.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With