# SCTP: Stream Control Transmission Protocol

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

- Канонический URL: https://www.broadnet.me/ru/reference/sctp-stream-control-transmission-protocol
- Язык: ru
- Последнее обновление: 2026-07-18
- Издатель: BroadNet (https://www.broadnet.me)

Как работает SCTP и почему SIGTRAN использует его: доставка, ориентированная на сообщения, мультипотоковость против блокировки в начале очереди, multi-homing для переключения путей, чанковый формат пакета и чем он отличается от TCP.

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

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

*SCTP против TCP*

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

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

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

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

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

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

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

*Структура пакета SCTP*

```text
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 ]
```

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

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

*Распространённые типы чанков SCTP*

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

## Источники

- [IETF RFC 4960 — Stream Control Transmission Protocol](https://datatracker.ietf.org/doc/html/rfc4960)
- [IETF RFC 3286 — Introduction to SCTP](https://datatracker.ietf.org/doc/html/rfc3286)

## См. также

- [Обзор SIGTRAN](https://www.broadnet.me/ru/reference/sigtran-overview)
- [M3UA: адаптация пользователей MTP3](https://www.broadnet.me/ru/reference/m3ua-mtp3-user-adaptation)
- [Архитектура развёртывания SIGTRAN](https://www.broadnet.me/ru/reference/sigtran-deployment-architecture)
- [SS7 против SIGTRAN](https://www.broadnet.me/ru/reference/ss7-vs-sigtran)
- [Платформа сигнализации и CDR](https://www.broadnet.me/ru/platforms/signaling-cdr)
