Протокол передачи управления потоком - Stream Control Transmission Protocol
Набор интернет-протоколов |
---|
Уровень приложения |
Транспортный уровень |
Интернет-уровень |
Связующий слой |
В Протокол передачи управления потоком (SCTP) это компьютерная сеть протокол связи в Транспортный уровень из Пакет Интернет-протокола. Первоначально предназначался для Система сигнализации 7 (SS7) передача сообщений в электросвязи, протокол обеспечивает ориентированную на сообщения функцию Протокол пользовательских датаграмм (UDP), обеспечивая надежную последовательную передачу сообщений с контроль перегрузки словно Протокол управления передачей (TCP). В отличие от UDP и TCP, протокол обеспечивает множественную адресацию и избыточные пути для повышения устойчивости и надежности. SCTP стандартизирован Инженерная группа Интернета (IETF) в RFC 4960. Эталонная реализация SCTP была выпущена как часть FreeBSD версия 7, и с тех пор широко переносится на другие платформы.
Официальный надзор
В IETF Сигнальный транспорт (СИГТРАН ) рабочая группа определила протокол (номер 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.
- Явная частичная надежность.
- Выбор и мониторинг пути для выбора основного пути передачи данных и проверки возможности соединения на пути передачи.
- Механизмы проверки и подтверждения защищают от атак лавинной рассылки и обеспечивают уведомление о дублированных или отсутствующих блоках данных.
- Улучшенное обнаружение ошибок подходит для Jumbo-кадры Ethernet.
Разработчики SCTP изначально предназначали его для передачи телефонии (Система сигнализации 7 ) по Интернет-протоколу с целью дублирования некоторых атрибутов надежности сигнальной сети SS7 в IP. Эта работа IETF известна как СИГТРАН. Тем временем были предложены другие варианты использования, например, Диаметр протокол[3] и Надежный пул серверов (RSerPool).[4]
Мотивация и принятие
TCP стал основным средством надежной передачи данных через Интернет. Однако TCP наложил ограничения на несколько приложений. Из RFC 4960:
- TCP обеспечивает как надежную передачу данных, так и доставку данных в строгом порядке. Некоторым приложениям требуется надежная передача без поддержки последовательности, в то время как другие будут удовлетворены частичным упорядочением данных. В обоих этих случаях свойство блокировки заголовка строки TCP вызывает ненужную задержку.
- Для приложений, обменивающихся отдельными записями или сообщениями, потоковая природа TCP требует добавления явных маркеров или другого кодирования для выделения отдельных записей.
- Чтобы избежать отправки большого количества небольших IP-пакетов, где было бы достаточно одного более крупного пакета, реализация TCP может задерживать передачу данных, ожидая, когда приложение, возможно, поставит в очередь больше данных (Алгоритм Нагла ). Если и когда такая небольшая задержка нежелательна, приложение должно явно запросить передачу без задержки в каждом конкретном случае, используя толкать объект (т.е. установив флаг PSH в заголовке TCP-пакета). SCTP, с другой стороны, позволяет настраивать передачу без задержки по умолчанию для ассоциации, устраняя любые нежелательные задержки, но за счет более высоких накладных расходов на передачу.[5]
- Ограниченный объем[нечеткий ] сокетов TCP усложняет задачу обеспечения высокой доступности передачи данных с использованием многодомный хосты.
- TCP относительно уязвим для атак типа «отказ в обслуживании», таких как SYN атаки.
Принятие было замедлено из-за недостаточной осведомленности, отсутствия реализаций (особенно в Microsoft Windows), отсутствия поддержки приложений и отсутствия поддержки сети.[6]
Множественное наведение
SCTP предоставляет резервные пути для повышения надежности.
Каждая конечная точка SCTP должна проверять достижимость основного и избыточного адресов удаленной конечной точки с помощью сердцебиение.Каждая конечная точка SCTP должна подтверждать тактовые импульсы, которые она получает от удаленной конечной точки.
Когда SCTP отправляет сообщение на удаленный адрес, исходный интерфейс будет определяться только таблицей маршрутизации хоста (а не SCTP).
Асимметричное множественное наведение
При асимметричной множественной адресации одна из двух конечных точек не поддерживает множественную адресацию.
Местное множественное возвращение - удаленное одиночное возвращение
В режимах «Локальная множественная адресация» и «Удаленная одиночная адресация», если удаленный первичный адрес недоступен, ассоциация SCTP не выполняется, даже если возможен альтернативный путь.
Local-single-Homing - удаленное множественное возвращение
Структура пакета
|
Пакет SCTP состоит из двух основных разделов:
- В общий заголовок, который занимает первые 12 байтов и выделен синим цветом, и
- В блоки данных, которые занимают оставшуюся часть пакета. Первый фрагмент выделен зеленым, а последний из N фрагменты (Chunk N) выделены красным.
Каждый блок начинается с однобайтового идентификатора типа, с 15 типами блоков, определенными RFC 4960 и еще как минимум 5, определенных дополнительными RFC.[заметка 2] Восемь битов флага, поле длиной два байта и данные составляют оставшуюся часть блока. Если блок не кратен 4 байтам (т.е. длина не кратна 4), то он дополняется нулями, которые не включаются в длину блока. Поле длины в два байта ограничивает длину каждого блока до 65 535 байт (включая поля типа, флагов и длины).
Безопасность
Хотя шифрование не входило в первоначальную структуру SCTP, SCTP был разработан с функциями для повышения безопасности, такими как 4-сторонняя рукопожатие (в сравнении с TCP 3-стороннее рукопожатие ) для защиты от SYN флуд атаки и большие «куки» для проверки ассоциации и подлинности.
Надежность также была ключевой частью системы безопасности SCTP. Множественная адресация позволяет ассоциации оставаться открытой, даже когда некоторые маршруты и интерфейсы не работают. Это особенно важно для СИГТРАН как он несет SS7 по IP-сети с использованием SCTP и требует сильной устойчивости во время сбоев связи для поддержания телекоммуникационных услуг даже при устойчивых сетевых аномалиях.
SCTP иногда является хорошим снятие отпечатков пальцев кандидат. Некоторые операционные системы поставляются с включенной поддержкой SCTP, и, поскольку он не так хорошо известен как TCP или UDP, его иногда упускают из виду в конфигурациях межсетевого экрана и обнаружения вторжений, что часто позволяет зондировать трафик.
Реализации
Эталонная реализация SCTP работает во FreeBSD, Mac OS X, Microsoft Windows и Linux.[7]
Следующее операционные системы реализовать SCTP:
- AIX Версия 5 и новее
- Универсальный BSD с внешним патчем на КАМЕ проект[нужна цитата ]
- 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,[13] 6.3.0–6.3.2, не рекомендуется с 6.4.0[14]
- солнце Солярис 10 и выше[15]
- VxWorks версии от 6.2.x до 6.4.x и 6.7 и новее
- иллюзия
Сторонние драйверы:
- Майкрософт Виндоус:
- Драйвер ядра 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:
Туннелирование через 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 Регистрация флагов фрагментов протокола передачи управления потоком (SCTP) (обновления RFC 4960 )
- RFC 5062 Обнаружены атаки безопасности на протокол передачи управления потоком (SCTP) и текущие меры противодействия
- RFC 5061 Протокол передачи управления потоком (SCTP) Динамическое изменение конфигурации адреса
- RFC 5043 Протокол передачи управления потоком (SCTP) Адаптация прямого размещения данных (DDP)
- RFC 4960 Протокол передачи управления потоком
- RFC 4895 Проверенные блоки для протокола передачи управления потоком (SCTP)
- RFC 4820 Блок заполнения и параметр для протокола передачи управления потоком (SCTP)
- RFC 4460 Ошибки и проблемы спецификации протокола передачи управления потоком (SCTP)
- 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 )
Смотрите также
- Транспортный уровень § Сравнение протоколов транспортного уровня
- Протокол инициирования сеанса (SIP) - который может инициировать несколько потоков через SCTP, TCP или UDP.
- Многопутевый TCP - который позволяет TCP-соединению использовать несколько путей для максимального использования ресурсов и увеличения избыточности
- Счастливые глазные яблоки - изначально разработан для эффективного выбора IPv4 или IPv6 для соединения;[23] также может быть адаптирован для выбора из различных транспортных протоколов, например TCP и SCTP.[24]
Примечания
- ^ В Блок данных использует порядковый номер для упорядоченных сообщений, Блок I-DATA, который решает некоторые проблемы с исходным блоком DATA, использует идентификатор сообщения для всех сообщений
- ^ Видеть Структура пакета SCTP Больше подробностей
Рекомендации
- ^ «Номера протоколов». iana.org. IANA. Получено 2014-09-09.
- ^ Протокол передачи управления потоком. IETF. Октябрь 2000 г. Дои:10.17487 / RFC2960. RFC 2960.
- ^ "Транспорт". Базовый протокол диаметра. IETF. сек. 2.1. Дои:10.17487 / RFC3588. RFC 3588. Получено 2012-05-18.
- ^ «Пример сценария с использованием служб сеансов RSerPool». Обзор протоколов надежного пула серверов. IETF. п. 10. сек. 4.2. Дои:10.17487 / RFC5351. RFC 5351.
- ^ RFC 4960, раздел 1.5.5
- ^ Хогг, Скотт. "А как насчет протокола передачи управления потоком (SCTP)?". Сетевой мир. Получено 2017-10-04.
- ^ «Эталонная реализация для SCTP - RFC4960». Получено 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. Получено 2016-04-28.
- ^ «О технологических достижениях FreeBSD». Проект FreeBSD. 2008-03-09. Получено 2008-09-13.
SCTP: FreeBSD 7.0 - это эталонная реализация нового протокола IETF Stream Control Transmission Protocol (SCTP), предназначенного для поддержки VoIP, телекоммуникаций и других приложений с высокой надежностью и переменным качеством передачи с помощью таких функций, как многопутевая доставка, переключение при отказе. , и многопоточность.
- ^ «Протокол передачи управления потоком (SCTP)». Компания Hewlett-Packard Development. Архивировано из оригинал на 2013-01-03.
- ^ «Сеть TCP / IP». Поддержка разработчиков QNX. Программные системы QNX. Получено 2008-09-13.«Что нового в этом справочнике». Справочник по библиотеке QNX. Программные системы QNX. Получено 2012-12-18.
- ^ "Платформа разработки программного обеспечения QNX 6.4.0".
- ^ «Работа в сети с операционной системой Solaris 10 - максимальная производительность сети». Sun Microsystems. Получено 2008-09-13.
- ^ «SctpDrv: драйвер SCTP для Microsoft Windows». Архивировано из оригинал на 2011-01-08. Получено 2011-02-04.
- ^ «Расширение сетевого ядра SCTP для Mac OS X».
- ^ https://github.com/sctplab/usrsctp
- ^ "Страница загрузки SCTP". 2006-05-29. Получено 2011-02-04.
- ^ «Установщик библиотеки Windows SCTP». Получено 2011-02-04.
- ^ Туэксен, Майкл; Стюарт, Рэндалл Р. (май 2013 г.). Инкапсуляция UDP пакетов протокола передачи управления потоком (SCTP) для связи между конечным хостом. IETF. Дои:10.17487 / RFC6951. RFC 6951.
- ^ Бикхарт, Райан; Пол Д. Амер; Рэндалл Р. Стюарт (2007). «Прозрачный слой оболочки трансляции TCP-SCTP» (PDF). Получено 2008-09-13.
- ^ D. Крыло; А. Юрченко (апрель 2012 г.). "Happy Eyeballs: успех с хостами с двойным стеком". tools.ietf.org. IETF.
- ^ Хадеми, Наим; Брюнстрем, Анна; Хуртиг, Пер; Гриннемо, Карл-Йохан (21 июля 2016 г.). «Счастливые глаза при выборе транспорта». tools.ietf.org. IETF. Получено 2017-01-09.