stringtranslate.com

Протокол передачи управления потоком

Протокол передачи потокового управления ( SCTP ) — это протокол компьютерной сетевой связи на транспортном уровне набора протоколов Интернета . Первоначально предназначенный для передачи сообщений Signaling System 7 (SS7) в телекоммуникациях, протокол предоставляет ориентированную на сообщения функцию протокола пользовательских датаграмм (UDP), обеспечивая при этом надежную последовательную передачу сообщений с контролем перегрузки , как протокол управления передачей (TCP). В отличие от UDP и TCP, протокол поддерживает множественную адресацию и избыточные пути для повышения устойчивости и надежности.

SCTP стандартизирован Инженерной группой Интернета (IETF) в RFC  9260. Эталонная реализация SCTP была выпущена как часть FreeBSD версии 7 и с тех пор широко портирована на другие платформы.

Формальный надзор

Рабочая группа IETF Signaling Transport ( SIGTRAN ) определила протокол (номер 132 [1] ) в октябре 2000 года, [2] а рабочая группа IETF Transport Area (TSVWG) поддерживает его. RFC  9260 определяет протокол. RFC 3286  содержит введение.

Многопоточность на основе сообщений

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

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

Термин «многопоточность» относится к способности SCTP передавать несколько независимых потоков фрагментов параллельно, например, передавать изображения веб-страниц одновременно с текстом веб-страницы. По сути, это подразумевает объединение нескольких соединений в одну ассоциацию SCTP, работающую с сообщениями (или фрагментами), а не с байтами.

TCP сохраняет порядок байтов в потоке, включая порядковый номер байта с каждым сегментом . SCTP, с другой стороны, назначает порядковый номер или идентификатор сообщения [примечание 1] каждому сообщению , отправленному в потоке. Это позволяет независимо упорядочивать сообщения в разных потоках. Однако упорядочивание сообщений является необязательным в SCTP; принимающее приложение может выбрать обработку сообщений в порядке получения, а не в порядке отправки.

Функции

Возможности SCTP включают в себя:

Первоначально проектировщики SCTP предназначали его для передачи телефонии (т. е. Signaling System 7) по протоколу Internet с целью дублирования некоторых атрибутов надежности сигнальной сети SS7 в IP. Эта работа IETF известна как SIGTRAN . В то же время были предложены другие варианты использования, например, протокол Diameter [3] и Reliable Server Pooling (RSerPool). [4]

Мотивация и принятие

TCP предоставил основные средства для надежной передачи данных через Интернет. Однако TCP наложил ограничения на несколько приложений. Из RFC  4960:

Внедрение замедлилось из-за отсутствия осведомленности, отсутствия реализаций (особенно в Microsoft Windows), отсутствия поддержки приложений и отсутствия сетевой поддержки. [6]

SCTP был принят в сфере мобильной телефонии в качестве транспортного протокола для нескольких основных сетевых интерфейсов . [7]

Многоадресность

SCTP обеспечивает резервные пути для повышения надежности.

Каждая конечная точка SCTP должна проверять достижимость основного и резервного адресов удаленной конечной точки с помощью heartbeat . Каждая конечная точка SCTP должна подтверждать heartbeat, которые она получает от удаленной конечной точки.

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

При асимметричной множественной адресации одна из двух конечных точек не поддерживает множественную адресацию.

При локальном множественном подключении и удаленном одиночном подключении, если удаленный первичный адрес недоступен, ассоциация SCTP завершается неудачей, даже если возможен альтернативный путь.

Структура пакета

Пакет SCTP состоит из двух основных разделов:

  1. Общий заголовок , который занимает первые 12 байт и выделен синим цветом.
  2. Фрагменты данных , которые занимают оставшуюся часть пакета. Первый фрагмент выделен зеленым цветом, а последний из N фрагментов (Фрагмент N) выделен красным цветом.

Каждый фрагмент начинается с однобайтового идентификатора типа, с 15 типами фрагментов, определенными RFC  9260, и по крайней мере еще 5, определенными дополнительными RFC. [примечание 2] Восемь битов флага, двухбайтовое поле длины и данные составляют остаток фрагмента. Если фрагмент не образует кратное 4 байтам (т. е. длина не кратна 4), то он дополняется нулями, которые не включаются в длину фрагмента. Двухбайтовое поле длины ограничивает каждый фрагмент длиной 65 535 байт (включая поля типа, флагов и длины).

Безопасность

Хотя шифрование не входило в первоначальный дизайн SCTP, SCTP был разработан с функциями для повышения безопасности, такими как 4-стороннее рукопожатие (по сравнению с 3-сторонним рукопожатием TCP ) для защиты от атак SYN-флуда и большие «cookie» для проверки ассоциации и подлинности.

Надежность также была ключевой частью дизайна безопасности SCTP. Многоадресность позволяет ассоциации оставаться открытой, даже если некоторые маршруты и интерфейсы не работают. Это имеет особое значение для SIGTRAN , поскольку он передает SS7 по IP-сети с использованием SCTP и требует высокой устойчивости во время сбоев связи для поддержания телекоммуникационного обслуживания даже при устойчивых сетевых аномалиях.

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

Реализации

Эталонная реализация SCTP работает на FreeBSD, Mac OS X, Microsoft Windows и Linux. [8]

