SCTP: надстройка протокола TCP
для улучшения эффективности его работы
Переход от протокола TCP к протоколу SCTP будет наименее безболезненным потому, что многие функции TCP поддерживаются и в SCTP В настоящее время очень популярным протоколом передачи данных в сети Интернет является TCP/IP, который гарантирует надежную передачу пакетов между двумя участниками интернет-соединения. Из-за своей давней разработки данный протокол является устаревающим, т.к. какой бы ширины ни был канал передачи данных, протокол TCP/IP не способен полностью его загрузить по причине потери пакетов в результате различных физических явлений и ихпостоянных переотправлений.
Описание протокола TCP/IP
В 70-х годах ХХ века потребовалось создать протокол, который смог бы безопасно передавать данные. Поэтому при создании TCP все усилия были направлены на создание механизма надежной, а не скоростной передачи. В те годы не было мобильных и спутниковых сетей, а единственный трансатлантический канал из США в Европу имел скорость 64 Кбит/с. TCP был разработан так, чтобы скорость передачи данных была обратно пропорциональна расстоянию между двумя конечными точками. В случае потери пакетов TCP считает, что канал перегружен, и самостоятельно уменьшает скорость передачи. Производительность TCP снижается с ростом расстояния между конечными точками и из-за низкого качества сети [1]. Чем больше расстояние, тем больше задержка и ниже скорость передачи. Маршрутизатору требуется время на обработку пакета, а если роутер настроен неправильно или перегружен, передаваемые пакеты могут быть утеряны. Чем больше пакетов утрачено, тем более затратной по времени становится передача. На рис. 1 показано, что TCP имеет хорошую производительность в локальных сетях относительно доступной пропускной способности сети, ночем больше время задержки и потеря пакетов, тем ниже будет производительность передачи данных. Также производительность протокола не растет с увеличением канала. Рисунок 1. Производительность TCP/IP Количество пакетов, которые может отправить TCP в момент времени, определяется механизмом под названием «окно TCP» (TCP Sliding Window). Окно TCP регулируется алгоритмом предотвращения перегрузки AIMD (Adaptive Increase Multiplicative Decrease) и контролем передачи (Flow Control), регулируя скорость отправки пакетов. Благодаря этому TCP может быть «уверен» в том, что пакеты отправляются не быстрее, чем их может принять получатель. В случае обнаружения потери пакета/подтверждения отправитель, используя AIMD-алгоритм, уменьшает размер окна TCP либо вдвое, либо до нуля. Если представить скорость передачи протокола TCP в виде графика (см. рис. 2), получится «пилообразная» функция. Рисунок 2. Размер окна передачи данных
Протокол SCTP
SCTP создает двустороннюю ассоциацию между двумя конечными точками и дает возможность работы с несколькими потоками каждой паре конечных точек, а также обеспечивает поддержку концепции многоинтерфейсного узла натранспортном уровне [2] (см. рис. 3). Рисунок 3. Концепция многоинтерфейсного узла Сервисы, предоставляемые SCTP, имеют много общего с сервисами TCP и UDP. Протокол SCTP описывается в RFC 4960 [3]. Несмотря на принципиальную разницу между SCTP и TCP, для приложения интерфейс «точка – точка» почти ничем не отличается от интерфейса TCP. Подобно TCP, протокол SCTP обеспечивает приложениям, взаимодействующим по IP-сети, транспортную службу с гарантией доставки и сохранением порядка следования пакетов. Протокол унаследовал многие функции, разработанные для TCP, а именно возможность контроля перегрузки и восстановления утерянных пакетов. В действительности любое приложение, работающее по протоколу TCP, можно перевести на SCTP без потери функциональности. Соединение по протоколу SCTP между клиентом и сервером называется ассоциацией, так как это многопотоковый протокол, позволяющий задать несколько IP-адресов и один порт для каждой стороны соединения (см. рис. 4). Рисунок 4. Ассоциация протокола SCTP Наличие у конечной точки нескольких IP-адресов позволяет обеспечить дополнительную устойчивость в случае отказа сети и уменьшить задержки. Для сокращения задержек, вызванных переключением с первичного направления наальтернативные, используется механизм контроля работоспособности. Пока идет передача данных по первичному направлению, протокол SCTP посылает пакеты контроля работоспособности на адреса, находящиеся в режиме ожидания. В отличие от TCP протокол SCTP ориентирован не на поток байтов, а на сообщения. Он обеспечивает упорядоченную доставку данных и сохраняет границы сообщений в пакетах приложения, размещая сообщения в одной или нескольких структурах данных SCTP, называемых фрагментами. Несколько сообщений могут объединяться в один фрагмент, а длинное сообщение может быть сегментировано. Благодаря этому свойству устраняется возможная блокировка линии типа head-of-line, присущая протоколу TCP, так как утрата сообщения в одном из потоков не блокирует доставку сообщений по другим. С помощью SCTP приложения могут использовать различные модели доставки, в том числе строгий порядок передачи (как TCP), частичное упорядочивание (по потокам) и неупорядоченную доставку (как UDP). Для восстановления утраченных пакетов используется схема выборочного подтверждения, унаследованная из TCP. Поддерживая обратную связь с отправителем, приемник SCTP сообщает, какие пакеты необходимо отсылать повторно, если они были утеряны. Для контроля перегрузки используются стандартные методики: медленный старт, предотвращение перегрузки и быстрая повторная передача. SCTP лишен двух особенностей TCP. Одна из них – состояние неполного закрытия соединения на своей стороне, которое возникает, когда приложение закрывает свой конец соединения, но разрешает встречной стороне отправлять данные ипринимает их. Также не поддерживается обработка внеочередных данных. Для доставки срочных данных в SCTP можно использовать отдельный поток, хотя это и не позволяет в точности воспроизвести поведение TCP в данной ситуации.
Заключение
- Кручинин С.В. Стеки сетевых технологий TCP/IP и OSI/ISO//Вопросы науки. – 2015. – Т. 3. – С. 145-147.
- [Электронный ресурс]. Режим доступа: https://www.ibm.com/developerworks/ru/library/l-sctp/index.html#artrelatedtopics (дата обращения: 03.01.2019).
- [Электронный ресурс]. Режим доступа: https://tools.ietf.org/html/rfc4960 (дата обращения: 05.01.2019).
- Кручинин С.В. Реализация модели OSI/ISO телекоммуникационным модулем сопряжения для MESH-сетей //Научно-исследовательские публикации, 2016, № 5. – С. 27-32.
- Кручинин С.В. Семиуровневая сетевая модель OSI/ISO и стек протоколов TCP/IP: исследование взаимоотношения и интерпретации//Научно-исследовательские публикации, 2015, № 5. – С. 115-120.
Ключевые слова: интернет, протокол, соединение.
SCTP
SCTP (англ. Stream Control Transmission Protocol — «протокол передачи с управлением потоком»), протокол транспортного уровня в компьютерных сетях, появившийся в 2000 году в IETF. RFC 4960 описывает этот протокол, а RFC 3286 содержит техническое вступление к нему.
Как и любой другой протокол передачи данных транспортного уровня, SCTP работает аналогично TCP или UDP [1] . Будучи более новым протоколом, SCTP имеет несколько нововведений, таких как многопоточность, защита от SYN-flood атак, синхронное соединение между двумя хостами по двум и более независимым физическим каналам (multi-homing).
Безопасное установление соединения
Создание нового подключения в протоколах TCP и SCTP происходит при помощи механизма подтверждения (квитирования) пакетов. В протоколе TCP данная процедура получила название трехэтапное квитирование (three-way handshake). Клиент посылает пакет SYN (сокр. Synchronize). Сервер отвечает пакетом SYN-ACK (Synchronize-Acknowledge). Клиент подтверждает прием пакета SYN-ACK пакетом ACK. На этом процедура установления соединения завершается.
Протокол TCP имеет потенциальную уязвимость, обусловленную тем, что нарушитель, установив фальшивый IP-адрес отправителя, может послать серверу множество пакетов SYN. При получении пакета SYN сервер выделяет часть своих ресурсов для установления нового соединения. Обработка множества пакетов SYN рано или поздно, затребует все ресурсы сервера и сделает невозможным обработку новых запросов. Такой вид атак называется «отказ в обслуживании» (Denial of Service (DoS)).
Протокол SCTP защищен от подобных атак с помощью механизма четырехэтапного квитирования (four-way handshake) и вводом маркера (cookie). По протоколу SCTP клиент начинает процедуру установления соединения посылкой пакета INIT. В ответ сервер посылает пакет INIT-ACK, который содержит маркер (уникальный ключ, идентифицирующий новое соединение). Затем клиент отвечает посылкой пакета COOKIE-ECHO, в котором содержится маркер, посланный сервером. Только после этого сервер выделяет свои ресурсы новому подключению и подтверждает это отправлением клиенту пакета COOKIE-ACK.
Для решения проблемы задержки пересылки данных при выполнении процедуры четырехэтапного квитирования в протоколе SCTP допускается включение данных в пакеты COOKIE-ECHO и COOKIE-ACK.
Поэтапное завершение передачи данных
Рассмотрим отличия между процедурой закрытия сокетов протокола SCTP и процедурой частичного закрытия (half-close) протокола TCP.
В протоколе TCP возможна ситуация частичного закрытия соединения, когда один узел закончил передачу данных (выполнив посылку пакета FIN), но продолжает принимать данные по этому соединению. Другой узел может продолжать передавать данные до тех пор, пока сам не проведёт закрытие соединения на своей стороне. Состояние частичного закрытия используется приложениями крайне редко, поэтому разработчики протокола SCTP посчитали нужным заменить его последовательностью сообщений для разрыва существующей ассоциации. Когда узел закрывает свой сокет (посылает сообщение SHUTDOWN), оба корреспондента должны прекратить передачу данных, при этом разрешается лишь обмен пакетами, подтверждающими прием ранее отправленных данных.
Многопоточность
TCP управляет последовательностью байт: данные, посланные приложением-отправителем, должны поступать приложению-получателю строго в том же порядке (в то время как протокол IP способен поменять последовательность пакетов; кроме того, пропавшие пакеты посылаются повторно и обычно прибывают к получателю с нарушением последовательности; для борьбы с этими явлениями данные накапливаются в буфере). SCTP может транспортировать данные между двумя точками одновременно по нескольким потокам сообщений. В противоположность к TCP, SCTP обрабатывает целые сообщения, а не обычные байты информации. Это означает, что если отправитель отсылает серверу сообщение, состоящее из 100 байт за первый шаг, а за ним ещё 50 байт, то получатель за первый шаг получит именно первые 100 байт в первом сообщении, а только затем и только 50 байт на второй операции чтения из сокета.
Термин «многопоточность» (англ. multi-streaming) обозначает способность SCTP параллельно передавать по нескольким независимым потокам сообщений. Например, мы передаем несколько фотографий через HTTP-приложение (например, браузер). Можно использовать для этого связку из нескольких TCP-соединений, однако также допустимо SCTP-ассоциация (англ. SCTP-association), управляющее несколькими потоками сообщений для этой цели.
TCP достигает правильного порядка байт в потоке, абстрактно назначая порядковый номер каждой отосланной единице, а упорядочивая принятые байты, используя назначенные порядковые номера, по мере их прибывания. С другой стороны, SCTP присваивает различные порядковые номера сообщениям, посылаемым в конкретном потоке. Это разрешает независимое упорядочивание сообщений по разным потокам. Так или иначе, многопоточность является опцией в SCTP. В зависимости от желаний пользовательского приложения, сообщения могут быть обработаны не в порядке их отправления, а в порядке их поступления.
Достоинства
Достоинства использования SCTP включают в себя:
- Использование множественных интерфейсов (англ Multihoming)
Допустим, у нас есть два хоста. И хотя бы один из них имеет несколько сетевых интерфейсов, и соответственно несколько IP-адресов. В TCP, понятие «соединение» означает обмен данными между двумя точками, в то время, как в SCTP имеет место концепция «ассоциации» (англ. association), обозначащая всё происходящее между двумя хостами
- Многопоточность
Данные приходят в точку по независимым потокам. Это позволяет устранить феномен en:Head-of-line blocking, которым так страдает TCP - Поиск пути с мониторингом
Протоколом выбирается первичный маршрут передачи данных, а также производится проверка и мониторинг связности пути. - Механизмы валидации и проверки подлинности
Защита адресата от flood-атак (технология 4-way handshake), и уведомление о потерянных пакетах и нарушенных цепочках. - Улучшенная система контроля ошибок, подходящая для jumbo-пакетов в Ethernet.
Часть достоинств вытекает из того факта, что изначально разработчики SCTP проектировали протокол под нужды передачи телефонии (SS7) по протоколу IP.
Причины появления
Протокол TCP предоставляет основные средства для передачи данных по сети Internet по надежному пути. Однако TCP накладывает некоторые ограничения на транспорт данных:
- TCP предоставляет надежную передачу данных в строгой последовательности. Тем не менее одни приложения требуют передачу без управления и контроля последовательности, а другие будут вполне удовлетворены частичной упорядоченностью данных. Оба этих случая страдают из-за ненужных задержек, связанных с восстановлением и упорядочиванием нарушенных последовательностей TCP.
- Природа TCP ориентирована на поток байт, что вызывает неудобства. Приложения вынуждены самостоятельно добавлять собственные маркеры в пакеты, чтобы распараллелить передачу собственных сообщений, а также использовать дополнительные ухищрения, чтобы убедиться в том, что целое сообщение было доставлено за определенное время.
- Ограниченные рамки возможностей TCP-сокетов ещё более усложняют задачу предоставления возможности параллельной передачи информации к хостам по нескольким каналам связи (см. multi-homing выше).
- TCP относительно уязвим к атакам класса «Отказ в обслуживании» (DoS), таким как SYN-flood.
Все эти ограничения наносят ущерб производительности работы телефонных сетей через IP.
Безопасность
SCTP был разработан с некоторыми функциями позволяющими повысить безопасность, такими как «4-х кратное рукопожатие» (по сравнению с «трёхкратным рукопожатием» в TCP), чтобы предотвратить SYN-flood атаки, и больших Cookie для проверки подлинности ассоциации.
Надежность была одним из ключевых аспектов разработки безопасности протокола SCTP. Multi-homing позволяет ассоциации оставаться открытой, даже если некоторые используемые маршруты и интерфейсы стали недоступны. Это имеет особое значение для SIGTRAN, который используя SCTP, передаёт сообщения и сервисы протоколов ОКС-7 поверх IP сети, что требует сильной устойчивости во время отключений линков для поддержания телекоммуникационных услуг, даже при серьёзных аномалиях в сети.
Шифрование не является частью оригинального дизайна SCTP.
В некоторых случаях SCTP является хорошим кандидатом для проверки на прочность стэка TCP/IP (англ.). Причиной для этого является тот факт, что некоторые операционные системы распространяются с поддержкой протокола SCTP, но ввиду его слабой известности (по сравнению с TCP или UDP), администраторы иногда забывают настроить в брандмауэре обнаружения вторжений, что даёт возможности для сканирования трафика.
Сравнение возможностей протоколов транспортного уровня
Параметр | UDP | TCP | SCTP |
---|---|---|---|
Установка соединения | Нет | Да | Да |
Надежная передача | Нет | Да | Да |
Сохранение границ сообщения | Да | Нет | Да |
Упорядоченная доставка | Нет | Да | Да |
Неупорядоченная доставка | Да | Нет | Да |
Контрольные суммы данных | Да | Да | Да |
Размер контрольной суммы (бит) | 16 | 16 | 32 |
Путь MTU | Нет | Да | Да |
Управление накоплением | Нет | Да | Да |
Многопоточность | Нет | Нет | Да |
Поддержка множественных интерфейсов | Нет | Нет | Да |
Связка потоков | Нет | Да | Да |
Формирование кадров сообщения
При формировании кадров сообщения обеспечивается сохранение границ сообщения в том виде, в котором оно передается сокету; это означает, что если клиент посылает серверу 100 байт, за которыми следуют 50 байт, то сервер воспринимает 100 байт и 50 байт за две операции чтения. Точно так же функционирует протокол UDP, это является особенностью протоколов, ориентированных на работу с сообщениями.
В противоположность им протокол TCP обрабатывает неструктурированный поток байт. Если не использовать процедуру формирования кадров сообщения, то узел сети может получать данные по размеру больше или меньше отправленных. Такой режим функционирования требует, чтобы для протоколов, ориентированных на работу с сообщениями и функционирующих поверх протокола TCP, на прикладном уровне был предоставлен специальный буфер данных и выполнялась процедура формирования кадров сообщений (что потенциально является сложной задачей).
Протокол SCTP обеспечивает формирование кадров при передаче данных. Когда узел выполняет запись в сокет, его корреспондент с гарантией получает блок данных того же размера.
Структура пакета
SCTP пакеты имеют более простую структуру, чем пакеты TCP. Каждый пакет состоит из двух основных разделов:
- Общий заголовок, который занимает первые 12 байт (выделены синим цветом)
- Блоки данных, которые занимают оставшуюся часть пакета.
Первый блок отмечен зелёным цветом, и последний из блоков N (N блок) выделен красным.
Каждый блок имеет идентификатор типа, занимающий один байт. Таким образом, возможно определение не более 255 различных типов блоков. RFC 4960 определяет список типов блоков, всего на данный момент определено 15 типов. Остальная часть блока состоит из поля длины размером в 2 байта (максимальная длина, которя может содержаться в данном поле, равна 65535 байтам) и, собственно, данных. Если размер блока не кратен 4-м байтам, то он заполняется нулями до размера, кратного 4-м байтам.
Обработка ошибок
Повтор передачи
Повторная передача блоков DATA может быть обусловлена (a) тайм-аутом, определяемым таймером повтора (retransmission timer) или (b) получением SACK, показывающих что блок DATA не был получен адресатом. Для снижения вероятности насыщения повтор передачи блоков DATA ограничивается. Значение тайм-аута для повтора (RTO) устанавливается на основе оценки времени кругового обхода и уменьшается экспоненциально с ростом частоты потери сообщений. Для активных ассоциаций с почти постоянным уровнем трафика DATA причиной повтора скорей всего будут сообщения SACK, а не тайм-аут. Для снижения вероятности ненужных повторов используется правило 4 SACK, в соответствии с которым повтор передачи происходит только по четвертому SACK, указывающему на пропуск блока данных. Это позволяет предотвратить повторы передачи, вызванные нарушением порядка доставки.
Сбой в пути
Поддерживается счетчик для числа повторов передачи по конкретному адресу получателя без подтверждения успешной доставки. Когда значение этого счетчика достигает заданного порога (конфигурационный параметр), адрес объявляется неактивным и протокол SCTP начинает использовать другой адрес для передачи блоков DATA. Кроме того, по всем неиспользуемым (дополнительным) адресам периодически передаются специальные блоки Heartbeat и поддерживается счетчик числа блоков Heartbeat, переданных без возврата соответствующего Heartbeat Ack. Когда значение счетчика достигает заданного порога (параметр конфигурации), соответствующий адрес объявляется неактивным. Блоки Heartbeat передаются по неактивным адресам до тех пор, пока не будет получено сообщение Ack, говорящее о восстановлении активности адреса. Частота передачи блоков Heartbeat определяется значение RTO и дополнительной задержкой, которая позволяет передавать блоки Heartbeat без помех для пользовательского трафика.
Отказ в конечной точке
Для всех адресов получателя поддерживается общий счетчик числа повторов или блоков Heartbeat, переданных удаленной точке без получения от нее соответствующего подтверждения (Ack). Когда значение счетчика достигает заданного порога (параметр конфигурации) конечная точка декларируется как недостижимая и ассоциация SCTP закрывается.
Реализации
Протокол SCTP реализован в следующих операционных системах:
- Linux 2.4 и выше
- Sun Solaris 10
- Cisco IOS 12+
- DragonFly BSD начиная с версии 1.4
- QNX Neutrino,
- BSD UNIX (с внешним дополнением от проекта KAME)
- FreeBSD начиная с версии 7
- HP-UX
- AIX 5
Примечания
- ↑ TCP и UDP работают столь различно, что проводить аналогию к ним обоим некорректно. Вся аналогия — в том, что SCTP, TCP и UDP относятся к одному и тому же уровню стека TCP/IP.
Ссылки
- RFC 3286
- http://rfc2.ru/3286.rfc — перевод RFC 3286 на русский язык
- http://www.sigtran.org
- http://www.sctp.org
- http://www.openss7.org
- http://www.sctp.de
- http://tdrwww.exp-math.uni-essen.de/inhalt/forschung/sctp_fb/sctp_intro.html
- SeveNTest онлайн декодер сообщений TCP/IP
- RFC 2960 — Stream Control Transmission Protocol,
- RFC 3257 — Stream Control Transmission Protocol Applicability Statement,
- RFC 3286 — An Introduction to the Stream Control Transmission Protocol (SCTP),
- RFC 3309 — Stream Control Transmission Protocol (SCTP) Checksum Change,
- RFC 3436 — Transport Layer Security over Stream Control Transmission Protocol,
- RFC 3554 — On the Use of Stream Control Transmission Protocol (SCTP) with IPsec,
- RFC 3758 — Stream Control Transmission Protocol (SCTP) Partial Reliability Extension,
- RFC 3873 — Stream Control Transmission Protocol (SCTP) Management Information Base (MIB),
- RFC 4460 — Stream Control Transmission Protocol (SCTP) Specification Errata and Issues,
- RFC 4820 — Padding Chunk and Parameter for the Stream Control Transmission Protocol (SCTP),
- RFC 4895 — Authenticated Chunks for the Stream Control Transmission Protocol (SCTP),
- RFC 4960 — Stream Control Transmission Protocol,
- RFC 5061 — Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration,
- RFC 5062 — Security Attacks Found Against the Stream Control Transmission Protocol (SCTP) and Current Countermeasures.
Протоколы транспортного уровня (TCP, UDP, SCTP)
SCTP (Stream Control Transmission Protocol — протокол передачи с управлением потока) — протокол транспортного уровня. Выполняет те же функции, что и протоколы TCP и UDP. Но объединяет при этом их преимущества, лишает недостатков и добавляет новые возможности.
Отличия от протоколов TCP и UDP:
Основные преимущества (пояснения к таблице):
- Сохранение границ — в протоколе TCP данные передаются непрерывным потоком байт, читаются так же, поэтому программист должен сам следить за тем, как расставлять границы в этом потоке и разделать куски данных. SCTP позволяет ставить границы и обрабатывать данные пакетами, как в UDP. Но при этом гарантирует порядок доставки пакетов, обеспечивает надёжность и ориентирован на соединения. Упорядоченность пакетов, кстати, можно отключить для повышения скорости.
- Multihoming (многолинейность, множественная адресация, см. иллюстрацию ниже) — SCTP позволяет устанавливать соединение к одному серверу по разным линиям связи (например, по Wi-Fi и по Ethernet). Таким образом, если одна линия связи отвалится (скорей всего Wi-Fi), то соединение не разорвётся. Это так же позволяет передавать данные сразу по нескольким линиям, что увеличивает скорость передачи. Если в TCP одна линия связи оборвётся, то соединение будет потеряно, придётся устанавливать новое.
- Multithreading (многопоточность) — позволяет передавать несколько потоков в рамках одной ассоциации (ассоциацией в SCTP называется соединение между двумя хостами). Например в TCP данные и служебная информация передаются по одному соединению. Поэтому задержка в получении служебнной информации может быть вызвана текущей передачей данных (например, ACK может не прийти вовремя, поэтому мы пошлём дупликат). Такая проблема называется head-of-line blocking, HOL. Многопоточность позволяет передавать эти данные независимо, что приведёт к лучшему использованию доступных ресурсов.
- 4-way handshake — протокол TCP подвержен SYN-flood атакам. Злоумышленник шлёт много пакетов в короткое время для запроса TCP соединения (запрос на соединение помечен битом SYN в заголовке, поэтому и SYN-flood). Но при этом не подтверждает установление соединения. Таким образом на сервере образуются полуоткрытые соединения. Они закрываются сами по истечению таймаута. Но цель злоумышленника состоит в том, чтобы создать как можно больше таких соединений, не давая тем самым создавать новые валидные соединения из-за ограничения в их количестве на стороне сервера (сервер не может иметь бесконечное число соединений, а если сделать таймаут на обрыв слишком маленьким, то валидные соединения могут отваливаться раньше времени, что тоже нехорошо, и это всё делает syn-атаки возможными). В SCTP используется не тройное рукопожатие, а четверное (из разряда: «я хочу установить соединение — ты точно хочешь установить соединение? — да, я точно хочу установить соединение — ну тогда ладно»). Таким образом за короткий промежуток времени нельзя создать много новых соединений.
- В SCTP не бывает полузакрытых соединений, как в TCP. Если мы закрываем соединение, то сразу в обе стороны.
К сожалению, несмотря на все преимущеста, протокол SCTP не получил пока широкого распространения. Это связано с инертностью (TCP работает, зачем менять?) и сложностью поддержки на аппаратном уровне (например, вся обёртка сетевых протоколов, те же фаерволы, имеют правила в духе «пропускать только UDP, TCP» пакеты; для примера можно вспомнить, как это используется в NAT).
Источники информации
- Лекция А. Масальских — Транспортный уровень. Введение. TCP. UDP. SCTP
- SCTP в Java (примеры кода)
- RFC 4960 — SCTP
Общее описание протокола SCTP
В связи с неспособностью UDP и TCP обеспечить необходимые требования ОКС7, за транспортную основу взят протокол передачи с управлением потоками SCTP (Stream Control Transmission Protocol), специфицированный в документе RFC 2960.
Протокол SCTP реализуют следующие принципы:
· подтверждаемая, достоверная, свободная от ошибок и не дублируемая пересылка пользовательских данных в потоках сообщений (message streams), при которой устраняется необходимость в обеспечении строгого порядка следования сообщений, и сообщения пересылаются на вышележащий уровень, как только они получены;
· сегментация данных для адаптации к размеру максимальногопересылаемого блока данных, что, впрочем, является обязательным условием в мире IP и предусматривает сборку блоков данных в сообщения на дальнем конце;
· отсутствие обязательного мультиплексирования сообщений вSCTP-дейтаграммы;
· отказоустойчивость на сетевом уровне;
· исключение перегрузок и противодействие лавинам сообщенийи нелегальным проникновениям в систему, вызывающим перегрузки;
· функции эксплуатационного управления трактом передачи, позволяющие установить доступность адресата в режиме реального времени посредством периодических контрольных сообщений, и если обнаруживается, что текущий транспортный адрес получателя недоступен, выбирается другой адрес из списка возможных транспортных адресов этого получателя.
Оконечный пункт SCTP представляет собой логический передатчик или приемник пакетов SCTP и представляет собой комбинацию одного или нескольких адресов и номера порта, причем SCTP позволяет оконечному пункту иметь несколько IP-адресов и быть, таким образом, multihomed — распределенным по нескольким физическим платформам, — обеспечивая тем самым устойчивость к повреждениям. Даже имея несколько IP-адресов, оконечный пункт SCTP может использовать только один номер порта. Таким образом, если у оконечного пункта несколько IP-адресов, к каждому из них применяется один и тот же номер порта SCTP.
Когда активный транспортный адрес (комбинация IP-адреса и номера порта) недоступен, пробуются другие адреса удаленного порта из списка возможных транспортных адресов. Любой транспортный адрес может применяться только к одному оконечному пункту SCTP, хотя оконечный пункт может иметь несколько транспортных адресов,
SCTP работает путем установления связей между оконечными пунктами SCTP. Такую связь называется ассоциацией, причем она определяется участвующими в нем оконечными пунктами SCTP и текущим состоянием протокола. Т.о., SCTP-соединение (SCTP association) — это протокольная связь между двумя SCTP-портами, содержащая протокольную информацию о состоянии, включая тэги верификации и активный в данный момент набор порядковых номеров передачи TSN. Два SCTP-порта в любой момент времени не должны иметь между собой более одного SCTP-соединения. Прежде чем приложения двух оконечных пунктов смогут обмениваться информацией, необходимо установить соединение. Когда коммуникация закончена, соединение можно прекратить. Протоколы верхнего уровня ISUР, SCCP, ТСАР и др. не осведомлены о таких соединениях, более того, они не обнаруживают того факта, что сигнальные сообщения переносятся не стандартной МТР, а чем-то иным.
В каждом потоке SCTP производится упорядочение данных. Если фрагмент пакета, принадлежащего некоторому потоку, потерян, то фрагменты этого пакета, следующие за потерянным, будут сохраняться в буфере приемника потока, пока потерянный фрагмент не будет передан источником повторно.
Однако фрагменты пакетов из других потоков могут по-прежнему проходить в приложение верхнего уровня, иначе говоря каждый поток обрабатывается отдельно, так что доставка сообщений одного потока не задерживается из-за ожидания следующего по порядку сообщения другого потока.
Пакет SCTP состоит из общего заголовка и нескольких фрагментов (chunks), как показано на рис.