Траблшутинг обрывов звонков по Session-Expires (SIP Session Timers RFC 4028)
- Все телефонные разговоры внезапно обрываются ровно на 15-й, 30-й или 60-й минуте.
- Один из участников посылает
BYEс причинойReason: SIP;cause=408;text="Session Timer Expired". - Входящий вызов отклоняется оператором с ошибкой
422 Session Interval Too Small.
1. Принцип работы SIP Session Timers (RFC 4028)
Session Timers периодически отправляют повторный Re-INVITE или UPDATE внутри диалога для проверки, живы ли участники сессии. Если подтверждение (200 OK) не получено до истечения интервала Session-Expires, сессия принудительно гасится отправкой BYE.
2. Разбор заголовков Session-Expires в дампе
Session-Expires: 1800;refresher=uac
Min-SE: 90
Supported: timer- Session-Expires: общее время жизни сессии в секундах (например, 1800 сек = 30 мин). Половина этого времени (900 сек / 15 мин) — время отправки первого рефреш-запроса.
- refresher: сторона, обязанная слать повторный запрос (
uac— вызывающий,uas— отвечающий). - Min-SE: минимально допустимый интервал сессии.
3. Исправление ошибки 422 Session Interval Too Small
Если оператор возвращает 422, увеличьте значение Min-SE в вашей системе до требуемого оператором:
# Asterisk pjsip.conf
[endpoint-trunk]
timers_min_se = 1800
timers_sess_expires = 18004. Отключение Session Timers при сбойных клиентах
Если софтфон или шлюз не умеет корректно отвечать на Re-INVITE таймера, отключите таймеры на соответствующем endpoint:
# Asterisk pjsip.conf
[legacy-phone]
type=endpoint
timers = no Частые вопросы (FAQ)
Почему вызовы сбрасываются ровно на 15-й минуте при Session-Expires=1800?
Согласно стандарту, сторона-refresher начинает посылать запросы обновления на половине интервала (1800 / 2 = 900 сек = 15 мин). Если фаервол блокирует Re-INVITE, соединение висит до полного тайм-аута и рвется.
Что лучше использовать для рефреша: Re-INVITE или UPDATE?
UPDATE предпочтительнее, так как он легче обрабатывается стеком SIP и не требует повторного согласования медиадескрипторов SDP.
Кто решает, кто будет refresher (UAC или UAS)?
Сторона UAS (отвечающий) в ответе 200 OK окончательно утверждает роль параметра refresher=uac или refresher=uas.
Как NAT влияет на Session Timers?
Если NAT-сессия закрылась раньше, чем подошел таймер рефреша (например, NAT timeout 300 сек, а refresher шлет запрос на 900 сек), Re-INVITE не пройдет снаружи к клиенту.