Drobná změna v SIP keep alive směr odorik->zákazník

Podrobnější technické novinky a vůbec novinky a postřehy z VoIP.
Odpovědět
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8137
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Drobná změna v SIP keep alive směr odorik->zákazník

Příspěvek od xsouku04 »

Ve zkratce: Čtěte, jen pokud je váš telefon občas nedostupný, i když internet zrovna funguje.

Dnes v noci se změnil způsob zasílání keep alive paktů od nás směrem k zákazníkovi, pokud je u nastavení linky u nás na webu aktivní. Nově posíláme jen 4 byty - samé nuly, na které telefony již neodpovídají. Dříve jsme posílali mnohem větší SIP OPTIONS packet, na které telefony odpovídaly, ale odpověď nikdo neevidoval, jen zbytečně zatěžovala náš server.
Posílání keep alive paketů ve směru odorik->telefon může mít liv na dovolatelnost zaregistrovaných VoIP zařízení, ale jen u těch co jsou neoptimálně nastavené.


Pokud je Vaše linka občas nedovolatelná (zpravidla po krátkém výpadku internetu), zkontrolujte, že máte zapnuto keep alive na vašem telefonu. Tohle je jediný způsob, jak snížit délky kratších výpadků na minimum. Jak povolit keep alive, zmiňují všechny naše návody pro nastavení VoIP telefonů. Telefony Siemens Gigaset keep alive posílají automaticky a volbu nastavení ani nemají. Posílán keep alive ze strany sip.odorik.cz (které se dnes mírně změnilo) je jen nedokonalá berlička pro ty, co nečtou naše návody, nebo mají nějaký hodně starý či netradiční VoIP telefon.

Trochu technického pozadí nedokonalosti SIPu pro ty, které to zajímá

Nejrozšířenější SIP ústředna Asterisk, posílá defaultně keep alive pakety všem svým přihlášeným telefonům. Vyhodnocuje, že telefony odpovídají a jen takovým posílá hovory. Kdyby totiž poslala hovor na nedostupný/neodpovídající VoIP telefon, nesmyslně nastavený defaultní SIP TIMEOUT v Asterisku na 30 vteřin znemožní nějaké náhradní chování v rozumném čase. Tedy vývojáři Asterisku přidělali berličku, aby mohli ponechat špatně vymyšlené defaultní timeouty v SIPu. U nás tento problém nemáme, změnili jsme timeout na 5 vteřin.
Z toho plynou dvě věci. Méně důležitá je, že každý VoIP telefon umí odpovědět na keep alive - jinak byl s Asteriskem nepoužitelný a to si žádný nedovolí. Většina VoIP telefonů v defaultní konfiguraci neposílá vlastní keep alive, ale spoléhají na to, že to budě dělat ústředna, čímž si podstatně zvyšuje svoji potencionální nedostupnost. Stačí totiž když přestane internet fungovat na 2 minuty, NAT se uzavře a telefon je až do další přeregistrace nedostupný. Tedy až hodinu. Pravděpodobně stačí jen ztráta jednoho nebo dvou UDP paketů v řadě. Je to tedy všeobecně rozšířený zlozvyk vyvolaný příliš dominantním postavením Asterisku a spoléhání se na jeho defaultní chování - nekoncepční berličku.

Optimální tedy je, pokud keep alive pakety posílá jen telefon. Pokud pošle dlouhý SIP Options paket, ústředna odpoví a telefon má tak zpětnou vazbu, že je dostupný. Pokud na keep alive nikdo neodpoví, bylo by logické, kdyby se zkusil znovu zaregistrovat - mohlo se např. změnit připojení k internetu (jiná wifina, jiná ip adresa), nebo někdo mohl restartovat router, který nyní změnil mapování a pro obnovení spojení je nutné se přeregistrovat. Málo který VoIP telefon ale zareaguje pokusem o přeregistraci, když přestane dostávat odpovědi na keep alive. Tedy pokud si tedy restartujete router, stále hrozí, že budete do další přeregistrace nedostupní, pokud router po restartu nezachová stejné mapování portů. Tohle je bohužel hloupost většiny výrobců VoIP telefonů, kterou jen tak nezměníme. Ale v případě výpadku internetu pakety přes router, který je u vás nebo poblíž, chodí nadále (chodí zevnitř a ztratí se až později) a mapování zůstává zachováno. Stejně tak při výpadku služeb Odorik.cz zůstane cesta otevřená a po ukončení výpadku se okamžitě obnoví. Proto má smysl obecně používat keep alive ve směru telefon->ústředna a na opačný směr se nespoléhat. Bohužel málokdo tohle tuší.

Některé telefony jako např. Siemens Gigaset posílají jen krátký keep alive paket, na který se neodpovídá, což je ve výsledku stejné, jako když většina ostatních na chybějící odpověď stejně nijak nereaguje. Jen je to datově úspornější a nezatěžuje to tolik ústřednu.
Kabek
Příspěvky: 644
Registrován: čtv 03. led 2013 19:44:30

Re: Drobná změna v SIP keep alive směr odorik->zákazník

Příspěvek od Kabek »

Keep alive pakety posíláte jak na UDP tak i na TCP?
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8137
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Drobná změna v SIP keep alive směr odorik->zákazník

Příspěvek od xsouku04 »

Kabek píše:Keep alive pakety posíláte jak na UDP tak i na TCP?
Ne tohle vše napsáno platí pro UDP, přes který se připojuje naprostá většina zařízení.
TCP keep alive běžně nepotřebuje, jen u extra líných routerů (vzácené) stačí cca co 10 minut. Ovšem pokud chceme mít jistotu, jak se to vlastně chová, nezbývá než poslouchat, co to vlastně posílá, protože lidová tvořivost v SIPu je opravdu obrovská. Musí být, protože ti, co SIP vymysleli, předpokládali, že něco jako NAT neexistuje, protože by jim to pokazilo jejich chybně navržený koncept. Do SIP hlaviček se totiž dávají ip adresy, které nám ale mapování NATu změní, takže jsou u SIP klientů na neveřejné adrese naprosto k ničemu - jen komplikují implementaci SIPu.

TCPmůžete zkusit použít, pokud je to přes UDP nespolehlivé. Totiž některé bugy routerů se mohou týkat jen UDP a použitím TCP můžete problém obejít.
Druhý případ, kdy může být dobré použít TCP, je u aplikací pro mobilní telefony. Tam je totiž keep alive problematický tím, že vybíjí baterku, nedovolí telefonu spát. Teoreticky může operační systém aplikaci a telefon vzbudit, až když se něco přes otevřené TCP spojení pošle, nebo při jiné události jako změna připojení k internetu a podobně. Jestli se to ale děje a jak moc spolehlivé příchozí hovory jsou, je třeba vyzkoušet. Obávám se, že jak vývojáři androidu tak vývojáři mobilních aplikací v tomto ohledu moc dobré práce neodvedli.
Co se týče samotného zvuku, ten se vždy přenáší pře UDP, jinak to ani nejde.
Odpovědět