C cenaly.com
Начать бесплатно

Звонок обрывается: через 30 секунд, через 15–30 минут

Обрыв на 32-й секунде (нет ACK), через 15–30 минут (таймеры сессии), входящие работают только первые минуты после включения — механизм и лечение

12 мин чтения Открыть этот экран в демо
На этой странице 21

Звонок обрывается: через 30 секунд, через 15–30 минут

Обрыв «ровно через столько-то» — это не плохая связь, а таймер: одна из сторон чего-то ждала, не дождалась и честно положила трубку. Поэтому по времени обрыва причину можно назвать почти наверняка: ~32 секунды — не дошло подтверждение начала разговора; ~15 или ~30 минут — не прошло продление разговора; входящие работают только первые минуты — роутер закрыл дорогу к телефону. Ниже — механизм каждого случая словами и что сделать.

Общая настройка телефонов — в обзоре «Настройка SIP-телефонов», остальные симптомы — в диагностике по симптомам.

Сначала проверьте в админке#

  1. Журнал звонков — откройте оборванный звонок. «Разговор» покажет длительность с точностью до секунды: 0:31–0:33 — почерк первого случая, около 15:00 или 29:30 — второго. Там же «Положил трубку» (звонящий, сотрудник или АТС) и «Причина отбоя».
  2. Эхо-тест *43, но долгий: наберите и держите трубку 45 секунд. *43 — тоже звонок, и подтверждение начала разговора в нём проходит тот же путь. Оборвался на 32-й секунде — поломка между телефоном и АТС; продержался — телефон и сеть заведения в порядке, ищите дальше (внешние звонки, оператор связи).
  3. Карточка аппарата → «Работоспособность»: регулярные провалы «связи нет» — роутер закрывает обратный путь к телефону (см. третий случай).
  4. «Позвонить на аппарат» в карточке, через 10 минут после последнего звонка: зазвонил — дорога к телефону жива; молчит при зелёной точке — это роутер.
  5. SIP-трейс на выделенной АТС: повторяющийся 200 OK без ACK, затем BYE — первый случай; BYE после INVITE или UPDATE посреди разговора — второй.

Обрыв через 30–32 секунды#

Почему так бывает#

Начало разговора — это рукопожатие из трёх сообщений: «звоню» (INVITE) — «ответили» (200 OK) — «понял, начинаем» (ACK). Сторона, которая ответила, повторяет своё «ответили», пока не получит «понял». Правило протокола SIP: если «понял» не пришло за 64 × T1 = 64 × 0,5 с = 32 секунды, разговор надо закончить. Голос при этом уже идёт — поэтому полминуты всё нормально, а потом звонок падает сам.

Итак, обрыв на 32-й секунде значит: подтверждение ACK где-то теряется. Почему — от частого к редкому:

  1. SIP ALG на роутере. Роутер переписывает адреса внутри служебных сообщений, и подтверждение уходит не туда или отбрасывается. Первое, что нужно проверить всегда.
  2. Слишком большой пакет. Если в телефоне включены десятки кодеков, описание звонка раздувается больше ~1300 байт, и по UDP оно уходит «кусками» (фрагментами). Многие роутеры и межсетевые экраны фрагменты молча выбрасывают — теряется то самое сообщение. Протокол SIP прямо требует для таких сообщений перейти на TCP.
  3. Внутренний адрес в сообщениях. Телефон пишет о себе внутренний адрес (192.168.x.x), и подтверждение отправляют по нему. Наша АТС это исправляет сама — отвечает туда, откуда реально пришло сообщение, — но у оператора связи такой защиты может не быть: тогда обрываются только внешние звонки.
  4. Двойной 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 секунд) и тестовый звонок; дальше — только если не помогло.

  1. Выключите SIP ALG на роутере («SIP Helper», «SIP Passthrough», «ALG для SIP») и перезагрузите роутер. Где он у популярных марок — «Сеть, роутер и интернет».
  2. Оставьте в телефоне три кодека — G.711 PCMA, G.711 PCMU и G.722, — остальные выключите: сообщения станут короче и перестанут дробиться.
  3. Переключите транспорт на TCP (порт тот же, 5060), если шаг 2 не помог: TCP сам режет длинные сообщения правильно, и фрагментация пропадает. Наша АТС принимает и UDP, и TCP.
  4. Обрываются только внешние звонки, а *43 и внутренние держатся — поломка между АТС и оператором связи. Пришлите время нескольких оборванных звонков в поддержку.
  5. Уберите двойной NAT — переведите роутер провайдера в режим моста или подключите телефон прямо в него.

Обрыв через 15 или 30 минут#

Почему так бывает#

Во время долгого разговора стороны время от времени подтверждают, что разговор ещё идёт — это таймеры сессии. Интервал договаривается в начале звонка; одна сторона обязуется «продлевать» разговор на середине интервала, другая — ждёт продления. На нашей АТС таймеры сессии включены с интервалом 1800 секунд (30 минут); нужны они, чтобы разговор, связь в котором пропала молча, не висел часами и не занимал линию.

Отсюда два почерка:

  • около 15 минут — на середине интервала продление отправили, но оно не прошло: сторона его отвергла или не получила ответа;
  • около 29,5 минут — продления не было вовсе, и сторона, которая его ждала, положила трубку чуть раньше истечения интервала.

