SIPi slouží mnoha účelům, avšak nejdůležitější je navázání hovoru, ukončení hovoru a registrace. Použití SIP URIi se může mírně lišit pro jednotlivé účely. My se budeme věnovat jeho využití při navazování hovorů, které probíhá pomocí požadavku INVITE.
Protokol SIP používá podobné adresní schéma jako email, tedy sip:uživatel@doména (například sip:novak@telegro.cz). Prefix sip: se používá, aby se SIP URI odlišilo od emailu. Použití SIP URI se může mírně lišit pro jednotlivé účely. Pro přiblížení se v celém článku budeme zabývat případem volání uživatele sip:cerny@nekde.cz uživateli sip:novak@telegro.cz.
Přímé volání
Specifikace protokolu SIP rozlišuje telefony (UA) od routerů SIPových zpráv (SIP Proxy). V nejjednodušším případě (který se však z několika důvodů moc často nevyskytuje) probíhá komunikace přímo mezi dvěma telefony. V naší konkrétní situaci by to znamenalo, že pan Černý vloží do seznamu svého telefonu položku Jan Novák se SIP URI sip:novak@telegro.cz. Potom vybere položku ze seznamu a zavolá na ní. V případě, že má pan Černý softwarový telefon, může zadat SIP URI rovnou z klávesnice, podobně jako při odesílání emailu. To co se stane pak, je znázorněno na obrázku.
Telefon pana Černého vezme doménovou část SIP URI volaného (telegro.cz) a tuto doménu převede na IP adresu. Převod je poměrně komplikovaný proces. Zájemce o technické detaily odkazujeme na článek Petra Hrušky Převod SIP URI na IP adresu. Výsledkem dotazu je (pro účely tohoto článku smyšlená) adresa 8.8.8.8. Na tuto adresu pošle volající telefon požadavek INVITE, tj. pozvánku k navázání hovoru.
Jak jsme již avizovali, půjde o nejjednodušší případ. Proto předpokládejme, že telefon pana Nováka má veřejnou IP adresu 8.8.8.8. Taková konfigurace je netypická, protože telefony nemívají veřejné adresy. Veřejné adresy jsou používány u ústředen. Navíc z právě popsaného algoritmu je jasné, že na telefon pana Nováka by byly směrovány všechny hovory pro SIP URI mající za zavináčem doménu telegro.cz.
Místo domény lze použít i IP adresu. Máte-li na lokální síti telefon s IP adresou 192.168.1.1, můžete na něj přímo zavolat pomocí SIP URI novak@192.168.1.1.
Vraťme se ale k volání na SIP URI novak@telegro.cz. Volající telefon sestaví požadavek INVITE. Formát SIPových zpráv je prostý text. INVITE obsahuje mnoho řádek, ale my se budeme soustředit zatím jen na tři z nich:
INVITE sip:novak@telegro.cz SIP/2.0 From: "Jiri Cerny" <sip:cerny@nekde.cz>;tag=irghsdwef To: "Jan Novak" <sip:novak@telegro.cz>
Jména v uvozovkách mohou chybět pokud uživatel zadá SIP URI přímo z klávesnice. První řádek je velmi důležitý, má dokonce speciální označení request line. SIP URI v prvním řádku se říká Request-URI a právě podle něj se řídí směrování paketu. V našem nejjednodušším případě vlastně k žádnému směrování nedochází, protože požadavek neprochází přes žádný SIP Proxy. Řádek s hlavičkou From slouží ke dvěma hlavním účelům. Jméno Jiri Cerny je typicky zobrazeno na displeji volaného telefonu během vyzvánění. Pokud volaný pan Novák nezvedne sluchátko, bude si jeho přístroj pamatovat zmeškaný hovor. Bude-li chtít Novák zavolat zpět, použije se právě SIP URI cerny@nekde.cz z hlavičky From. To je její druhé využití. Parametr tag slouží k identifikaci volání a prozatím není důležitý. Hlavička To nemá velké využití, rozhodující bývá Request-URI. Během sestavení hovoru je řádek s hlavičkou To také opatřen parametrem tag, který má velký význam pro identifikaci hovoru. Dá se říci, že toto je hlavní využití tohoto řádku.
Volaný telefon může dostat požadavek INVITE s prakticky libovolným Request-URI a s prakticky čímkoliv v řádcích To a From. Zatímco ověřit obsah řádku From je prakticky nemožné (SIP je anonymní, podobně jako email nebo klasická papírová pošta), obsah Request-URI a řádku To může být porovnán s očekávanými hodnotami. Podle RFC 3261 může telefon aplikovat jakékoliv kriteria při zkoumání hlavičky To. Shledá-li, že požadavek není pro něj, může hovor odmítnout (kódem 403 Forbidden). Nicméně je doporučeno, aby hovor nebyl odmítnut na základě hlavičky To. Poněkud přísnější kritéria jsou použita pro zkoumání Request-URI. Není-li v Request-URI adresa telefonu, měl by telefon hovor odmítnout (kódem 404 Not Found). Volající nemůže vědět, jestli je na adrese 8.8.8.8 SIP Proxy (který by mohl takový požadavek přeposlat tam kam patří), nebo telefon, který požadavky nepřeposílá. Telefony v praxi dost často příjmají libovolný požadavek.
Outbound proxy
Součástí konfigurace většiny telefonů je parametr outbound proxy. Tento parametr určuje, kam bude telefon posílat požadavky. Je to taková SIPová obdoba odchozího SMTP serveru. Není-li outbound proxy nastaven, probíhá odeslání požadavku tak, jak bylo popsáno v předešlém textu, tj. podle domény volaného.
Naopak, je-li outbound proxy nastaven, bude požadavek INVITE odeslán na adresu outbound proxy. Přitom obsah paketu (pokud se týká Request-URI, From a To) bude úplně stejný. Záleží jen na konfiguraci outbound proxy, kam požadavek přepošle. Typicky se řídí podle domény v Request-URI, stejně jako telefon, který nemá nastaveno outbound proxy. Outbound proxy se používá kvůli NATu. Zatímco telefony mají většinou privátní IP adresy, outbound proxy mívají veřejnou adresu. Telefon do požadavku INVITE vkládá svojí (privátní) adresu, na kterou jsou mu pak posílána hlasová data. Úkolem outbound proxy je přepsat tuto adresu svojí vlastní (veřejnou) adresou a přesměrovat tak hlasová data případněho hovoru na sebe. Ty jsou pak přeposílána do vnitřní sítě. Outbound proxy mohou mít dvě síťová rozhraní, jedno pro vnitřní síť a druhé pro vnější. Překlenutí NATu je nad rámec tohoto článku, dostaneme se k němu v příštích dílech.
Význam termínu outbound proxy je dvojí. Za prvé je to jméno parametru v konfiguraci telefonu, za druhé je to SIP Proxy, tj. server. Outbound proxy je speciální případ SIP Proxy pro odchozí hovory.
SIP Proxy pro příchozí hovory
Aby mohlo více telefonů sdílet jednu doménu, bývá na adrese domény (8.8.8.8) spuštěn SIP Proxy. Jeho úkolem je směrovat příchozí požadavky na jednotlivé telefony.
Pro každé SIP URI (nebo přesněji AOR - viz minulý díl) musí znát kontakt na příslušný telefon. Kontakt je také SIP URI (Contact URI), za zavináčem bývá IP adresa. Je-li vnitřní adresa telefonu pana Nováka 192.168.1.1, pak kontakt na tento telefon bude sip:novak@192.168.1.1. SIP Proxy, který je zodpovědný za doménu telegro.cz může mít kontakty uloženy buď přímo v konfiguraci, nebo mohou být nastaveny samotnými telefony při registraci. Registrace telefonu k ústředně není nic jiného, než nastavení kontaktu k nějakému AOR. Přijde-li požadavek na navázání hovoru, prozkoumá SIP Proxy první řádek požadavku, tzn. Request URI a podle něj rozhodne, jakému telefonu požadavek patří. Před přeposláním požadavku přepíše Request-URI kontaktem telefonu. Telefon pak dostane požadavek, který může vypadat například takto:
INVITE sip:novak@192.168.1.1 SIP/2.0 From: "Jiri Cerny" <sip:cerny@nekde.cz>;tag=irghsdwef To: "Jan Novak" <sip:novak@telegro.cz>
Zatímco řádek To se během směrování požadavků nemění, Request-URI se může změnit několikrát. V podstatě záleží jen na konfiguraci SIP Proxy, kam požadavek přepošle. Není neobvyklé, že je požadavek přeposlán nějakému dalšímu SIP Proxy, takže požadavek je přeposlán několikrát. Během přeposílání se může několikrát změnit i Request-URI. Typický požadavek putuje přes dva SIP Proxy (outbound proxy a proxy pro cílovou doménu).
Výchozí doména
I když telefon vždy vytvoří požadavek se SIP URI, uživatelé často prostě jen vyťukají telefonní číslo a o nějakém použití domén ani netuší. V konfiguraci telefonu je vždy uložena doména, která se připojí za telefonní číslo zvolené uživatelem. Je-li výchozí doména telefonu pana Černého nekde.cz a pan Černý zvolí číslo 123, bude požadavek obsahovat cílové URI sip:123@nekde.cz. Outbound proxy bývá často zároveň také SIP Proxy pro doménu (v našem případě nekde.cz). Najde-li SIP Proxy za zavináčem doménu, o kterou se stará, rozhodne o dalším osudu požadavku podle části před zavináčem. Je-li před ním telefonní číslo (nebo obecně AOR) místního telefonu, předá hovor podle nastaveného kontaktu. Je-li před zavináčem jiné telefonní číslo, může být hovor přeposlán na bránu do PSTNi. Odchozí paket pak může vypadat například takto:
INVITE sip:420123456789@dreamteam-sip-to-pstn-gateway.cz SIP/2.0 From: "Jiri Cerny" <sip:420987654321@nekde.cz>;tag=irghsdwef To: "Franta Platek" <sip:420123456789@telegro.cz>
V případě směrování do PSTN přepíše outbound proxy From URI, aby se volanému správně zobrazilo číslo volajícího a aby případně brána správně zaúčtovala hovor.
V příštím dílu se zaměříme registraci k ústředně a konfiguraci telefonů.







