Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Официальный надзор [ править ]

Рабочая группа IETF Signaling Transport ( SIGTRAN ) определила протокол (номер 132 [1] ) в октябре 2000 года [2], а рабочая группа IETF Transport Area (TSVWG) поддерживает его. RFC 4960 определяет протокол. 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 включают:

  • Надежная передача как упорядоченных, так и неупорядоченных потоков данных.
  • Поддержка множественной адресации, при которой одна или обе конечные точки соединения могут состоять из более чем одного IP-адреса, обеспечивая прозрачное переключение при отказе между избыточными сетевыми путями.
  • Доставка фрагментов в независимых потоках устраняет ненужную блокировку заголовка строки , в отличие от доставки потока байтов TCP.
  • Явная частичная надежность.
  • Выбор и мониторинг пути для выбора основного пути передачи данных и проверки возможности соединения на пути передачи.
  • Механизмы проверки и подтверждения защищают от атак лавинной рассылки и предоставляют уведомление о дублированных или отсутствующих блоках данных.
  • Улучшенное обнаружение ошибок, подходящее для больших кадров Ethernet .

Разработчики SCTP изначально предназначались для передачи телефонии ( Система сигнализации 7 ) по Интернет-протоколу с целью дублирования некоторых атрибутов надежности сети сигнализации SS7 в IP. Эта работа IETF известна как SIGTRAN . Тем временем были предложены другие варианты использования, например протокол Diameter [3] и надежный пул серверов (RSerPool). [4]

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

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

  • TCP обеспечивает как надежную передачу данных, так и доставку данных в строгом порядке. Некоторым приложениям требуется надежная передача без поддержки последовательности, в то время как другие будут удовлетворены частичным упорядочением данных. В обоих этих случаях свойство блокировки заголовка строки TCP вызывает ненужную задержку.
  • Для приложений, обменивающихся отдельными записями или сообщениями, потоковая природа TCP требует добавления явных маркеров или другого кодирования для выделения отдельных записей.
  • Во избежание отправки большого количества небольших IP-пакетов там, где было бы достаточно одного большого пакета, реализация TCP может задерживать передачу данных, ожидая, возможно, дополнительные данные будут поставлены в очередь приложением ( алгоритм Нэгла ). Если и когда такая небольшая задержка нежелательна, приложение должно явно запросить передачу без задержки в каждом конкретном случае, используя функцию push (т. Е. Путем установки флага PSH в заголовке пакета TCP). SCTP, с другой стороны, позволяет настраивать передачу без задержки по умолчанию для ассоциации, устраняя любые нежелательные задержки, но за счет более высоких накладных расходов на передачу. [5]
  • Ограниченный объем [ расплывчатый ] сокетов TCP усложняет задачу обеспечения возможности высокодоступной передачи данных с использованием многосетевых хостов.
  • TCP относительно уязвим для атак типа «отказ в обслуживании», таких как атаки SYN .

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

Множественное наведение [ править ]

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

SCTP Multihoming

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

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

Асимметричное множественное наведение [ править ]

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

Local multi-homing - удаленное однократное возвращение [ править ]

В режимах «Локальная множественная адресация» и «Удаленная одиночная адресация», если удаленный первичный адрес недостижим, ассоциация SCTP не выполняется, даже если возможен альтернативный путь.

Асимметричное множественное начало отсчета: локальное множественное начало отсчета - удаленное одиночное возвращение

Local single-homing - удаленное множественное возвращение [ править ]

Асимметричное множественное начало отсчета: локальное одиночное начало отсчета - удаленное множественное возвращение

Структура пакета [ править ]

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

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

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

Безопасность [ править ]

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

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

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

Реализации [ править ]

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

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

  • AIX версии 5 и новее
  • NetBSD [8] начиная с версии 8.0 [9]
  • Cisco IOS 12
  • DragonFly BSD с версии 1.4, однако поддержка в версии 4.2 устарела [10]
  • FreeBSD версии 7 и выше содержит эталонную реализацию SCTP [11]
  • HP-UX , 11i v2 и выше [12]
  • Linux на базе ядра 2.4 и новее
  • QNX Neutrino Realtime OS, [13] 6.3.0–6.3.2, не рекомендуется с 6.4.0 [14]
  • Sun Solaris 10 и выше [15]
  • VxWorks версий 6.2.x - 6.4.x и 6.7 и новее
  • иллюзия

