Почему SCTP мало используется/известен

Недавно я проверил книгу "Сетевое программирование UNIX, том 1" Ричардсом Стивенсом, и я обнаружил, что существует третий транспортный уровень стандарт, кроме TCP и UDP: SCTP.

Сводка: SCTP - это протокатор транспортного уровня, который управляется сообщениями как UDP, но надежный, как TCP. Ниже приведено краткое описание от IBM DeveloperWorks.

Честно говоря, я никогда не слышал о SCTP раньше. Я не помню, чтобы читать об этом в каких-либо сетевых книгах или слышать об этом в классах, которые я взял. Чтение других вопросов stackoverflow, в котором упоминается, что SCTP показывает, что я не одинок с этим недостатком знаний.

Почему SCTP так неизвестен? Почему он не используется?

Ответ 1

Действительно, SCTP используется в основном в телекоммуникационной области. Традиционно коммутаторы связи используют SS7 (Сигнализационная система № 7) для соединения разных объектов в телекоммуникационной сети. Например, база данных подписчиков телекоммуникационного провайдера (HLR) с коммутатором (MSC), абонент также подключен (MSC).

Телекоммуникационная область движется к более высоким скоростям и более достижимой среде. Одним из таких изменений является замена протокола SS7 на более элегантный, быстрый и гибкий протокол на основе IP.

Телекоммуникационная область очень консервативна. Сеть SS7 используется здесь уже много десятилетий. Это очень надежная и закрытая сеть. Это означает, что обычный пользователь не имеет к нему доступа.

IP-сеть, напротив, является открытой и ненадежной, и телекоммуникации не будут конвертировать ее, если она не будет обрабатывать хотя бы нагрузку, которую обрабатывает SS7. Вот почему SCTP был разработан. Он пытается:

  • чтобы имитировать все преимущества сети SS7, накопленной за десятилетия.
  • для создания протокола, ориентированного на соединение, лучше, чем TCP в скорости, безопасности и избыточности.

В последних версиях Linux уже есть поддержка SCTP.

Ответ 2

В настоящее время мы развертываем SCTP в нескольких приложениях и сталкиваемся с серьезными проблемами с поддержкой SCTP в различных домашних маршрутизаторах. Они просто не обрабатывают SCTP правильно. Я считаю, что это прежде всего проблема производительности (спецификация протокола SCTP требует контрольных сумм для пересчета всех пакетов, а не только для заголовков).

Как и многие другие многообещающие протоколы, SCTP печально мертв в воде, пока D-link и Netgear не зафиксируют свои сломанные NAT-боксы.

Ответ 3

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.

Ответ 4

SCTP не очень известен и не используется/широко используется, потому что:

  • Широко распространенный: не широко интегрирован в стеки TCP/IP (в 2013 году: все еще отсутствует изначально в Mac OSX и Windows)
  • Библиотеки: несколько связок высокого уровня в удобных для использования языках (Отказ от ответственности: я поддерживаю pysctp, поддержка быстрого стека SCTP для Python)
  • NAT: не очень хорошо перекрестно NAT/вообще (менее 1% интернет-дома и маршрутизаторы предприятия используют NAT на SCTP).
  • Популярность: не использует общедоступное приложение.
  • Парадигма программирования: она немного изменилась: она по-прежнему является сокетом, но вы можете подключать многие хосты к множеству хостов (многопоточность), дейтаграмма упорядочена и надежна, erc...
  • Сложность: стек SCTP сложно реализовать (из-за выше)
  • Конкурс: многопутевый TCP подходит и должен решать многопотоковые потребности/возможности, поэтому люди воздерживаются от реализации SCTP, если это возможно, ожидая MTCP
  • Ниша: потребности Заполнения SCTP очень своеобразны (упорядоченные надежные датаграммы, многопотоковые) и не нужны большим количеством приложений
  • Безопасность: SCTP уклоняется от элементов управления безопасностью (некоторые брандмауэры, большинство IDS, все DLP, не отображаются в netstat, кроме CentOS/Redhat/Fedora...)
  • Аудит-способность: что-то вроде 3 компаний в мире регулярно проводят аудит безопасности SCTP (Отказ от ответственности: я работаю в одном из них)
  • Кривая обучения: не много инструментов для игры с SCTP (проверьте отличный withsctp, который прекрасно сочетается с netcat или использует socat)
  • Под капотом: используется в основном в телекоммуникационном секторе, и каждый раз, когда вы отправляете SMS, начинаете заниматься серфингом в сети на своем мобильном телефоне или совершать телефонные звонки, вы часто запускаете сообщения, которые передаются через SCTP (SIGTRAN/SS7 с GSM/UMTS, Diameter с LTE/IMS/RCS, S1AP/X2AP с LTE), поэтому вы действительно используете его много, но вы никогда не знаете об этом; -)

Ответ 5

p1. SCTP, отображаемый непосредственно через IPv4, требует поддержки в NAT-шлюзах, которые никогда не были широко развернуты в любом месте, и без него типичный шлюз NAT разрешает только одному частному хосту на один публичный адрес использовать SCTP за раз.

р2. SCTP, сопоставленный с UDP/IPv4, позволяет принимать более частные хосты на один общий адрес, но сопоставление UDP в шлюзах IPv4/NAT, как известно, сложно установить и сохранить в связи с тем, что UDP - это транспорт без установления соединения без какого-либо явного состояния для NAT для отслеживания.

p3. SCTP, отображаемый непосредственно через IPv6, требует... ну... IPv6. Вы пытались развернуть IPv6? Если да, пытались ли вы купить брандмауэр IPv6? Поддерживает ли он SCTP? Как насчет балансировки нагрузки? Ускоритель SSL?

р4. Наконец, большая часть Интернета в значительной степени ограничена тем, что может поместиться через TCP-порт 80 и порт 443, поэтому SCTP любого вкуса имеет тенденцию терять там. Следовательно, вы видите такие усилия, как рабочая группа MPTCP в IETF.

Ответ 6

Многие из нас скоро будут использовать SCTP, так как он использовался в каналах данных WebRTC для создания надежного уровня TCP-типа поверх UDP-SCTP через DTLS через UDP: https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13#section-6

Ответ 7

Чтение Страница SCTP Wikipedia Я бы сказал, что основная причина заключается в том, что SCTP - очень молодой протокол (предлагается в 2000 году), который в настоящее время не поддерживается основными ОС (Windows, OS X, Linux).

Если "очень молодой" кажется вам неприемлемым, подумайте о IPV6: "в декабре 2008 года, несмотря на то, что отмечал свой 10-летний юбилей как протокол протокола стандартов, IPv6 был только в зачаточном состоянии с точки зрения общего развертывания во всем мире".

Ответ 8

Это может быть не очень хорошо известно, но оно не используется. Совсем недавно появился draft, опубликованный в IETF об использовании SCTP в качестве протокола транспортного уровня для HTTP.

Ответ 9

SCTP широко используется в сети 4G LTE, где Diameter используется для AAA.

Ответ 10

Со ссылкой на все комментарии об отключении коммерческих маршрутизаторов или отсутствии поддержки SCTP, проблема заключается в том, что SCTP с NAT все еще находится в черновом формате с IETF. Таким образом, для их реализации нет спецификации RFC.

https://tools.ietf.org/html/draft-ietf-behave-sctpnat-09

Ответ 11

Sctp рождается слишком поздно, и для многих ситуаций TCP достаточно.

Кроме того, поскольку я знаю, что большая часть его использования находится в области телекоммуникаций.