C cenaly.com
Zacznij za darmo

Połączenie się rozłącza: po 30 sekundach, po 15–30 minutach

Rozłączanie w 32. sekundzie (brak ACK), po 15–30 minutach (timery sesji), połączenia przychodzące działają tylko przez pierwsze minuty po włączeniu — mechanizm i rozwiązanie

12 min read Otwórz ten ekran w demo
On this page 21

Rozmowa się urywa: po 30 sekundach, po 15–30 minutach

Przerwanie „dokładnie po takim a takim czasie” to nie zła jakość łącza, a timer: jedna ze stron na coś czekała, nie doczekała się i uczciwie odłożyła słuchawkę. Dlatego po czasie przerwania przyczynę można wskazać niemal na pewno: ~32 sekundy — nie dotarło potwierdzenie rozpoczęcia rozmowy; ~15 lub ~30 minut — nie przeszło przedłużenie rozmowy; połączenia przychodzące działają tylko przez pierwsze minuty — router zamknął drogę do telefonu. Poniżej — mechanizm każdego przypadku słowami i co zrobić.

Ogólna konfiguracja telefonów — w przeglądzie „Konfiguracja telefonów SIP”, pozostałe objawy — w diagnostyce po objawach.

Najpierw sprawdź w panelu administracyjnym#

  1. Dziennik połączeń — otwórz przerwane połączenie. „Rozmowa” pokaże czas trwania z dokładnością do sekundy: 0:31–0:33 — charakter pierwszego przypadku, około 15:00 lub 29:30 — drugiego. Tam też „Odłożył słuchawkę” (dzwoniący, pracownik lub centrala) i „Przyczyna rozłączenia”.
  2. Test echa *43, ale długi: wybierz i trzymaj słuchawkę 45 sekund. *43 to też połączenie, a potwierdzenie rozpoczęcia rozmowy przechodzi w nim tę samą drogę. Przerwało się w 32. sekundzie — awaria między telefonem a centralą; wytrzymało — telefon i sieć lokalu są w porządku, szukaj dalej (połączenia zewnętrzne, operator sieci).
  3. Karta aparatu → „Sprawność”: regularne błędy „brak połączenia” — router zamyka drogę powrotną do telefonu (patrz trzeci przypadek).
  4. „Zadzwoń na aparat” w karcie, 10 minut po ostatnim połączeniu: zadzwonił — droga do telefonu jest żywa; milczy przy zielonej kropce — to router.
  5. Tracing SIP na dedykowanej centrali: powtarzające się 200 OK bez ACK, potem BYE — pierwszy przypadek; BYE po INVITE lub UPDATE w środku rozmowy — drugi.

Przerwanie po 30–32 sekundach#

Dlaczego tak bywa#

Początek rozmowy to uścisk dłoni z trzech komunikatów: „dzwonię” (INVITE) — „odebrano” (200 OK) — „rozumiem, zaczynamy” (ACK). Strona, która odebrała, powtarza swoje „odebrano”, dopóki nie otrzyma „rozumiem”. Reguła protokołu SIP: jeśli „rozumiem” nie przyszło w ciągu 64 × T1 = 64 × 0,5 s = 32 sekundy, rozmowę trzeba zakończyć. Głos w tym czasie już idzie — dlatego przez pół minuty wszystko jest w porządku, a potem połączenie pada samo.