Сторонние драйверы:

  • Microsoft Windows :
    • Драйвер ядра SctpDrv - это порт из стека BSD SCTP для Windows [16]
  • MacOS :
    • Расширение сетевого ядра SCTP для Mac OS X [17]

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

  • Портативный стек пользовательского пространства SCTP [18]
  • Библиотека SCTP [19]
    • Порт Windows XP [20]
  • Oracle Java SE 7
  • Erlang / OTP

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

  • WebRTC

Туннелирование через UDP [ править ]

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

История RFC [ править ]

  • RFC  7829 SCTP-PF: алгоритм быстрого переключения при отказе для протокола передачи управления потоком
  • RFC  7765 TCP и протокол передачи управления потоком (SCTP) RTO Restart
  • RFC  7496 Дополнительные политики для расширения протокола передачи частично надежного управления потоком
  • RFC  7053 SACK-НЕМЕДЛЕННО Расширение для протокола передачи управления потоком (обновляет RFC 4960 )
  • RFC  6951 UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечным хостом
  • RFC  6525 Протокол передачи управления потоком (SCTP) Изменение конфигурации потока
  • RFC  6458 Расширения API сокетов для протокола передачи управления потоком (SCTP)
  • RFC  6096 Stream Control Transmission Protocol (SCTP) Регистрация флагов фрагментов (обновляет RFC 4960 )
  • RFC  5062 Обнаружены атаки безопасности на протокол передачи управления потоком (SCTP) и текущие меры противодействия
  • RFC  5061 Протокол передачи управления потоком (SCTP) Динамическая реконфигурация адреса
  • RFC  5043 Stream Control Transmission Protocol (SCTP) Адаптация прямого размещения данных (DDP)
  • RFC  4960 Протокол передачи управления потоком
  • RFC  4895 Аутентифицированные блоки для протокола передачи управления потоком (SCTP)
  • RFC  4820 Padding Chunk и параметр для протокола передачи управления потоком (SCTP)
  • RFC  4460 Ошибки и проблемы спецификации протокола передачи управления потоком (SCTP)
  • RFC  3873 Протокол управления потоками (SCTP) База управляющей информации (MIB)
  • RFC  3758 Stream Control Transmission Protocol (SCTP) Расширение частичной надежности
  • RFC  3554 об использовании протокола передачи управления потоком (SCTP) с IPsec
  • RFC  3436 Безопасность транспортного уровня по протоколу передачи управления потоком
  • RFC  3309 Stream Control Transmission Protocol (SCTP) Изменение контрольной суммы (устарело RFC 4960 )
  • RFC  3286 - Введение в протокол передачи управления потоком
  • RFC  3257 Заявление о применимости протокола передачи управления потоком
  •  Протокол передачи управления потоком RFC 2960 (обновлен RFC 3309 и устарел RFC 4960 )

См. Также [ править ]

  • Транспортный уровень § Сравнение протоколов транспортного уровня
  • Протокол инициации сеанса (SIP) - который может инициировать несколько потоков через SCTP, TCP или UDP.
  • Многопутевый TCP - который позволяет TCP-соединению использовать несколько путей для максимального использования ресурсов и увеличения избыточности.
  • Happy Eyeballs - изначально разработан для эффективного выбора IPv4 или IPv6 для соединения; [23] также может быть адаптирован для выбора из различных транспортных протоколов, например TCP и SCTP [24]

Примечания [ править ]

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

