Звонок обрывается: через 30 секунд, через 15–30 минут
Обрыв «ровно через столько-то» — это не плохая связь, а таймер: одна из сторон чего-то ждала, не дождалась и честно положила трубку. Поэтому по времени обрыва причину можно назвать почти наверняка: ~32 секунды — не дошло подтверждение начала разговора; ~15 или ~30 минут — не прошло продление разговора; входящие работают только первые минуты — роутер закрыл дорогу к телефону. Ниже — механизм каждого случая словами и что сделать.
Общая настройка телефонов — в обзоре «Настройка SIP-телефонов», остальные симптомы — в диагностике по симптомам.
Сначала проверьте в админке#
- Журнал звонков — откройте оборванный звонок. «Разговор» покажет длительность с точностью до секунды: 0:31–0:33 — почерк первого случая, около 15:00 или 29:30 — второго. Там же «Положил трубку» (звонящий, сотрудник или АТС) и «Причина отбоя».
- Эхо-тест
*43, но долгий: наберите и держите трубку 45 секунд.*43— тоже звонок, и подтверждение начала разговора в нём проходит тот же путь. Оборвался на 32-й секунде — поломка между телефоном и АТС; продержался — телефон и сеть заведения в порядке, ищите дальше (внешние звонки, оператор связи). - Карточка аппарата → «Работоспособность»: регулярные провалы «связи нет» — роутер закрывает обратный путь к телефону (см. третий случай).
- «Позвонить на аппарат» в карточке, через 10 минут после последнего звонка: зазвонил — дорога к телефону жива; молчит при зелёной точке — это роутер.
- SIP-трейс на выделенной АТС: повторяющийся
200 OKбезACK, затемBYE— первый случай;BYEпослеINVITEилиUPDATEпосреди разговора — второй.
Обрыв через 30–32 секунды#
Почему так бывает#
Начало разговора — это рукопожатие из трёх сообщений: «звоню» (INVITE) — «ответили» (200 OK) — «понял, начинаем» (ACK). Сторона, которая ответила, повторяет своё «ответили», пока не получит «понял». Правило протокола SIP: если «понял» не пришло за 64 × T1 = 64 × 0,5 с = 32 секунды, разговор надо закончить. Голос при этом уже идёт — поэтому полминуты всё нормально, а потом звонок падает сам.
Итак, обрыв на 32-й секунде значит: подтверждение ACK где-то теряется. Почему — от частого к редкому:
- SIP ALG на роутере. Роутер переписывает адреса внутри служебных сообщений, и подтверждение уходит не туда или отбрасывается. Первое, что нужно проверить всегда.
- Слишком большой пакет. Если в телефоне включены десятки кодеков, описание звонка раздувается больше ~1300 байт, и по UDP оно уходит «кусками» (фрагментами). Многие роутеры и межсетевые экраны фрагменты молча выбрасывают — теряется то самое сообщение. Протокол SIP прямо требует для таких сообщений перейти на TCP.
- Внутренний адрес в сообщениях. Телефон пишет о себе внутренний адрес (
192.168.x.x), и подтверждение отправляют по нему. Наша АТС это исправляет сама — отвечает туда, откуда реально пришло сообщение, — но у оператора связи такой защиты может не быть: тогда обрываются только внешние звонки. - Двойной NAT или строгий межсетевой экран, который пропускает первые сообщения звонка и режет последующие.
Для администратора сети: какая сторона кладёт трубку
По RFC 3261 (§13.3.1.4) сторона, ответившая 200 OK, повторяет его с интервалом от T1 до T2 и через 64 × T1 без ACK завершает сессию запросом BYE; T1 по умолчанию — 500 мс (§17.1.1.1), отсюда 32 секунды.
- Входящий звонок на телефон:
200 OKшлёт телефон,ACK— АТС. ПотерялсяACKпо пути к телефону — трубку кладёт телефон. - Исходящий с телефона и
*43:200 OKшлёт АТС,ACK— телефон. ПотерялсяACKпо пути к АТС — трубку кладёт АТС. - Фрагментация: RFC 3261 §18.1.1 — если запрос длиннее 1300 байт (или в пределах 200 байт от MTU пути), клиент должен отправлять его по TCP с контролем перегрузки. Наша АТС принимает TCP на том же порту 5060.
Что сделать#
После каждого шага повторите долгий *43 (45 секунд) и тестовый звонок; дальше — только если не помогло.
- Выключите SIP ALG на роутере («SIP Helper», «SIP Passthrough», «ALG для SIP») и перезагрузите роутер. Где он у популярных марок — «Сеть, роутер и интернет».
- Оставьте в телефоне три кодека — G.711 PCMA, G.711 PCMU и G.722, — остальные выключите: сообщения станут короче и перестанут дробиться.
- Переключите транспорт на TCP (порт тот же, 5060), если шаг 2 не помог: TCP сам режет длинные сообщения правильно, и фрагментация пропадает. Наша АТС принимает и UDP, и TCP.
- Обрываются только внешние звонки, а
*43и внутренние держатся — поломка между АТС и оператором связи. Пришлите время нескольких оборванных звонков в поддержку. - Уберите двойной NAT — переведите роутер провайдера в режим моста или подключите телефон прямо в него.
Обрыв через 15 или 30 минут#
Почему так бывает#
Во время долгого разговора стороны время от времени подтверждают, что разговор ещё идёт — это таймеры сессии. Интервал договаривается в начале звонка; одна сторона обязуется «продлевать» разговор на середине интервала, другая — ждёт продления. На нашей АТС таймеры сессии включены с интервалом 1800 секунд (30 минут); нужны они, чтобы разговор, связь в котором пропала молча, не висел часами и не занимал линию.
Отсюда два почерка:
- около 15 минут — на середине интервала продление отправили, но оно не прошло: сторона его отвергла или не получила ответа;
- около 29,5 минут — продления не было вовсе, и сторона, которая его ждала, положила трубку чуть раньше истечения интервала.
Почему продление не проходит:
- Роутер закрыл путь служебных сообщений. Голос во время разговора идёт непрерывно, а служебные сообщения — молчат. Если у телефона выключен keep-alive, роутер через несколько минут закрывает «дверь» для служебных сообщений — и продление от АТС к телефону уже не доходит.
- Телефон не понимает способ продления или отвергает его — старая прошивка, включён «Session Timer» с нестандартными параметрами.
- SIP ALG портит сообщение продления.
- Таймер оператора связи — если обрываются только внешние звонки и всегда на одной минуте.
АТС включает таймеры в разговоре, только если их поддерживает и телефон ⚠️ verify. У большинства настольных телефонов «Session Timer» с завода выключен (у Yealink и Grandstream — по документации), и тогда таймеров в разговоре нет вовсе.
Для администратора сети: значения на стороне АТС
timers=yes— таймеры поддерживаются;timers_sess_expires=1800— интервал 1800 с;timers_min_se=90— меньше 90 с АТС не примет (shared/sip/advanced-options.json, группаprotocol).- По RFC 4028 продление отправляется на середине интервала (900 с), а сторона, не получившая его, завершает сессию
BYEза min(32 с, интервал / 3) до истечения — около 1768 с. - Обрыва по тишине АТС не делает (
rtp_timeout=0), поэтому «разговор без звука» сам по себе не обрывается. - На выделенной АТС те же значения — в «Тонких настройках SIP» («Таймеры сессии», «Обновление сессии, секунд»). Менять их без требования провайдера не нужно.
Что сделать#
- Включите keep-alive в телефоне — он держит путь служебных сообщений открытым и во время разговора. Yealink: Account → Advanced → Keep Alive Type (Default или Options) и Keep Alive Interval — 30 с (заводское значение).
- Выключите SIP ALG на роутере.
- Если в телефоне включали «Session Timer» — верните заводское значение (выкл.) или поставьте интервал 1800 с: Yealink — Account → Advanced → Session Timer / Session Expires; Grandstream — Account → SIP Settings → Session Timer (Enable Session Timer, Session Expiration).
- Обновите прошивку телефона — ошибки продления разговора часто исправлены в новых версиях.
- Рвутся только внешние звонки, в одну и ту же минуту — пришлите время звонков в поддержку: мы сверим таймеры с оператором связи.
Входящие работают только первые минуты после включения#
Почему так бывает#
Телефон стоит за роутером, и АТС может достучаться до него только через «дверь», которую телефон открыл своим последним сообщением. Роутер держит такие двери недолго — у бытовых роутеров от полуминуты до нескольких минут тишины — и потом закрывает. Пока телефон часто что-то отправляет (регистрация сразу после включения, keep-alive), дверь открыта. Затих — закрылась, и входящий звонок от АТС упирается в роутер.
Точка в админке при этом может оставаться зелёной: регистрацию телефон обновляет сам, изнутри, и она проходит, а вот войти к телефону снаружи уже нельзя. Перезагрузка «лечит», потому что заново открывает дверь, — на время.
Наша АТС со своей стороны каждые 60 секунд проверяет каждый аппарат запросом «ты на связи?»: этот встречный пакет тоже держит дверь открытой — но только если роутер закрывает её дольше, чем за минуту. Не ответил аппарат — АТС считает его недоступным, точка гаснет, и в «Работоспособности» появляется провал.
Что сделать#
После каждого шага проверьте входящий через 10 минут простоя (кнопкой «Позвонить на аппарат» или с соседнего добавочного); дальше — только если не помогло.
- Включите keep-alive в телефоне с интервалом 20–30 секунд. Yealink: Account → Advanced → Keep Alive Type / Keep Alive Interval (заводские Default и 30 с); у Fanvil — Keep Alive Type в дополнительных настройках линии.
- Выключите SIP ALG на роутере — он тоже любит «забывать» двери.
- Сократите срок регистрации в телефоне (Expires / Register Expiration) до 60–120 секунд — телефон будет чаще сам открывать дверь. Меньше 60 наша АТС не примет (
423 Interval Too Brief). - На выделенной АТС можно проверять аппараты чаще: «Тонкие настройки SIP» → «Проверка связи, секунд» — 20–30 вместо 60. Это держит дверь со стороны АТС, но добавляет служебного трафика; keep-alive телефона надёжнее.
- Двойной NAT (роутер провайдера + свой) — дверей две, и закрываются они по-разному: уберите одну — «Сеть, роутер и интернет».
Обрыв при переходе с Wi-Fi на мобильный интернет#
Почему так бывает#
Wi-Fi заведения и мобильный интернет — это два разных адреса. Разговор начинался с одного, и АТС в начале разговора запомнила, откуда идёт голос: из соображений безопасности она принимает звук только с этого адреса. Когда смартфон переключается на мобильную сеть, голос начинает приходить с нового адреса — и для АТС это уже чужой поток, а служебные сообщения продолжают уходить на старый адрес, которого больше нет. Разговор, начатый в одной сети, при переходе в другую почти всегда рвётся. Это ограничение самой технологии, а не поломка.
Вторая сторона того же: пока смартфон переключается, софтфон теряет регистрацию, и входящие в эти секунды не доходят. Android вдобавок усыпляет фоновые приложения — подробнее в обзоре, раздел про программные телефоны.
Что сделать#
- Во время разговора не меняйте сеть: заканчивайте звонок до выхода из зоны Wi-Fi.
- Выключите на смартфоне автоматическое переключение с плохого Wi-Fi на мобильную сеть (на iPhone — «Помощь Wi-Fi», на Android — «переключаться на мобильную сеть» в настройках Wi-Fi): сейчас оно рвёт разговор на пороге кафе.
- Разрешите софтфону работу в фоне и снимите для него экономию батареи — тогда он быстрее регистрируется заново после смены сети.
- Там, где звонок терять нельзя (стойка, ресепшн), ставьте настольный телефон или DECT-трубку, а не смартфон.
Что прислать в поддержку#
- дату и время нескольких оборванных звонков до минуты, номера и добавочный;
- через сколько обрывается (по журналу — «Разговор») и всегда ли одинаково;
- обрываются все звонки или только внешние; держится ли долгий
*43(45 секунд); - модель и прошивку телефона (строка из тега аппарата), включены ли в нём keep-alive и Session Timer;
- модель роутера, выключен ли SIP ALG, есть ли второй роутер провайдера;
- на выделенной АТС — текст SIP-трейса повторённого обрыва.
Как написать нам — «Поддержка».
Частые вопросы#
Почему обрыв именно на 32-й секунде, а не на 30-й и не на 40-й?#
Потому что это число заложено в сам протокол SIP: подтверждение начала разговора ждут 64 интервала по полсекунды — 32 секунды. Если у вас «около 30 секунд» и каждый раз одинаково — это оно, даже если секундомер показывал 31 или 33: часть времени ушла на гудки и ответ.
SIP ALG выключен, а обрыв на 30-й секунде остался — что ещё?#
Проверьте, что ALG выключен на всех роутерах по пути (у провайдерского роутера он часто свой), оставьте в телефоне три кодека и попробуйте транспорт TCP. Если обрываются только внешние звонки, а *43 держится 45 секунд, — дело на участке к оператору связи, пришлите время звонков.
Точка зелёная, но входящие не приходят — это тоже «обрыв»?#
Это тот же механизм, что и в разделе про входящие первые минуты: регистрация обновляется изнутри, а дверь к телефону снаружи уже закрыта. Проверка — «Позвонить на аппарат» через 10 минут простоя; лечение — keep-alive в телефоне.
Можно просто выключить таймеры сессии на АТС?#
Можно (на выделенной АТС, «Тонкие настройки SIP»), но это лечит симптом, а не причину: продление не проходит, потому что путь служебных сообщений закрыт или испорчен, и тот же путь понадобится для перевода звонка и удержания. К тому же без таймеров оборвавшиеся молча разговоры будут висеть часами и занимать линии. Сначала keep-alive и SIP ALG.
Связанные разделы#
- Телефон не работает: диагностика по симптомам — в том числе «нет входящих при работающих исходящих»
- Нет звука, слышно в одну сторону, эхо, «робот»
- Не регистрируется: надписи и коды ошибок — «регистрируется и пропадает»,
423 Interval Too Brief - Сеть, роутер и интернет для телефонии — где выключить SIP ALG, двойной NAT
- Настройка SIP-телефонов — сеть заведения, проверка качества связи
- Журнал звонков и SIP-трейс
Источники#
- RFC 3261 — SIP: повтор
200 OKдо полученияACKи завершение сессии через 64 × T1 (§13.3.1.4), T1 = 500 мс (§17.1.1.1), переход на TCP для сообщений длиннее 1300 байт (§18.1.1) — https://www.rfc-editor.org/rfc/rfc3261 - RFC 4028 — Session Timers: продление на середине интервала,
BYEза min(32 с, интервал / 3) до истечения — https://www.rfc-editor.org/rfc/rfc4028 - Yealink SIP-T2/T3/T4/T5/CP920 Administrator Guide V86.60 — Keep Alive Type / Interval (заводские Default, 30 с), Session Timer (заводское — выключен; Session Expires 1800 с; обновление на половине интервала)
- Grandstream GRP261x/262x/263x Administration Guide — Session Timer: Enable Session Timer (заводское «No»), Session Expiration, Min-SE — https://documentation.grandstream.com/knowledge-base/grp261x-grp262x-grp263x-series-administration-guide/
- Zoiper 5 User Guide v1.0.7 — UDP и ограничение размера пакета, NAT-таймауты роутера — https://www.zoiper.com/pdf/User%20Guide%20Zoiper%205%20v.1.0.7.pdf
- Код АТС:
shared/sip/advanced-options.json(timers=yes,timers_sess_expires=1800,timers_min_se=90,qualify_frequency=60,minimum_expiration=60,rtp_timeout=0,force_rport,rewrite_contact),sip-edge/asterisk/rtp.conf(strictrtp=yes),sip-edge/sipsync/linecheck.go(эхо-тест*43, потолок проверки 300 с)