Zatem przerwanie w 32. sekundzie oznacza: potwierdzenie ACK gdzieś ginie. Dlaczego — od częstego do rzadkiego:

  1. SIP ALG na routerze. Router przepisuje adresy wewnątrz komunikatów sterujących, a potwierdzenie idzie nie tam, gdzie trzeba, albo jest odrzucane. Pierwsza rzecz, którą trzeba sprawdzić zawsze.
  2. Zbyt duży pakiet. Jeśli w telefonie włączonych jest kilkadziesiąt kodeków, opis połączenia rozrasta się powyżej ~1300 bajtów i przez UDP idzie „kawałkami” (fragmentami). Wiele routerów i zapór sieciowych po cichu wyrzuca fragmenty — ginie właśnie ten komunikat. Protokół SIP wprost wymaga dla takich komunikatów przejścia na TCP.
  3. Adres wewnętrzny w komunikatach. Telefon podaje o sobie adres wewnętrzny (192.168.x.x) i potwierdzenie jest wysyłane na niego. Nasza centrala sama to poprawia — odpowiada tam, skąd komunikat naprawdę przyszedł — ale u operatora sieci takiego zabezpieczenia może nie być: wtedy urywają się tylko połączenia zewnętrzne.
  4. Podwójny NAT lub restrykcyjna zapora sieciowa, która przepuszcza pierwsze komunikaty połączenia, a kolejne odcina.
Dla administratora sieci: która strona odkłada słuchawkę

Zgodnie z RFC 3261 (§13.3.1.4) strona, która odpowiedziała 200 OK, powtarza je w odstępie od T1 do T2 i po 64 × T1 bez ACK kończy sesję żądaniem BYE; T1 domyślnie — 500 ms (§17.1.1.1), stąd 32 sekundy.

  • Połączenie przychodzące na telefon: 200 OK wysyła telefon, ACK — centrala. Zgubił się ACK w drodze do telefonu — słuchawkę odkłada telefon.
  • Połączenie wychodzące z telefonu i *43: 200 OK wysyła centrala, ACK — telefon. Zgubił się ACK w drodze do centrali — słuchawkę odkłada centrala.
  • Fragmentacja: RFC 3261 §18.1.1 — jeśli żądanie jest dłuższe niż 1300 bajtów (lub w granicach 200 bajtów od MTU ścieżki), klient powinien wysyłać je przez TCP z kontrolą przeciążenia. Nasza centrala przyjmuje TCP na tym samym porcie 5060.

Co zrobić#

Po każdym kroku powtórz długi *43 (45 sekund) i testowe połączenie; dalej — tylko jeśli nie pomogło.

  1. Wyłącz SIP ALG na routerze („SIP Helper”, „SIP Passthrough”, „ALG dla SIP”) i zrestartuj router. Gdzie go szukać u popularnych marek — „Sieć, router i internet”.
  2. Zostaw w telefonie trzy kodeki — G.711 PCMA, G.711 PCMU i G.722, — pozostałe wyłącz: komunikaty staną się krótsze i przestaną się dzielić.
  3. Przełącz transport na TCP (port ten sam, 5060), jeśli krok 2 nie pomógł: TCP sam dzieli długie komunikaty prawidłowo i fragmentacja znika. Nasza centrala przyjmuje i UDP, i TCP.
  4. Urywają się tylko połączenia zewnętrzne, a *43 i wewnętrzne się trzymają — awaria między centralą a operatorem sieci. Prześlij do wsparcia czas kilku przerwanych połączeń.
  5. Usuń podwójny NAT — przełącz router dostawcy w tryb mostu albo podłącz telefon bezpośrednio do niego.

Zerwanie po 15 lub 30 minutach#

Dlaczego tak bywa#

Podczas długiej rozmowy strony od czasu do czasu potwierdzają, że rozmowa wciąż trwa — to timery sesji. Interwał ustala się na początku połączenia; jedna strona zobowiązuje się „przedłużać” rozmowę w połowie interwału, druga — czeka na przedłużenie. W naszej centrali timery sesji są włączone z interwałem 1800 sekund (30 minut); są potrzebne, aby rozmowa, w której łączność zniknęła po cichu, nie wisiała godzinami i nie zajmowała linii.

Stąd dwa scenariusze:

  • około 15 minut — w połowie interwału przedłużenie zostało wysłane, ale nie przeszło: strona je odrzuciła lub nie otrzymała odpowiedzi;
  • około 29,5 minuty — przedłużenia nie było wcale, a strona, która na nie czekała, odłożyła słuchawkę nieco przed upływem interwału.