Ссылки [ править ]

  1. ^ "Номера протоколов" . iana.org . IANA . Проверено 9 сентября 2014 .
  2. ^ Протокол передачи управления потоком . IETF . Октябрь 2000 г. doi : 10.17487 / RFC2960 . RFC 2960 .
  3. ^ «Транспорт» . Базовый протокол диаметра . IETF . сек. 2.1. DOI : 10,17487 / RFC3588 . RFC 3588 . Проверено 18 мая 2012 .
  4. ^ «Пример сценария с использованием служб сеансов RSerPool» . Обзор протоколов надежного пула серверов . IETF . п. 10. сек. 4.2. DOI : 10,17487 / RFC5351 . RFC 5351 .
  5. ^ RFC 4960, раздел 1.5.5
  6. ^ Хогг, Скотт. "А как насчет протокола передачи управления потоком (SCTP)?" . Сетевой мир . Проверено 4 октября 2017 .
  7. ^ «Эталонная реализация для SCTP - RFC4960» . Проверено 14 октября 2013 . Это эталонная реализация для SCTP. Он портативен и работает на FreeBSD / MAC-OS / Windows и в пользовательском пространстве (включая Linux).
  8. ^ "sys / netinet / sctp.h" . Перекрестная ссылка BSD . NetBSD . 2017-06-27 . Проверено 21 января 2019 .
  9. ^ "man4 / sctp.4" . Перекрестная ссылка BSD . NetBSD . 2018-07-31 . Проверено 21 января 2019 .
  10. ^ «DragonFly удаляет SCTP» . Lists.dragonflybsd.org . Проверено 28 апреля 2016 .
  11. ^ «О технологических достижениях FreeBSD» . Проект FreeBSD. 2008-03-09 . Проверено 13 сентября 2008 . SCTP: FreeBSD 7.0 - это эталонная реализация нового протокола IETF Stream Control Transmission Protocol (SCTP), предназначенного для поддержки VoIP, телекоммуникаций и других приложений с высокой надежностью и переменным качеством передачи с помощью таких функций, как многопутевая доставка, переключение при отказе. , и многопоточность.
  12. ^ "Протокол передачи управления потоком (SCTP)" . Компания Hewlett-Packard Development. Архивировано из оригинала на 2013-01-03.
  13. ^ "Сеть TCP / IP" . Поддержка разработчиков QNX . Программные системы QNX . Проверено 13 сентября 2008 .«Что нового в этом справочнике» . Справочник по библиотеке QNX . Программные системы QNX . Проверено 18 декабря 2012 .
  14. ^ "Платформа разработки программного обеспечения QNX 6.4.0" .
  15. ^ «Сеть операционной системы Solaris 10 - экстремальная сетевая производительность» . Sun Microsystems . Проверено 13 сентября 2008 .
  16. ^ «SctpDrv: драйвер SCTP для Microsoft Windows» . Архивировано из оригинала на 2011-01-08 . Проверено 4 февраля 2011 .
  17. ^ «Расширение сетевого ядра SCTP для Mac OS X» .
  18. ^ https://github.com/sctplab/usrsctp
  19. ^ "Страница загрузки SCTP" . 2006-05-29 . Проверено 4 февраля 2011 .
  20. ^ "Установщик библиотеки Windows SCTP" . Проверено 4 февраля 2011 .
  21. ^ Tuexen, Майкл; Стюарт, Рэндалл Р. (май 2013 г.). Инкапсуляция UDP пакетов протокола передачи управления потоком (SCTP) для связи между конечным хостом . IETF . DOI : 10,17487 / RFC6951 . RFC 6951 .
  22. ^ Бикхарт, Райан; Пол Д. Амер; Рэндалл Р. Стюарт (2007). «Прозрачный слой оболочки трансляции TCP-SCTP» (PDF) . Проверено 13 сентября 2008 .
  23. ^ D. Крыло; А. Юрченко (апрель 2012 г.). «Счастливые глаза: успех с хостами с двойным стеком» . tools.ietf.org . IETF .
  24. ^ Khademi, Наим; Брунстрем, Анна; Хуртиг, Пер; Гриннемо, Карл-Йохан (21 июля 2016 г.). «Счастливые глаза при выборе транспорта» . tools.ietf.org . IETF . Проверено 9 января 2017 .

Внешние ссылки [ править ]

  • sigtran (в архиве)
  • Ietf.org
  • Ietf.org
  • Openss7.org
  • Рабочая группа SCTP для Linux
  • Страница SCTP Майкла Тюксена
  • Страница SCTP Лоде Коэна
  • Страница проекта SCTP Томаса Драйбхольца