Протокол компьютерной сети
Протокол передачи потока управления ( 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 включают в себя:
- Надежная передача как упорядоченных, так и неупорядоченных потоков данных
- Поддержка множественной адресации, при которой одна или обе конечные точки соединения могут состоять из более чем одного IP-адреса, что обеспечивает прозрачное переключение между избыточными сетевыми путями.
- Доставка фрагментов в независимых потоках устраняет ненужную блокировку начала очереди , в отличие от доставки байтового потока TCP.
- Явная частичная надежность
- Выбор и мониторинг пути для выбора основного пути передачи данных и проверки связности пути передачи
- Механизмы проверки и подтверждения защищают от атак типа «флуд» и уведомляют о дублированных или отсутствующих фрагментах данных.
- Улучшенное обнаружение ошибок, подходящее для больших кадров Ethernet
Первоначально проектировщики SCTP предназначали его для передачи телефонии (т. е. Signaling System 7) по протоколу Internet Protocol с целью дублирования некоторых атрибутов надежности сигнальной сети SS7 в IP. Эта работа IETF известна как SIGTRAN . В то же время были предложены другие варианты использования, например, протокол Diameter [3] и Reliable Server Pooling (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 должна проверять достижимость основного и резервного адресов удаленной конечной точки с помощью heartbeat . Каждая конечная точка SCTP должна подтверждать heartbeat, которые она получает от удаленной конечной точки.
Когда SCTP отправляет сообщение на удаленный адрес, исходный интерфейс будет определяться только таблицей маршрутизации хоста (а не SCTP).
При асимметричной множественной адресации одна из двух конечных точек не поддерживает множественную адресацию.
При локальном множественном подключении и удаленном одиночном подключении, если удаленный первичный адрес недоступен, ассоциация SCTP завершается неудачей, даже если возможен альтернативный путь.
Структура пакета
Пакет SCTP состоит из двух основных разделов:
- Общий заголовок , который занимает первые 12 байт и выделен синим цветом.
- Фрагменты данных , которые занимают оставшуюся часть пакета. Первый фрагмент выделен зеленым цветом, а последний из 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 Realtime OS, [14] 6.3.0 по 6.3.2, устарела с версии 6.4.0 [15]
- Tru64 с дополнительным пакетом Compaq SCTP
- Sun Solaris 10 и выше [16]
- VxWorks версий 6.2.x - 6.4.x, а также 6.7 и новее
Драйверы сторонних производителей:
- Microsoft Windows :
- Драйвер ядра SctpDrv — это порт стека BSD SCTP для Windows (заброшен после 2012 года) [17]
- MacOS :
- Расширение ядра сети SCTP для Mac OS X [18]
Библиотека пользовательского пространства :
Следующие приложения реализуют 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 Restart
- RFC 7496 Дополнительные политики для расширения протокола частично надежной передачи управления потоком
- RFC 7053 Расширение SACK-IMMEDIATELY для протокола передачи управления потоком (устарело из-за RFC 9260)
- RFC 6951 UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечными хостами
- RFC 6525 Протокол передачи управления потоком (SCTP) Реконфигурация потока
- RFC 6458 Расширения API сокетов для протокола передачи управления потоком (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)
- Спецификация протокола передачи управления потоком (SCTP) RFC 4460. Ошибки и проблемы (устарело из-за RFC 9260)
- RFC 3873 Протокол передачи управления потоком (SCTP) База управляющей информации (MIB)
- RFC 3758 Протокол передачи управления потоком (SCTP) Расширение частичной надежности
- RFC 3554 Об использовании протокола передачи управления потоком (SCTP) с IPsec
- RFC 3436 Безопасность транспортного уровня по протоколу передачи управления потоком
- RFC 3309 Протокол передачи управления потоком (SCTP) Изменение контрольной суммы (устарело из-за RFC 4960)
- RFC 3286 Введение в протокол передачи управления потоком
- Заявление о применимости протокола передачи управления потоком RFC 3257
- RFC 2960 Протокол передачи управления потоком (обновлен RFC 3309 и устарел RFC 4960)
Смотрите также
Примечания
- ^ Блок данных DATA использует порядковый номер для упорядоченных сообщений, блок данных I-DATA , который решает некоторые проблемы с исходным блоком данных, использует идентификатор сообщения для всех сообщений.
- ^ Более подробную информацию см . в структуре пакета SCTP .
Ссылки
- ^ "Протокольные номера". iana.org . IANA . Получено 2014-09-09 .
- ^ Протокол передачи управления потоком. IETF . Октябрь 2000 г. doi : 10.17487/RFC2960 . RFC 2960.
- ^ "Транспорт". Протокол Diameter Base. IETF . раздел 2.1. doi : 10.17487/RFC3588 . RFC 3588. Получено 18.05.2012 .
- ^ "Пример сценария с использованием служб сеансов RSerPool". Обзор надежных протоколов пула серверов. IETF . стр. 10. раздел 4.2. doi : 10.17487/RFC5351 . RFC 5351.
- ^ RFC 9260, раздел 1.5.5
- ^ Хогг, Скотт. «Что насчет протокола передачи управления потоком (SCTP)?». Network World . Архивировано из оригинала 30 августа 2014 г. Получено 2017-10-04 .
- ^ Олссон, Магнус; Маллиган, Кэтрин; Султана, Шабнам; Роммер, Стефан; Фрид, Ларс (2013). EPC и пакетные сети 4G: движущая сила революции мобильного широкополосного доступа (2-е изд.). Амстердам-Бостон: Elsevier/AP, Academic Press является отпечатком Elsevier. стр. 491. ISBN 978-0-12-394595-2.
- ^ "Эталонная реализация для SCTP - RFC4960". GitHub . Получено 2013-10-14 .
Это эталонная реализация для SCTP. Она переносима и работает на FreeBSD/MAC-OS/Windows и в пространстве пользователя (включая Linux).
- ^ "sys/netinet/sctp.h". Перекрестная ссылка BSD . NetBSD . 2017-06-27 . Получено 2019-01-21 .
- ^ "man4/sctp.4". Перекрестная ссылка BSD . NetBSD . 2018-07-31 . Получено 2019-01-21 .
- ^ "DragonFly удаляет SCTP". Lists.dragonflybsd.org . 7 января 2015 г. Получено 28 апреля 2016 г.
- ^ "О технических достижениях FreeBSD". Проект FreeBSD. 09.03.2008 . Получено 13.09.2008 .
SCTP: FreeBSD 7.0 — это эталонная реализация нового протокола IETF Stream Control Transmission Protocol (SCTP), предназначенного для поддержки VoIP, телекоммуникаций и других приложений с высокой надежностью и переменным качеством передачи данных за счет таких функций, как многопутевая доставка, отказоустойчивость и многопоточность.
- ^ "Stream Control Transmission Protocol (SCTP)". Hewlett-Packard Development Company. Архивировано из оригинала 2013-01-03.
- ^ "TCP/IP Networking". Поддержка разработчиков QNX . QNX Software Systems . Получено 2008-09-13 ."Что нового в этом справочнике". Справочник библиотеки QNX . QNX Software Systems . Получено 18.12.2012 .
- ^ «Платформа разработки программного обеспечения QNX 6.4.0».
- ^ "Solaris 10 Operating System Networking — Extreme Network Performance". Sun Microsystems . Получено 13 сентября 2008 г.
- ^ "SctpDrv: драйвер SCTP для Microsoft Windows". Архивировано из оригинала 2017-10-08 . Получено 2022-01-04 .
- ^ "SCTP Network Kernel Extension for Mac OS X". GitHub . 23 сентября 2021 г.
- ^ "sctplab/usrsctp". Github . Получено 21 сентября 2021 г. .
- ^ "Страница загрузки SCTP". 2006-05-29 . Получено 2011-02-04 .
- ^ "Установщик библиотеки Windows SCTP" . Получено 2011-02-04 .
- ^ Tuexen, Michael; Stewart, Randall R. (май 2013 г.). UDP-инкапсуляция пакетов протокола передачи управления потоком (SCTP) для связи между конечными хостами. IETF . doi : 10.17487/RFC6951 . RFC 6951.
- ^ Бикхарт, Райан; Пол Д. Амер; Рэндалл Р. Стюарт (2007). "Прозрачный слой трансляции TCP-SCTP" (PDF) . Получено 13 сентября 2008 г.
- ^ Д. Винг; А. Юрченко (апрель 2012 г.). «Счастливые глазки: успех с хостами с двойным стеком». tools.ietf.org . IETF .
- ^ Хадеми, Наим; Брунстром, Анна; Хуртиг, Пер; Гриннемо, Карл-Йохан (21 июля 2016 г.). «Счастливые глаза для выбора транспорта». tools.ietf.org . IETF . Получено 09.01.2017 .
Внешние ссылки
- сигтран (архив)
- «Рабочая группа по транспорту сигнализации (sigtran)».
- «Рабочая группа по транспортной зоне (TSVWG)».
- «Проект OpenSS7».
- Рабочая группа SCTP для Linux
- «Страница SCTP Михаэля Тюксена».
- «Страница SCTP Лоде Коэна».
- «Страница проекта SCTP Томаса Дрейбхольца».