Протокол передачи управления потоком
Стек протоколов | |
Аббревиатура | SCTP |
---|---|
Введение | 2000 |
Уровень OSI | Транспортный уровень (4) |
RFC(ы) | RFC 9260 |
Набор интернет-протоколов |
---|
Прикладной уровень |
Транспортный уровень |
Интернет-слой |
Слой связи |
Протокол передачи управления потоком ( SCTP ) — это компьютерной сети протокол связи на транспортном уровне Интернета набора протоколов . Первоначально предназначенный для транспортировки сообщений Системы сигнализации 7 (SS7) в телекоммуникациях, протокол обеспечивает ориентированную на сообщения функцию Протокола пользовательских дейтаграмм (UDP), обеспечивая при этом надежную, последовательную транспортировку сообщений с контролем перегрузки , например, Протокол управления передачей ( ПТС). В отличие от UDP и TCP, протокол поддерживает множественную адресацию и резервные пути для повышения отказоустойчивости и надежности.
SCTP стандартизирован Инженерной группой Интернета (IETF) в РФК 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 включают в себя:
- Надежная передача как упорядоченных, так и неупорядоченных потоков данных.
- Поддержка множественной адресации, при которой одна или обе конечные точки соединения могут состоять из более чем одного 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 получил распространение в сфере мобильной телефонии в качестве транспортного протокола для нескольких основных сетевых интерфейсов . [7]
Многоадресность [ править ]
SCTP предоставляет резервные пути для повышения надежности.
Каждая конечная точка SCTP должна проверять доступность основного и резервного адресов удаленной конечной точки с помощью контрольного сигнала . Каждая конечная точка SCTP должна подтверждать контрольные сигналы, которые она получает от удаленной конечной точки.
Когда SCTP отправляет сообщение на удаленный адрес, исходный интерфейс будет определяться только таблицей маршрутизации хоста (а не SCTP).
При асимметричной множественной адресации одна из двух конечных точек не поддерживает множественную адресацию.
При локальной множественной адресации и удаленной одинарной адресации, если удаленный основной адрес недоступен, ассоциация SCTP завершается неудачей, даже если альтернативный путь возможен.
Структура пакета [ править ]
Пакет SCTP состоит из двух основных разделов:
- Общий заголовок , занимающий первые 12 байт и выделенный синим цветом.
- Фрагменты данных , занимающие оставшуюся часть пакета. Первый фрагмент выделен зеленым цветом, а последний из N фрагментов (Чанк N) выделен красным.
Биты | 0–7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | Исходный порт | Порт назначения | ||||||||||||||||||||||||||||||
32 | Тег подтверждения | |||||||||||||||||||||||||||||||
64 | Контрольная сумма | |||||||||||||||||||||||||||||||
96 | Чанк 1 типа | Флаги чанка 1 | Длина куска 1 | |||||||||||||||||||||||||||||
128 | Данные блока 1 | |||||||||||||||||||||||||||||||
… | … | |||||||||||||||||||||||||||||||
… | блока N Тип | блоков N Флаги | Длина 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:
- AIX версии 5 и новее
- NetBSD [9] с 8.0 [10]
- Cisco IOS 12 и выше
- DragonFly BSD начиная с версии 1.4, однако поддержка в версии 4.2 прекращена. [11]
- FreeBSD версии 7 и выше содержит эталонную реализацию SCTP. [12]
- HP-UX , 11i v2 и выше [13]
- иллюзии
- Ядро Linux 2.4 и выше
- QNX Neutrino реального времени ОС [14] версии с 6.3.0 по 6.3.2, устарели с версии 6.4.0 [15]
- Tru64 с дополнительным пакетом Compaq SCTP
- Сан Солярис 10 и выше [16]
- VxWorks версий от 6.2.x до 6.4.x, 6.7 и новее.
Сторонние драйверы:
- Microsoft Windows :
- Драйвер ядра SctpDrv — это порт стека BSD SCTP для Windows (заброшен после 2012 года). [17]
- МакОС :
- Расширение сетевого ядра SCTP для Mac OS X [18]
пользовательского пространства Библиотека :
- Портативный стек пользовательского пространства SCTP [19]
- Библиотека SCTP [20]
- Windows XP Порт [21]
- Oracle Java SE 7
- Эрланг/ОТП
Следующие приложения реализуют SCTP:
Туннелирование через UDP [ править ]
При отсутствии встроенной поддержки SCTP в операционных системах можно туннелировать SCTP через UDP. [22] а также сопоставлять вызовы TCP API с вызовами SCTP, чтобы существующие приложения могли использовать SCTP без изменений. [23]
RFC [ править ]
- RFC 9260 Протокол передачи управления потоком
- RFC 8540 : ошибки и проблемы в RFC 4960 (устарело из-за RFC 9260) Протокол передачи управления потоком
- RFC 7829 SCTP-PF: алгоритм быстрого переключения при сбое для протокола передачи управления потоком
- RFC 7765 TCP и протокол передачи управления потоком (SCTP) Перезапуск RTO
- RFC 7496 Дополнительные политики для расширения протокола передачи с частично надежным управлением потоком
- RFC 7053 Расширение SACK-IMMEDIATELY для протокола передачи управления потоком (устарело из-за RFC 9260)
- RFC 6951 UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечными хостами
- RFC 6525 Протокол передачи управления потоком (SCTP) Реконфигурация потока
- Расширения API сокетов RFC 6458 для протокола передачи управления потоком (SCTP)
- RFC 6096 Протокол передачи управления потоком (SCTP) Регистрация флагов фрагментов (устарело из-за RFC 9260)
- Обнаружены атаки безопасности RFC 5062 на протокол передачи управления потоком (SCTP) и текущие меры противодействия
- RFC 5061 Протокол передачи управления потоком (SCTP) Динамическая реконфигурация адреса
- RFC 5043 (SCTP) с прямым размещением данных (DDP) Адаптация протокола передачи управления потоком
- RFC 4960 (устарел благодаря RFC 9260) Протокол передачи управления потоком
- Аутентифицированные фрагменты RFC 4895 для протокола передачи управления потоком (SCTP)
- Часть и параметр заполнения RFC 4820 для протокола передачи управления потоком (SCTP)
- RFC 4460 (устарело из-за RFC 9260) Ошибки и проблемы спецификации протокола передачи управления потоком (SCTP)
- RFC 3873 Протокол передачи управления потоком (SCTP) База управляющей информации (MIB)
- RFC 3758 Протокол передачи управления потоком (SCTP) Расширение частичной надежности
- RFC 3554 об использовании протокола передачи управления потоком (SCTP) с IPsec
- RFC 3436 Безопасность транспортного уровня через протокол передачи управления потоком
- RFC 3309 (устарело из-за RFC 4960) Изменение контрольной суммы протокола передачи управления потоком (SCTP)
- RFC 3286. Введение в протокол передачи управления потоком.
- RFC 3257 Заявление о применимости протокола передачи управления потоком
- Протокол передачи управления потоком RFC 2960 (обновлен RFC 3309 и устаревший RFC 4960)
См. также [ править ]
- Транспортный уровень § Сравнение протоколов транспортного уровня
- Протокол инициации сеанса (SIP) - который может инициировать несколько потоков через SCTP, TCP или UDP.
- Multipath TCP – позволяет TCP-соединению использовать несколько путей для максимального использования ресурсов и повышения избыточности.
- Happy Eyeballs – изначально разработан для эффективного выбора IPv4 или IPv6 для подключения; [24] также может быть адаптирован для выбора из различных транспортных протоколов, таких как TCP и SCTP. [25]
Примечания [ править ]
- ^ Чанк DATA использует порядковый номер для упорядоченных сообщений, чанк I-DATA , который решает некоторые проблемы с исходным чаном DATA, использует идентификатор сообщения для всех сообщений.
- ^ см . в структуре пакета SCTP . Более подробную информацию
Ссылки [ править ]
- ^ «Номера протоколов» . iana.org . ИАНА . Проверено 9 сентября 2014 г.
- ^ Протокол передачи управления потоком . IETF . Октябрь 2000 г. doi : 10.17487/RFC2960 . РФК 2960 .
- ^ «Транспорт» . Базовый протокол диаметра . IETF . сек. 2.1. дои : 10.17487/RFC3588 . РФК 3588 . Проверено 18 мая 2012 г.
- ^ «Пример сценария использования служб сеансов RSerPool» . Обзор надежных протоколов объединения серверов . IETF . п. 10. сек. 4.2. дои : 10.17487/RFC5351 . РФК 5351 .
- ^ RFC 9260, раздел 1.5.5.
- ^ Хогг, Скотт. «А как насчет протокола передачи управления потоком (SCTP)?» . Сетевой мир . Архивировано из оригинала 30 августа 2014 года . Проверено 4 октября 2017 г.
- ^ Олссон, Магнус; Маллиган, Кэтрин; Султана, Шабнам; Роммер, Стефан; Фрид, Ларс (2013). Пакетные сети EPC и 4G: движущая сила революции мобильного широкополосного доступа (2-е изд.). Амстердам Бостон: Elsevier/AP, Academic Press является отпечатком Elsevier. п. 491. ИСБН 978-0-12-394595-2 .
- ^ «Справочная реализация SCTP — RFC4960» . Гитхаб . Проверено 14 октября 2013 г.
Это эталонная реализация SCTP. Он портативен и работает на FreeBSD/MAC-OS/Windows и в пользовательском пространстве (включая Linux).
- ^ "sys/netinet/sctp.h" . Перекрестная ссылка BSD . НетБСД . 27 июня 2017 г. Проверено 21 января 2019 г.
- ^ "man4/scctp.4" . Перекрестная ссылка BSD . НетБСД . 31 июля 2018 г. Проверено 21 января 2019 г.
- ^ «DragonFly удаляет SCTP» . Lists.dragonflybsd.org . Проверено 28 апреля 2016 г.
- ^ «О технологических достижениях FreeBSD» . Проект FreeBSD. 09.03.2008 . Проверено 13 сентября 2008 г.
SCTP: FreeBSD 7.0 является эталонной реализацией нового протокола IETF Stream Control Transmission Protocol (SCTP), предназначенного для поддержки VoIP, телекоммуникаций и других приложений с высокой надежностью и переменным качеством передачи с помощью таких функций, как многопутевая доставка, аварийное переключение. и многопотоковая передача.
- ^ «Протокол передачи управления потоком (SCTP)» . Девелоперская компания Хьюлетт-Паккард. Архивировано из оригинала 3 января 2013 г.
- ^ «Сеть TCP/IP» . Поддержка разработчиков QNX . Программные системы QNX . Проверено 13 сентября 2008 г. «Что нового в этом справочнике» . Справочник по библиотеке QNX . Программные системы QNX . Проверено 18 декабря 2012 г.
- ^ «Платформа разработки программного обеспечения QNX 6.4.0» .
- ^ «Сеть операционной системы Solaris 10 — высочайшая производительность сети» . Сан Микросистемс . Проверено 13 сентября 2008 г.
- ^ «SctpDrv: драйвер SCTP для Microsoft Windows» . Архивировано из оригинала 08.10.2017 . Проверено 4 января 2022 г.
- ^ «Расширение сетевого ядра SCTP для Mac OS X» . Гитхаб . 23 сентября 2021 г.
- ^ "sctplab/usrsctp" . Гитхаб . Проверено 21 сентября 2021 г.
- ^ «Страница загрузки SCTP» . 29 мая 2006 г. Проверено 4 февраля 2011 г.
- ^ «Установщик библиотеки Windows SCTP» . Проверено 4 февраля 2011 г.
- ^ Туксен, Майкл; Стюарт, Рэндалл Р. (май 2013 г.). UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечными хостами . IETF . дои : 10.17487/RFC6951 . РФК 6951 .
- ^ Бикхарт, Райан; Пол Д. Амер; Рэндалл Р. Стюарт (2007). «Прозрачный слой трансляции TCP-SCTP» (PDF) . Проверено 13 сентября 2008 г.
- ^ Д. Винг; А. Юрченко (апрель 2012 г.). «Счастливые глаза: успех с хостами с двумя стеками» . www.tools.ietf.org . IETF .
- ^ Хадеми, Наим; Брунстрем, Анна; Хуртиг, Пер; Гриннемо, Карл-Йохан (21 июля 2016 г.). «Счастливые глаза при выборе транспорта» . www.tools.ietf.org . IETF . Проверено 9 января 2017 г.