V novém seriálu si postupně představíme protokol SIPi. Čtenáři tak získají velmi důkladné znalosti, které jsou mnohdy nutné pro praktické řešení problémů. V prvním dílu se pustíme do základních stavebních kamenů protokolu SIP. Nejprve se seznámíme se SIP URIi, o kterém ani ostřílení VoIPi harcovníci netuší spoustu věcí a ukážeme si základní role zařízení.
SIP URI
SIP URI je adresa zařízení s podporou protokolu SIP. Není to jen moderní varianta telefonního čísla. SIP URI má mnohem víc funkcí než jenom identifikaci telefonního přístroje. Začněme ale popořádku. SIP URI má podobný tvar jako emailová adresa. Skládá se z lokální části (to je ta část SIP URI před zavináčem) a domény (za zavináčem). Doménová část je zhruba řečeno internetová adresa ústředny. Lokální část je adresa telefonu (případně uživatele, služby apod.) v rámci ústředny.
AOR
Existuje několik druhů SIP URI. Takovému SIP URI, které se používá pro identifikaci telefonního přístroje, osoby, nebo skupiny osob, nebo nějaké služby (např. přesný čas) se říká address of record, zkráceně AOR. Může vypadat například takto (všechna SIP URI v tomto seriálu mohou být smyšlená):
sip:hala@telegro.cz sip:novak@telegro.cz sip:technici@telegro.cz sip:echo@telegro.cz
V případě, že AOR identifikuje osobu s více telefony, nebo dokonce skupinu, může volání na toto URI zazvonit na více telefonech naráz. Už z toho je vidět, že SIP URI není jen obyčejná náhražka telefonního čísla. AOR je adresa, která se dává na web a publikuje se v knihách. Je určena pro použití lidmi.
Většina telefonů s podporou protokolu SIP umožňuje nějakým způsobem zadat SIP URI. Máte-li stolní telefon, který má jen tlačítka s číslicemi, můžete do jeho adresáře přidat záznamy se SIP URI a při volání pak vybírat z něj. Pro zadávání záznamů můžete použít buď webové rozhraní telefonu, nebo podobný systém jako při psaní sms zpráv.
Contact URI
Ne každé SIP URI je AOR. Telefon při registraci ústředně (mimo jiné) posílá svoji IP adresu, která má formu Contact URI. Příklad:
sip:novak@192.168.1.15
Jak vidíte, Contact URI obsahuje privátní IP adresu a nedá se čekat, že byste se na něj dovolali přes internet. (Mohlo by vám fungovat v rámci lokální sítě.) Contact URI je určeno spíše pro ústředny, než pro lidi. Běžný uživatel s ním nepřijde do styku. Za zavináčem může být i DNS jméno, ale běžnější je přímo IP adresa.
Šifrovaný SIP
Protokol SIP umožňuje šifrovaný přenos zpráv pomocí TLS. SIP URI, které označuje zařízení podporující TLS má místo prefixu sip: prefix sips:, kde s navíc je odvozeno od slova secure. Příklad SIPSi URI:
sips:planicka@telegro.cz
Parametry SIP URI
SIP URI mohou obsahovat další parametry, například jaký transportní protokol se má použít (SIP je možné provozovat přes UDPi i přes TCPi), nebo jaký má být předmět hovoru:
sip:marek@telegro.cz;transport=udp sip:marek@telegro.cz?subject=Dotaz
Ano, opravdu je to tak. Při použití protokolu SIP mohou mít hovory předmět (anglicky subject) podobně jako email. Volaný si může přečíst čeho se hovor týká dříve než ho přijme. V praxi se ale tato vlastnost moc neujala. Otazník v druhém URI předchozího příkladu není omyl, pro některé parametry se používá středník, pro jiné otazník. Podrobnosti najdete v RFC 3261 v sekci 19.1.
A nakonec ještě jedna maličkost. SIP URI jsou při porovnávání citlivá na malá a velká písmena, ale jen před zavináčem. V doménové části za zavináčem se malá a velká písmena nerozlišují.
Aktivní prvky protokolu SIP
SIP je transakční protokol. Komunikace je rozdělena na takzvané transakce. Příkladem transakce je navázání hovoru, jiným příkladem je ukončení hovoru. Transakce se skládá z požadavku (request) a odpovědi (reply). Odpovědí ve skutečnosti může být i více. Navázání hovoru je v mnoha ohledech speciální transakce, proto budeme raději jako příklad používat ukončení hovoru, které je mnohem jednodušší.
Autoři protokolu SIP nepoužívají termín telefon. Telefonovat totiž mohou i jiná zařízení, například zabezpečovací systém vašeho domu, hlasové automaty apod. Proto se používá obecnější termín User Agent (UA). Místo UA si kdykoliv můžete představit obyčejný telefon a i v tomto seriálu budeme telefony často používat jako příklady user agents.
Je-li navázán hovor mezi dvěma telefony, je jejich postavení rovnocenné. To znamená, že není rozdíl mezi volajícím a volaným telefonem. Oba telefony mohou tuto informaci spokojeně zapomenout, protože po navázání hovoru už ji nebudou potřebovat. Pokud chce jeden z telefonů ukončit hovor (uživatel zavěsil sluchátko), pošle protistraně požadavek na ukončení hovoru a začne tak novou transakci. Během transakce hrají telefony odlišné role. Telefon, který žádá o ukončení hovoru je User Agent Client (UAC) a telefon, který tento požadavek vyřizuje a posílá odpověď je User Agent Server (UAS). Během hovoru může proběhnout několik transakcí. Například stiskne-li uživatel tlačítko s číslicí během hovoru, může telefon poslat zprávu (požadavek) s informací o stisku tlačítka. Tím získává roli UAC a čeká na odpověď od protistrany, která má roli UAS. Odpověď je potvrzení o přijetí. (Tento systém se využívá pro komunikaci s hlasovými automaty.) Telefony tak mohou střídavě hrát role UAC a UAS, teoreticky mohou hrát i více rolí naráz, protože může probíhat několik nezávislých transakcí v jednom okamžiku.
Proxy, nebo též Proxy Server je zařízení, které příjmá zprávy a přeposílá je dál. Proxy servery jsou v protokolu SIP totéž co routery v protokolu IP. Mají za úkol především směrování SIPových zpráv. V některých případech je nemožné posílat SIPové zprávy přímo, například je-li telefon ve vnitřní síti za firewallem. Proxy Server může mít dvě síťová rozhraní a propojit tak vnitřní síť a vnější internet. Nejznámější implementace Proxy jsou Kamailioi, SERi, OpenSERi a OpenSIPSi, o kterých už psal Petr Hruška v článku OpenSER a SER se spojují, vznikne SIP Router? Proxy servery se dělí na stavové (statefull) a bezstavové (stateless). Stavové proxy si udržují přehled o právě probíhajících transakcích, bezstavové si nepamatují nic. Je zajímavé, že ani stavové servery si neudržují přehled o právě probíhajících hovorech. Zátěž proxy serveru se proto měří v počtech transakcí (tj. typicky počet počátků a konců hovorů) za sekundu. Proxy jich zvládají stovky až tisíce.
Outbound proxy je proxy server, kterému user agent předává požadavky, i když cílové SIP URI těchto požadavků míří na úplně jinou destinaci. Je to obdoba odchozího SMTP proxy v emailu. Častým důvodem pro použití outbound proxy je překlenutí NATu. Outbound proxy se často zadává přímo do konfigurace telefonu.
Asteriski není Proxy. Z hlediska protokolu SIP se chová jako user agent. Nepřeposílá zprávy. Obsah přijatých požadavků analyzuje, odpovídá na ně jako UAS a podle své konfigurace generuje a posílá nové zprávy jako UAC. Probíhá-li hovor mezi dvěma telefony přes Asterisk, jsou ve skutečnosti navázány hovory dva. Jeden hovor mezi Asteriskem a prvním telefonem a druhý hovor mezi Asteriskem a druhým telefonem. Tento koncept umožňuje Asterisku některé akce, které proxy nedokáže. Asterisk například může hovor s jedním z telefonů ukončit a přepojit hovor na jiný telefon. Nevýhodou je, že Asterisk musí mít přehled o jednotlivých hovorech a také proto je méně výkonný v porovnání s proxy servery. V terminlogii SIPu je Asterisk Back-to-Back User Agent, což je označení zařízení, které obsahuje více user agents.
Registrar je speciální UAS, který vyřizuje požadavky na registraci a zapisuje je do databáze location service, odkud mohou čerpat informace proxy servery a user agents. Registrar běží často na stejném stroji jako Proxy. Registrarem je i Asterisk.
Závěrem
V příštím díle si ukážeme typickou architekturu sítě postavené na protokolu SIP tak jak byla původně zamýšlena. Samozřejmě zmíníme i praktické odchylky od původních myšlenek, které se prosadily díky komerci a spamu.