Почему продление не проходит:

  1. Роутер закрыл путь служебных сообщений. Голос во время разговора идёт непрерывно, а служебные сообщения — молчат. Если у телефона выключен keep-alive, роутер через несколько минут закрывает «дверь» для служебных сообщений — и продление от АТС к телефону уже не доходит.
  2. Телефон не понимает способ продления или отвергает его — старая прошивка, включён «Session Timer» с нестандартными параметрами.
  3. SIP ALG портит сообщение продления.
  4. Таймер оператора связи — если обрываются только внешние звонки и всегда на одной минуте.

АТС включает таймеры в разговоре, только если их поддерживает и телефон ⚠️ 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» («Таймеры сессии», «Обновление сессии, секунд»). Менять их без требования провайдера не нужно.

Что сделать#

  1. Включите keep-alive в телефоне — он держит путь служебных сообщений открытым и во время разговора. Yealink: Account → Advanced → Keep Alive Type (Default или Options) и Keep Alive Interval — 30 с (заводское значение).
  2. Выключите SIP ALG на роутере.
  3. Если в телефоне включали «Session Timer» — верните заводское значение (выкл.) или поставьте интервал 1800 с: Yealink — Account → Advanced → Session Timer / Session Expires; Grandstream — Account → SIP Settings → Session Timer (Enable Session Timer, Session Expiration).
  4. Обновите прошивку телефона — ошибки продления разговора часто исправлены в новых версиях.
  5. Рвутся только внешние звонки, в одну и ту же минуту — пришлите время звонков в поддержку: мы сверим таймеры с оператором связи.

Входящие работают только первые минуты после включения#

Почему так бывает#

Телефон стоит за роутером, и АТС может достучаться до него только через «дверь», которую телефон открыл своим последним сообщением. Роутер держит такие двери недолго — у бытовых роутеров от полуминуты до нескольких минут тишины — и потом закрывает. Пока телефон часто что-то отправляет (регистрация сразу после включения, keep-alive), дверь открыта. Затих — закрылась, и входящий звонок от АТС упирается в роутер.

Точка в админке при этом может оставаться зелёной: регистрацию телефон обновляет сам, изнутри, и она проходит, а вот войти к телефону снаружи уже нельзя. Перезагрузка «лечит», потому что заново открывает дверь, — на время.

Наша АТС со своей стороны каждые 60 секунд проверяет каждый аппарат запросом «ты на связи?»: этот встречный пакет тоже держит дверь открытой — но только если роутер закрывает её дольше, чем за минуту. Не ответил аппарат — АТС считает его недоступным, точка гаснет, и в «Работоспособности» появляется провал.

Что сделать#

После каждого шага проверьте входящий через 10 минут простоя (кнопкой «Позвонить на аппарат» или с соседнего добавочного); дальше — только если не помогло.

  1. Включите keep-alive в телефоне с интервалом 20–30 секунд. Yealink: Account → Advanced → Keep Alive Type / Keep Alive Interval (заводские Default и 30 с); у Fanvil — Keep Alive Type в дополнительных настройках линии.
  2. Выключите SIP ALG на роутере — он тоже любит «забывать» двери.
  3. Сократите срок регистрации в телефоне (Expires / Register Expiration) до 60–120 секунд — телефон будет чаще сам открывать дверь. Меньше 60 наша АТС не примет (423 Interval Too Brief).
  4. На выделенной АТС можно проверять аппараты чаще: «Тонкие настройки SIP» → «Проверка связи, секунд» — 20–30 вместо 60. Это держит дверь со стороны АТС, но добавляет служебного трафика; keep-alive телефона надёжнее.
  5. Двойной NAT (роутер провайдера + свой) — дверей две, и закрываются они по-разному: уберите одну — «Сеть, роутер и интернет».

Обрыв при переходе с Wi-Fi на мобильный интернет#

Почему так бывает#

Wi-Fi заведения и мобильный интернет — это два разных адреса. Разговор начинался с одного, и АТС в начале разговора запомнила, откуда идёт голос: из соображений безопасности она принимает звук только с этого адреса. Когда смартфон переключается на мобильную сеть, голос начинает приходить с нового адреса — и для АТС это уже чужой поток, а служебные сообщения продолжают уходить на старый адрес, которого больше нет. Разговор, начатый в одной сети, при переходе в другую почти всегда рвётся. Это ограничение самой технологии, а не поломка.

Вторая сторона того же: пока смартфон переключается, софтфон теряет регистрацию, и входящие в эти секунды не доходят. Android вдобавок усыпляет фоновые приложения — подробнее в обзоре, раздел про программные телефоны.

Что сделать#

  1. Во время разговора не меняйте сеть: заканчивайте звонок до выхода из зоны Wi-Fi.
  2. Выключите на смартфоне автоматическое переключение с плохого Wi-Fi на мобильную сеть (на iPhone — «Помощь Wi-Fi», на Android — «переключаться на мобильную сеть» в настройках Wi-Fi): сейчас оно рвёт разговор на пороге кафе.
  3. Разрешите софтфону работу в фоне и снимите для него экономию батареи — тогда он быстрее регистрируется заново после смены сети.
  4. Там, где звонок терять нельзя (стойка, ресепшн), ставьте настольный телефон или 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.

Связанные разделы#

Источники#

  • 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 с)
Была ли статья полезной?