BroadNet
SMPPСессия

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

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

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

СхемаSMPP-сессия между вашей платформой и BroadNet
Ваша платформа (ESME)
BroadNet SMSC
Одно постоянное TCP/TLS-соединение
  1. bind_transceiverОткрыть и аутентифицировать сессию
  2. bind_transceiver_respСессия принята
  3. submit_smОтправить сообщение
  4. submit_sm_respПринято, возвращен ID сообщения
  5. deliver_smПодтверждение доставки или входящее сообщение
  6. deliver_sm_respПодтверждено
  7. enquire_linkKeepalive в режиме ожидания
§01

Keepalive enquire_link

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

Обмен keepalivetext
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)
§02

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

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

§03

Троттлинг и TPS

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

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

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

Реальная пропускная способность примерно равна размеру окна, делённому на задержку кругового обхода, и ограничена сверху потолком 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 читает его и упреждающе замедляется, не доводя до жёсткого троттлинга, сглаживая пропускную способность под нагрузкой.

Ссылки

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

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

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

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

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