Dlaczego przedłużenie nie przechodzi:

  1. Router zamknął drogę komunikatów sygnalizacyjnych. Głos podczas rozmowy płynie nieprzerwanie, a komunikaty sygnalizacyjne — milczą. Jeśli w telefonie wyłączono keep-alive, router po kilku minutach zamyka „drzwi” dla komunikatów sygnalizacyjnych — i przedłużenie z centrali do telefonu już nie dociera.
  2. Telefon nie rozumie sposobu przedłużenia lub je odrzuca — stara wersja oprogramowania, włączony „Session Timer” z niestandardowymi parametrami.
  3. SIP ALG psuje komunikat przedłużenia.
  4. Timer operatora łączności — jeśli zrywane są tylko połączenia zewnętrzne i zawsze w tej samej minucie.

Centrala włącza timery w rozmowie tylko wtedy, gdy obsługuje je również telefon ⚠️ verify. W większości telefonów stacjonarnych „Session Timer” jest fabrycznie wyłączony (w Yealink i Grandstream — zgodnie z dokumentacją), i wtedy timerów w rozmowie nie ma wcale.

Dla administratora sieci: wartości po stronie centrali
  • timers=yes — timery są obsługiwane; timers_sess_expires=1800 — interwał 1800 s; timers_min_se=90 — mniej niż 90 s centrala nie przyjmie (shared/sip/advanced-options.json, grupa protocol).
  • Zgodnie z RFC 4028 przedłużenie jest wysyłane w połowie interwału (900 s), a strona, która go nie otrzymała, kończy sesję BYE na min(32 s, interwał / 3) przed upływem — około 1768 s.
  • Centrala nie zrywa połączenia z powodu ciszy (rtp_timeout=0), dlatego „rozmowa bez dźwięku” sama w sobie się nie zrywa.
  • W dedykowanej centrali te same wartości są w „Zaawansowanych ustawieniach SIP” („Timery sesji”, „Odświeżanie sesji, sekund”). Nie trzeba ich zmieniać bez wymagania od dostawcy.

Co zrobić#

  1. Włącz keep-alive w telefonie — utrzymuje on drogę komunikatów sygnalizacyjnych otwartą również podczas rozmowy. Yealink: Account → Advanced → Keep Alive Type (Default lub Options) i Keep Alive Interval — 30 s (wartość fabryczna).
  2. Wyłącz SIP ALG w routerze.
  3. Jeśli w telefonie włączano „Session Timer” — przywróć wartość fabryczną (wył.) lub ustaw interwał 1800 s: Yealink — Account → Advanced → Session Timer / Session Expires; Grandstream — Account → SIP Settings → Session Timer (Enable Session Timer, Session Expiration).
  4. Zaktualizuj oprogramowanie telefonu — błędy przedłużania rozmowy są często poprawione w nowych wersjach.
  5. Zrywane są tylko połączenia zewnętrzne, w tej samej minucie — prześlij czas połączeń do wsparcia: zweryfikujemy timery z operatorem łączności.

Połączenia przychodzące działają tylko pierwsze minuty po włączeniu#

Dlaczego tak bywa#

Telefon stoi za routerem, a centrala może się do niego dostać tylko przez „drzwi”, które telefon otworzył swoim ostatnim komunikatem. Router trzyma takie drzwi niedługo — w routerach domowych od pół minuty do kilku minut ciszy — a potem je zamyka. Dopóki telefon często coś wysyła (rejestracja zaraz po włączeniu, keep-alive), drzwi są otwarte. Gdy ucichnie — zamknęły się, a połączenie przychodzące z centrali napotyka router.

Placówka w panelu administracyjnym może przy tym pozostać zielona: rejestrację telefon odświeża sam, od wewnątrz, i ona przechodzi, ale wejść do telefonu z zewnątrz już nie można. Restart „leczy”, bo otwiera drzwi na nowo — na jakiś czas.

