SCTP требует больше дизайна в приложении, чтобы наилучшим образом использовать его. Есть больше опций, чем TCP, Sockets-like API появился позже, и он молод. Однако я думаю, что большинство людей, которым требуется время, чтобы понять это (и кто знает недостатки TCP), оценивают это - это хорошо разработанный протокол, основанный на наших 30-летних знаниях TCP и UDP.
Один из аспектов, требующих некоторой мысли, - это потоки. Потоки предоставляют (обычно, я думаю, вы можете отключить) гарантию заказа внутри них (как TCP-соединение), но может быть несколько потоков на одно SCTP-соединение. Если данные вашего приложения могут быть отправлены по нескольким потокам, вы избегаете блокировки заголовка строки, где приемник голодает из-за одного потерянного пакета. Эффективно разные разговоры могут быть связаны с одним и тем же соединением, не влияя друг на друга.
Другим полезным дополнением является поддержка многоточечной поддержки - одно соединение может быть через несколько интерфейсов на обоих концах, и оно справляется с отказами. Вы можете эмулировать это в TCP, но на уровне приложения.
Правильное звено связи, которое является первым приложением, использующим TCP для непереходных соединений, реализуется бесплатно.
Мое личное резюме SCTP заключается в том, что он не делает ничего, что вы не могли бы сделать другим способом (в TCP или UDP) с существенной поддержкой приложений. То, что он предоставляет, - это способность не выполнять этот код (плохо) самостоятельно.
FYI, SCTP имеет мандат, поддерживаемый для Diameter (cf RADIUS next gen). см. RFC 3588
Diameter clients MUST support either TCP or SCTP, while agents and
servers MUST support both. Future versions of this specification MAY
mandate that clients support SCTP.
+1 никогда не слышал об этом - спасибо. –
Любой, кто хочет сравнить SCTP с ZeroMQ (кроме того, что один из них является протоколом, другой - библиотекой - рассматривает их как инструмент для решения проблем). –
Мне просто интересно: что не так/отлично на 3/1/2013? Почему так много голосов в этот день? – dmeister