- increased overhead compared to TCP
Ok lets see. SCTP takes on average 4 more bytes per data packet then TCP. However, if the TCP implementation enables timestamps then that is not true and TCP takes more overhead by about 4 bytes...
Hm... timestamp option takes 12 bytes, what gives?
Unless you are discussing another type of overhead...
Apart from the extra bytes (which isn't the main issue) there are the CRC32 checksum, which is considerably more expensive to compute than the TCP/UDP/IP checksum and the fact that SCTP has much more complexity. I would be surprised if the "fast path" for SCTP wouldn't turn out to be more expensive than that of TCP, especially without disabling all the features that make SCTP more interesting than TCP in the first place. And of course those heartbeats I love to hate. (Which don't provide any benefits when there are only two paths anyway.)
- requires significant changes from applications
Ok let see.. for Mozilla we converted two lines of code
Ok, we can discuss whether the changes are significant but the fact that changes are required at all is the main problem.
sd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); became --------------> sd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
and
setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, &on_off, sizeof(on_off));
became ---------------> setsockopt(sd, IPPROTO_SCTP, SCTP_NODELAY, &on_off, sizeof(on_off));
So is this enough to gain all multihoming benefits? Even if all other magic is hidden inside the protocol, the application must at least try all possible destination addresses. (But this is true for several other multi6 proposals as well.)
Now to take advantage of the stream feature you would need to do more.. but for pure multi-homing one or two lines of change does not seem that big of deal to me ...
Doing WWW-style HTTP (lots of concurrent sessions) with SCTP would be nonsense, this is where the feature where multiple streams are multiplexed over a single session would be extremely useful.
- no backward compatibility of any kind
I am not sure what you mean by backward compatable? You definetly
can't have TCP and SCTP talk.. they are after all different protocols...
But if an application needs the redundancy move to it.. its there today
with about 2 lines of coding change...
But then you'll have to run services on both TCP and SCTP pretty much forever. Not a good thing.
- source address selection problem isn't addressed fully, if at all
I don't think I understand this issue either..
Host has addresses a and b from ISPs A and B. Host sends a packet to address x which is routed over ISP A. However, the host selects source address b which is filtered by A, so no connectivity. For extra credit: solve same when this happens in the middle of a session, and in cases where connectivity consists of two one way paths. (a -> x and y -> b work, but not x -> a or b -> y)
We have fully addressed source address selection in the KAME implementation.
In what way?