Nasza centrala ze swojej strony co 60 sekund sprawdza każde urządzenie zapytaniem „jesteś w kontakcie?”: ten pakiet zwrotny również trzyma drzwi otwarte — ale tylko wtedy, gdy router zamyka je dłużej niż po minucie. Urządzenie nie odpowiedziało — centrala uznaje je za niedostępne, placówka gaśnie, a w „Sprawności” pojawia się przerwa.

Co zrobić#

Po każdym kroku sprawdź połączenie przychodzące po 10 minutach bezczynności (przyciskiem „Zadzwoń na urządzenie” lub z sąsiedniego numeru wewnętrznego); dalej — tylko jeśli nie pomogło.

  1. Włącz keep-alive w telefonie z interwałem 20–30 sekund. Yealink: Account → Advanced → Keep Alive Type / Keep Alive Interval (fabryczne Default i 30 s); w Fanvil — Keep Alive Type w dodatkowych ustawieniach linii.
  2. Wyłącz SIP ALG w routerze — on też lubi „zapominać” drzwi.
  3. Skróć czas rejestracji w telefonie (Expires / Register Expiration) do 60–120 sekund — telefon będzie częściej sam otwierał drzwi. Mniej niż 60 nasza centrala nie przyjmie (423 Interval Too Brief).
  4. W dedykowanej centrali można sprawdzać urządzenia częściej: „Zaawansowane ustawienia SIP” → „Sprawdzanie łączności, sekund” — 20–30 zamiast 60. To trzyma drzwi po stronie centrali, ale dodaje ruch sygnalizacyjny; keep-alive telefonu jest niezawodniejszy.
  5. Podwójny NAT (router dostawcy + własny) — drzwi są dwoje i zamykają się różnie: usuń jedne — „Sieć, router i internet”.

Przerwanie połączenia przy przejściu z Wi-Fi na internet mobilny#

Dlaczego tak się dzieje#

Wi-Fi lokalu i internet mobilny to dwa różne adresy. Rozmowa zaczynała się z jednego, a centrala na początku rozmowy zapamiętała, skąd płynie głos: ze względów bezpieczeństwa przyjmuje dźwięk tylko z tego adresu. Gdy smartfon przełącza się na sieć mobilną, głos zaczyna przychodzić z nowego adresu — dla centrali to już obcy strumień, a komunikaty sygnalizacyjne nadal wysyłane są na stary adres, którego już nie ma. Rozmowa rozpoczęta w jednej sieci przy przejściu do innej niemal zawsze się urywa. To ograniczenie samej technologii, a nie awaria.

Druga strona tego samego: gdy smartfon się przełącza, softfon traci rejestrację i połączenia przychodzące w tych sekundach nie docierają. Android dodatkowo usypia aplikacje działające w tle — więcej w przeglądzie, w sekcji o telefonach programowych.

Co zrobić#

  1. Podczas rozmowy nie zmieniaj sieci: zakończ połączenie, zanim wyjdziesz z zasięgu Wi-Fi.
  2. Wyłącz w smartfonie automatyczne przełączanie ze słabego Wi-Fi na sieć mobilną (na iPhone — „Pomoc Wi-Fi”, na Android — „przełączaj na sieć mobilną” w ustawieniach Wi-Fi): teraz to ono urywa rozmowę na progu kawiarni.
  3. Zezwól softfonowi na pracę w tle i wyłącz dla niego oszczędzanie baterii — wtedy szybciej zarejestruje się ponownie po zmianie sieci.
  4. Tam, gdzie nie można tracić połączenia (kontuar, recepcja), postaw telefon stacjonarny lub słuchawkę DECT, a nie smartfon.

