# SMPP enquire_link, оконный режим и троттлинг

> enquire_link (0x00000015) — это лёгкий keepalive, подтверждающий, что связанная сессия SMPP по-прежнему исправна поверх TCP. Пропускная способность определяется двумя ограничениями: окном (сколько PDU может оставаться неподтверждёнными одновременно) и потолком TPS провайдера. Превышение скорости возвращает ESME_RTHROTTLED (0x00000058); решение — выдержать паузу.

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

Как SMPP поддерживает сессию с помощью enquire_link, как окно ограничивает число неподтверждённых PDU и как ESME_RTHROTTLED и TPS на каждый bind определяют вашу реальную пропускную способность.

## Keepalive enquire_link

Связанная сессия SMPP может простаивать долгие периоды, а полуоткрытое TCP-соединение выглядит живым на уровне сокета. enquire_link решает это: любая из сторон отправляет его по таймеру простоя (обычно каждые 30–60 секунд) и ожидает быстрый enquire_link_resp. Пропущенный ответ означает, что сессия мертва — разорвите TCP-соединение и переподключитесь с выдержкой. Это единственный надёжный способ обнаружить молча оборванный канал.

*Обмен keepalive*

```text
ESME → SMSC  enquire_link      seq=1200
SMSC → ESME  enquire_link_resp seq=1200  status=ESME_ROK
  (no response within timeout ⇒ treat session as dead, reconnect)
```

## Окно: неподтверждённые PDU в полёте

SMPP асинхронен: вы можете отправить множество PDU submit_sm до прихода их submit_sm_resp. Размер окна ограничивает, сколько их может оставаться неподтверждёнными одновременно. Когда окно заполнено, нужно приостановить отправку, пока ответ не освободит место. Отправка сверх окна — одна из главных причин троттлинга и потери PDU. Размер окна согласуется с провайдером — единого протокольного значения по умолчанию нет.

## Троттлинг и TPS

Отдельно от окна провайдер накладывает максимальную скорость сообщений — транзакций в секунду (TPS) — на каждый bind или на учётную запись. Её превышение возвращает ESME_RTHROTTLED (0x00000058). Правильная реакция — замедлиться: приостановить, выдержать паузу с джиттером и возобновить ниже потолка. Никогда не повторяйте PDU с троттлингом немедленно и не открывайте дополнительные bind в обход лимита — и то и другое грозит блокировкой учётной записи. В v5.0 SMSC может дополнительно сообщать о перегрузке через TLV congestion_state, чтобы ESME могли упреждающе замедлиться.

*Три ограничения, формирующие пропускную способность*

| Лимит | Регулирует | Сигнал превышения |
|---|---|---|
| Размер окна | Неподтверждённые PDU в пути | Обратное давление (backpressure) / отброшенные PDU |
| Порог TPS | Сообщений в секунду | ESME_RTHROTTLED (0x58) |
| Количество bind-сессий | Параллельные сессии | Bind отклонён / действие с учётной записью |

## Настройка для устойчивой пропускной способности

Реальная пропускная способность примерно равна размеру окна, делённому на задержку кругового обхода, и ограничена сверху потолком TPS. Большее окно помогает на каналах с высокой задержкой; больше bind помогают только если провайдер их выделяет. Отслеживайте заполнение окна, задержку отправки/ответа и долю ошибок троттлинга и воспринимайте рост доли ESME_RTHROTTLED как сигнал снизить скорость отправки, а не наращивать её.

## Частые вопросы

### Как часто отправлять enquire_link?

Обычно каждые 30–60 секунд по таймеру простоя. Отправляйте его, когда сессия была тихой, и считайте отсутствие enquire_link_resp в пределах вашего тайм-аута признаком мёртвой сессии, требующей переподключения.

### Что такое размер окна в SMPP?

Окно — это максимальное число PDU, которые могут оставаться незавершёнными (отправленными, но ещё не подтверждёнными) одновременно. Оно согласуется с провайдером, а не фиксируется протоколом; приостанавливайте отправку, когда окно заполнено.

### Как исправить ESME_RTHROTTLED?

Снизьте скорость отправки. Приостановите, выдержите паузу с джиттером и возобновите ниже потолка TPS провайдера. Не повторяйте немедленно и не открывайте дополнительные bind в обход лимита — и то и другое может привести к более жёсткому троттлингу или блокировке учётной записи.

### Увеличивает ли большее окно мой TPS?

До определённого предела. Пропускная способность примерно равна размеру окна, делённому на время кругового обхода, но она всё равно ограничена потолком TPS провайдера. Большее окно в основном помогает скрыть задержку на каналах с высоким RTT.

### Что такое congestion_state в SMPP v5.0?

v5.0 добавляет TLV congestion_state, позволяющий SMSC сообщать степень своей загрузки (0–100). Кооперативный ESME читает его и упреждающе замедляется, не доводя до жёсткого троттлинга, сглаживая пропускную способность под нагрузкой.

## Источники

- [SMPP v3.4 specification — §4.11 enquire_link](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification — congestion state](https://smpp.org/SMPP_v5.pdf)

## См. также

- [Коды ошибок command_status в SMPP](https://www.broadnet.me/ru/reference/smpp-command-status-errors)
- [Операции bind в SMPP](https://www.broadnet.me/ru/reference/smpp-bind-operations)
- [Лучшие практики интеграции SMPP](https://www.broadnet.me/ru/reference/smpp-integration-best-practices)
- [Поиск кодов ошибок SMPP (бесплатный инструмент)](https://www.broadnet.me/ru/tools/smpp-error-codes)
- [Чек-лист интеграции SMPP (руководство)](https://www.broadnet.me/ru/guides/smpp-integration-checklist)
