BroadNet
SIGTRANТранспорт

SCTP: Stream Control Transmission Protocol

Обновлено 3 мин чтенияна основе стандартов
Прямой ответ

SCTP (RFC 4960) — это надёжный, ориентированный на сообщения транспорт, разработанный для сигнализации. В отличие от единого потока байтов TCP, он доставляет дискретные сообщения по нескольким независимым потокам (избегая блокировки в начале очереди) и поддерживает multi-homing — несколько IP-адресов на конечную точку для автоматического переключения путей. SIGTRAN использует его для переноса SS7 поверх IP.

§01

Почему SCTP вместо TCP

Сигнализации SS7 нужна надёжная, упорядоченная доставка с низкой задержкой и быстрым переключением — требования, которым TCP отвечает лишь частично. TCP — это единый поток байтов, поэтому один потерянный сегмент блокирует все последующие байты до его повторной передачи (блокировка в начале очереди), а TCP-соединение привязано к одной паре IP-адресов, поэтому отказ пути разрывает его. SCTP разрабатывался, чтобы устранить оба: он доставляет независимые сообщения по нескольким потокам и привязывает ассоциацию к нескольким адресам для прозрачного переключения. Он также устойчив к SYN-flood-атакам за счёт четырёхстороннего рукопожатия.

SCTP против TCP
СвойствоTCPSCTP
Модель данныхПоток байтовОриентирован на сообщения (сохраняет границы)
ПотокиОдинМного независимых потоков в каждой ассоциации
Блокировка очереди (head-of-line)На протяжении всего соединенияОграничен одним потоком
Адресация конечных точекОдна пара IP-адресовMulti-homing (несколько IP-адресов на конечную точку)
РукопожатиеТрёхстороннее рукопожатие (уязвимо для SYN-flood)4-этапное рукопожатие с подписанным cookie
Режимы доставкиТолько упорядоченнаяУпорядоченная или неупорядоченная доставка для каждого сообщения
§02

Мультипотоковость

Ассоциация SCTP несёт несколько логических потоков, пронумерованных Stream Identifier. Каждый поток упорядочивается независимо с помощью Stream Sequence Number, тогда как единый Transmission Sequence Number (TSN) управляет надёжной доставкой по всей ассоциации. В результате потеря в одном потоке не тормозит остальные — застрявшее сообщение для одного назначения не блокирует сигнализацию для другого. Приложения также могут отправлять сообщения неупорядоченно, когда порядок не требуется, дополнительно снижая задержку.

§03

Multi-homing и переключение

Конечная точка SCTP может привязать несколько IP-адресов — обычно на разных сетевых путях. Один адрес — основной путь; остальные — альтернативные. SCTP непрерывно отслеживает каждый адрес назначения чанками HEARTBEAT, и если основной путь отказывает, он повторно передаёт по альтернативному, не разрывая ассоциацию. Это даёт каналам сигнализации отказоустойчивость операторского класса поверх IP, которой не может обеспечить single-homed TCP-соединение, и это ключевая причина выбора SCTP в SIGTRAN.

§04

Чанковый формат пакета

Пакет SCTP имеет 12-байтовый общий заголовок — порты источника и назначения, 32-битный Verification Tag, защищающий ассоциацию, и контрольную сумму CRC-32c — за которым следует один или несколько чанков. Чанки самоописывающиеся (тип, флаги, длина, значение), и несколько можно объединить в один пакет. Управляющие чанки устанавливают и сопровождают ассоциацию; чанки DATA несут пользовательские сообщения. Эта структура позволяет SCTP эффективно подтверждать, отправлять heartbeat и нести данные в одном пакете.

Структура пакета SCTPtext
Common header (12 bytes):
  Source port (2)  Destination port (2)
  Verification Tag (4)   Checksum CRC-32c (4)
Then 1..n chunks, each:
  Type (1)  Flags (1)  Length (2)  Value (variable)
e.g.  [ DATA chunk (TSN, Stream ID, SSN, payload) ] [ SACK chunk ]
§05

Типы чанков и установление ассоциации

Ассоциация устанавливается четырёхсторонним рукопожатием — INIT, INIT ACK (несущим подписанный state cookie), COOKIE ECHO, COOKIE ACK — что позволяет серверу оставаться без состояния, пока cookie не будет возвращён, отражая SYN-flood-атаки. Данные идут в чанках DATA, подтверждаемых SACK. HEARTBEAT/HEARTBEAT ACK зондируют простаивающие пути. Ассоциация корректно закрывается через SHUTDOWN или резко через ABORT.

Распространённые типы чанков SCTP
ТипЧанкНазначение
0DATAПередача пользовательского сообщения (TSN, Stream ID, SSN, полезная нагрузка)
1 / 2INIT / INIT ACKУстановление ассоциации; INIT ACK передаёт state cookie
3SACKВыборочное подтверждение полученных чанков DATA
4 / 5HEARTBEAT / HEARTBEAT ACKПроверка доступности адреса назначения
6ABORTАварийное немедленное закрытие ассоциации
7 / 8SHUTDOWN / SHUTDOWN ACKКорректное завершение
10 / 11COOKIE ECHO / COOKIE ACKЗавершите четырехстороннее рукопожатие
Часто задаваемые вопросы

Часто задаваемые вопросы

В чём главное преимущество SCTP перед TCP?

Две вещи: мультипотоковость, так что потерянный пакет в одном потоке не блокирует остальные (нет блокировки в начале очереди по всему соединению), и multi-homing, так что конечная точка может использовать несколько IP-адресов и автоматически переключаться при обрыве пути. Оба сильно важны для надёжности сигнализации.

Что такое multi-homing в SCTP?

Multi-homing позволяет одной ассоциации SCTP привязать несколько IP-адресов на конечную точку. Один — основной путь, остальные — альтернативные, отслеживаемые heartbeat. Если основной путь отказывает, SCTP повторно передаёт по альтернативному, не разрывая ассоциацию — резервирование путей, встроенное в транспорт.

Что такое чанк SCTP?

Чанк — это самоописывающаяся единица внутри пакета SCTP с типом, флагами, длиной и значением. Чанки DATA несут пользовательские сообщения; управляющие чанки (INIT, SACK, HEARTBEAT, SHUTDOWN и другие) сопровождают ассоциацию. Несколько чанков можно объединить в один пакет.

Почему SCTP использует четырёхстороннее рукопожатие?

Дополнительный шаг позволяет отвечающей стороне оставаться без состояния, пока она не получит обратно подписанный state cookie (в COOKIE ECHO). Поскольку состояние ассоциации не выделяется, пока cookie не вернётся, SCTP устойчив к атакам истощения ресурсов в стиле SYN-flood, затрагивающим трёхстороннее рукопожатие TCP.

Что такое Verification Tag в SCTP?

32-битное значение в общем заголовке, обмениваемое при установлении ассоциации, которое обе конечные точки должны включать в каждый пакет. Оно подтверждает, что пакет принадлежит текущей ассоциации, защищая от устаревших пакетов и слепых атак инъекцией.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

Запросите тестовый доступ с реальными тестовыми ключами: сначала отправьте их на свой подтвержденный номер, а затем, после утверждения вашей личности отправителя и маршрутов, переходите к использованию в производственной среде более чем в 200 странах.