Co przesłać do pomocy technicznej#

  • datę i godzinę kilku przerwanych połączeń z dokładnością do minuty, numery i numer wewnętrzny;
  • po ilu sekundach następuje przerwanie (według dziennika — „Rozmowa”) i czy zawsze tak samo;
  • czy urywają się wszystkie połączenia, czy tylko zewnętrzne; czy długie *43 (45 sekund) się utrzymuje;
  • model i oprogramowanie telefonu (wiersz z tagu urządzenia), czy włączone są w nim keep-alive i Session Timer;
  • model routera, czy wyłączony jest SIP ALG, czy jest drugi router od dostawcy;
  • na dedykowanej centrali — tekst SIP-trace powtórzonego przerwania.

Jak do nas napisać — „Pomoc techniczna”.

Częste pytania#

Dlaczego przerwanie następuje dokładnie w 32. sekundzie, a nie w 30. i nie w 40.?#

Bo ta liczba jest wpisana w sam protokół SIP: potwierdzenia rozpoczęcia rozmowy oczekuje się przez 64 interwały po pół sekundy — 32 sekundy. Jeśli u ciebie jest „około 30 sekund” i za każdym razem tak samo — to właśnie to, nawet jeśli stoper pokazywał 31 lub 33: część czasu zajęły sygnały i odebranie.

SIP ALG jest wyłączony, a przerwanie w 30. sekundzie zostało — co jeszcze?#

Sprawdź, czy ALG jest wyłączony na wszystkich routerach na drodze (w routerze dostawcy często jest własny), zostaw w telefonie trzy kodeki i spróbuj transportu TCP. Jeśli urywają się tylko połączenia zewnętrzne, a *43 utrzymuje się 45 sekund — problem jest na odcinku do operatora telekomunikacyjnego, prześlij czas połączeń.

Placówka jest zielona, ale połączenia przychodzące nie dochodzą — to też „przerwanie”?#

To ten sam mechanizm, co w sekcji o połączeniach przychodzących w pierwszych minutach: rejestracja odświeża się od wewnątrz, a drzwi do telefonu z zewnątrz są już zamknięte. Sprawdzenie — „Zadzwoń na urządzenie” po 10 minutach bezczynności; lekarstwo — keep-alive w telefonie.

Czy można po prostu wyłączyć timery sesji na centrali?#

Można (na dedykowanej centrali, „Zaawansowane ustawienia SIP”), ale to leczy objaw, a nie przyczynę: przedłużenie nie przechodzi, bo droga komunikatów sygnalizacyjnych jest zamknięta lub uszkodzona, a ta sama droga będzie potrzebna do przekierowania połączenia i zawieszenia. Poza tym bez timerów przerwane po cichu rozmowy będą wisieć godzinami i zajmować linie. Najpierw keep-alive i SIP ALG.

Powiązane sekcje#

Źródła#

  • RFC 3261 — SIP: powtarzanie 200 OK do otrzymania ACK i zakończenie sesji po 64 × T1 (§13.3.1.4), T1 = 500 ms (§17.1.1.1), przejście na TCP dla komunikatów dłuższych niż 1300 bajtów (§18.1.1) — https://www.rfc-editor.org/rfc/rfc3261
  • RFC 4028 — Session Timers: przedłużenie w połowie interwału, BYE na min(32 s, interwał / 3) przed upływem — https://www.rfc-editor.org/rfc/rfc4028
  • Yealink SIP-T2/T3/T4/T5/CP920 Administrator Guide V86.60 — Keep Alive Type / Interval (fabryczne Default, 30 s), Session Timer (fabrycznie — wyłączony; Session Expires 1800 s; odświeżanie w połowie interwału)
  • Grandstream GRP261x/262x/263x Administration Guide — Session Timer: Enable Session Timer (fabrycznie „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 i ograniczenie rozmiaru pakietu, limity czasu NAT routera — https://www.zoiper.com/pdf/User%20Guide%20Zoiper%205%20v.1.0.7.pdf
  • Kod centrali: 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 (test echa *43, limit sprawdzenia 300 s)
Was this article helpful?