Обрыв связи в Softphone.Pro: тайм-аут Session-Expires (RFC 4028)
Архитектура SIP сессий и симптомы обрыва
Проблема, когда звонок в софтфоне Softphone.Pro (или любом другом SIP-клиенте) обрывается ровно через определенный промежуток времени (чаще всего 15 или 30 минут), связана с механизмом SIP Session Timers (RFC 4028). Этот таймер используется SIP-сервером (PBX) для проверки, жив ли клиент. Если клиент за NAT не отвечает на Re-INVITE или UPDATE запросы от сервера из-за закрытия UDP-порта маршрутизатором, сервер считает сессию мертвой и отправляет пакет BYE. Бизнес-риски: обрыв важных переговоров, потеря клиентов колл-центра, искажение статистики CDR.
Анализ SIP-дампа при обрыве
| Тип пакета | Направление | Причина возникновения |
|---|---|---|
Re-INVITE / UPDATE | PBX -> Softphone | Сервер запрашивает подтверждение сессии по истечении половины тайм-аута (например, через 900 сек). |
408 Request Timeout | PBX (Внутренний лог) | Клиент не ответил на Re-INVITE, так как NAT-маршрутизатор закрыл UDP-трансляцию. |
BYE | PBX -> Softphone | Сервер принудительно завершает диалог. |
Устранение обрывов (Настройка Softphone.Pro и АТС)
Сценарий 1: Настройка Keep-Alive в Softphone.Pro
Чтобы NAT-маршрутизатор не закрывал порт, клиент должен регулярно отправлять «пинги».
- Откройте Softphone.Pro, перейдите в Настройки -> Учетные записи SIP.
- Выберите нужный аккаунт и перейдите на вкладку Дополнительные.
- Включите опцию Поддерживать NAT соединение (Keep-Alive).
- Установите интервал
20или30секунд. - Убедитесь, что протокол транспорта (Transport) установлен на TCP, если это поддерживает ваша АТС (TCP-сессии NAT держит дольше, чем UDP).
Сценарий 2: Отключение/Изменение Session-Timers в Asterisk (PJSIP)
Если проблема массовая, проще скорректировать настройки на стороне АТС.
Настройка эндпоинта PJSIP (pjsip.conf)
[endpoint_name]
timers = no ; Полное отключение таймеров сессии (не рекомендуется для публичных сетей)
; ИЛИ увеличение тайм-аутов
timers = yes
timers_sess_expires = 3600 ; Тайм-аут 1 час
timers_min_se = 90 ; Минимальный порогТиповые ошибки администраторов
- Использование STUN при локальном подключении: Включение STUN-сервера при нахождении софтфона и АТС в одной локальной сети или VPN приводит к подмене локального IP на внешний, ломая маршрутизацию RTP и ломая таймеры.
- Игнорирование ALG на роутерах: Функция SIP ALG на роутерах Mikrotik (SIP Helper) или TP-Link модифицирует заголовки Contact, что часто ломает маршрутизацию Re-INVITE. SIP ALG нужно отключать.
Траблшутинг SIP-протокола за NAT требует анализа дампов трафика (PCAP). Инженеры ITSTM настроят SBC (Session Border Controller), оптимизируют PJSIP/SIP профили и обеспечат 100% стабильность связи для ваших операторов.
Частые вопросы (FAQ)
Почему звонок обрывается ровно через 15 минут?
По умолчанию параметр Session-Expires в Asterisk часто равен 1800 секундам. Проверка сессии (Re-INVITE) инициируется на половине этого времени (900 секунд = 15 минут). Если ответа нет, звонок рвется.
Поможет ли переход с UDP на TCP решить проблему?
Да, в 90% случаев. Маршрутизаторы закрывают трансляции UDP портов при отсутствии трафика (даже при наличии RTP) очень быстро (30-60 сек). TCP-соединения NAT-таблицы держат от 15 минут до нескольких часов.
Как проверить, отправляет ли АТС Re-INVITE?
В консоли Asterisk выполните команду 'pjsip set logger on' и совершите тестовый звонок. Наблюдайте за SIP-сообщениями в логе в момент обрыва.
Нужно ли включать ICE в софтфоне?
Interactive Connectivity Establishment (ICE) полезно использовать, если ваш сервер (PBX) также корректно настроен на поддержку ICE. Иначе это просто добавит лишние SDP-кандидаты в пакет INVITE, что может вызвать ошибки парсинга на старых АТС.