Следующие операционные системы реализуют SCTP:

Драйверы сторонних производителей:

Библиотека пользовательского пространства :

Следующие приложения реализуют SCTP:

Туннелирование через UDP

При отсутствии собственной поддержки SCTP в операционных системах можно туннелировать SCTP через UDP [22] , а также сопоставлять вызовы TCP API с вызовами SCTP, чтобы существующие приложения могли использовать SCTP без изменений. [23]

RFC

Смотрите также

Примечания

  1. ^ Блок данных DATA использует порядковый номер для упорядоченных сообщений, блок данных I-DATA , который решает некоторые проблемы с исходным блоком данных, использует идентификатор сообщения для всех сообщений.
  2. ^ Более подробную информацию см. в структуре пакета SCTP .

Ссылки

  1. ^ "Протокольные номера". iana.org . IANA . Получено 2014-09-09 .
  2. ^ Протокол передачи управления потоком. IETF . Октябрь 2000 г. doi : 10.17487/RFC2960 . RFC 2960.
  3. ^ "Транспорт". Протокол Diameter Base. IETF . раздел 2.1. doi : 10.17487/RFC3588 . RFC 3588. Получено 18.05.2012 .
  4. ^ "Пример сценария с использованием служб сеансов RSerPool". Обзор надежных протоколов пула серверов. IETF . стр. 10. раздел 4.2. doi : 10.17487/RFC5351 . RFC 5351.
  5. ^ RFC 9260, раздел 1.5.5
  6. ^ Хогг, Скотт. «Что насчет протокола передачи управления потоком (SCTP)?». Network World . Архивировано из оригинала 30 августа 2014 г. Получено 2017-10-04 .
  7. ^ Олссон, Магнус; Маллиган, Кэтрин; Султана, Шабнам; Роммер, Стефан; Фрид, Ларс (2013). EPC и пакетные сети 4G: движущая сила революции мобильного широкополосного доступа (2-е изд.). Амстердам-Бостон: Elsevier/AP, Academic Press является отпечатком Elsevier. стр. 491. ISBN 978-0-12-394595-2.
  8. ^ "Эталонная реализация для SCTP - RFC4960". GitHub . Получено 2013-10-14 . Это эталонная реализация для SCTP. Она переносима и работает на FreeBSD/MAC-OS/Windows и в пространстве пользователя (включая Linux).
  9. ^ "sys/netinet/sctp.h". Перекрестная ссылка BSD . NetBSD . 2017-06-27 . Получено 2019-01-21 .
  10. ^ "man4/sctp.4". BSD Cross Reference . NetBSD . 2018-07-31 . Получено 2019-01-21 .
  11. ^ "DragonFly удаляет SCTP". Lists.dragonflybsd.org . Получено 28.04.2016 .
  12. ^ "О технических достижениях FreeBSD". Проект FreeBSD. 09.03.2008 . Получено 13.09.2008 . SCTP: FreeBSD 7.0 — это эталонная реализация нового протокола IETF Stream Control Transmission Protocol (SCTP), предназначенного для поддержки VoIP, телекоммуникаций и других приложений с высокой надежностью и переменным качеством передачи данных за счет таких функций, как многопутевая доставка, отказоустойчивость и многопоточность.
  13. ^ "Stream Control Transmission Protocol (SCTP)". Hewlett-Packard Development Company. Архивировано из оригинала 2013-01-03.
  14. ^ "TCP/IP Networking". Поддержка разработчиков QNX . QNX Software Systems . Получено 2008-09-13 ."Что нового в этом справочнике". Справочник библиотеки QNX . QNX Software Systems . Получено 18.12.2012 .
  15. ^ «Платформа разработки программного обеспечения QNX 6.4.0».
  16. ^ "Solaris 10 Operating System Networking — Extreme Network Performance". Sun Microsystems . Получено 13 сентября 2008 г.
  17. ^ "SctpDrv: драйвер SCTP для Microsoft Windows". Архивировано из оригинала 2017-10-08 . Получено 2022-01-04 .
  18. ^ "SCTP Network Kernel Extension for Mac OS X". GitHub . 23 сентября 2021 г.
  19. ^ "sctplab/usrsctp". Github . Получено 21 сентября 2021 г. .
  20. ^ "Страница загрузки SCTP". 2006-05-29 . Получено 2011-02-04 .
  21. ^ "Установщик библиотеки Windows SCTP" . Получено 2011-02-04 .
  22. ^ Tuexen, Michael; Stewart, Randall R. (май 2013 г.). UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечными хостами. IETF . doi : 10.17487/RFC6951 . RFC 6951.
  23. ^ Бикхарт, Райан; Пол Д. Амер; Рэндалл Р. Стюарт (2007). "Прозрачный слой трансляции TCP-SCTP" (PDF) . Получено 13 сентября 2008 г.
  24. ^ Д. Винг; А. Юрченко (апрель 2012 г.). «Счастливые глазки: успех с хостами с двойным стеком». tools.ietf.org . IETF .
  25. ^ Хадеми, Наим; Брунстром, Анна; Хуртиг, Пер; Гриннемо, Карл-Йохан (21 июля 2016 г.). «Счастливые глаза для выбора транспорта». tools.ietf.org . IETF . Получено 09.01.2017 .

Внешние ссылки