Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

SIP 100 IP-Телефония и СКУД

SIP 100 Trying: диагностика зависания предварительных ответов и таймеров

Обновлено: 24.08.2026 · Официальная документация ↗
  • После отправки INVITE сервер получает 100 Trying, но дальнейшие ответы (180 Ringing, 200 OK) не поступают.
  • Вызов зависает на 32 секунды и завершается по таймауту 408 Request Timeout или 504 Server Timeout.
  • Абонент слышит абсолютную тишину в трубке после набора номера.
  • Бесконечный цикл маршрутизации (SIP routing loop) между прокси-серверами.

1. Назначение предварительного ответа 100 Trying (RFC 3261 §21.1.1)

Статус 100 Trying — это предварительный hop-by-hop ответ. Его единственная цель — остановить повторную отправку запросов INVITE клиентом (отключить Timer A и перезапустить Timer B) и подтвердить, что следующий узел принял транзакцию в обработку.

2. Анализ зависших транзакций в Asterisk / Kamailio

# Просмотр активных SIP транзакций в Asterisk
asterisk -rx "pjsip show channelstats"
asterisk -rx "core show channels"

Если вызов завис на этапе 100 Trying, снимите дамп на пограничном шлюзе:

sngrep host 192.168.1.50

3. Типовые причины отсутствия ответов после 100 Trying:

  • Зависание AGI/AMI скрипта в Asterisk: диалплан выполняет внешний запрос к медленной CRM или неработающей БД до вызова функции Dial().
  • Сбои DNS SRV / NAPTR: прокси пытается разрешить следующий хост и блокирует стек по тайм-ауту сокета.
  • Односторонняя сетевая блокировка: ответ 180/200 от удаленного узла блокируется межсетевым экраном из-за изменения порта или отсутствия NAT keep-alive.

4. Оптимизация диалплана для предотвращения зависаний

Никогда не выполняйте длительные блокирующие запросы до ответа вызывающему абоненту:

[fast-route]
exten => _XXXX,1,NoOp(Быстрый вызов без блокировок)
 ; Немедленная отправка 180 Ringing вызывающей стороне
 same => n,Ringing()
 ; Асинхронный запуск логики в CRM без блокировки диалплана
 same => n,System(/usr/local/bin/notify_crm.sh ${CALLERID(num)} &)
 same => n,Dial(PJSIP/${EXTEN},25)
 same => n,Hangup()
💡 Практика специалистов: Если вы используете связку Kamailio + Asterisk, убедитесь, что Kamailio вызывает sl_send_reply("100", "Trying") до выполнения тяжелых LRN/ENUM запросов к базам данных, чтобы инициатор вызова не дублировал пакеты INVITE.

Частые вопросы (FAQ)

Является ли SIP 100 ошибкой?

Нет. SIP 100 Trying — это штатный предварительный ответ (Provisional response). Ошибкой является ситуация, когда за 100 Trying не следует ни одного окончательного ответа (18x, 200, 4xx, 5xx).

Пересылается ли 100 Trying через несколько SIP-прокси сквозным образом?

Нет. Статус 100 Trying является строго Hop-by-Hop (действует только между двумя соседними сетевыми узлами) и никогда не должен форвардиться дальше по цепочке.

Через сколько секунд срабатывает тайм-аут, если после 100 Trying ничего не пришло?

Стандартный таймер Timer B / Timer C в протоколе SIP составляет 64*T1 (обычно 32 секунды), после чего транзакция завершается ошибкой 408 Request Timeout.

Может ли 100 Trying содержать тело SDP?

Согласно RFC 3261, статус 100 Trying не может содержать дескриптор SDP (Early media не поддерживается на фазе Trying).

Полезные материалы
Рекомендуем