Pod term�nem Voice over IP rozum�me rodinu protokol�, pou��van�ch k p�enosu mutimedi�ln�ch dat p�es paketovou s�� v re�ln�m �ase.
Dva soupe��c� standady pro p�enos VoIP jsou SIP (od IETF) a H.323 (od ITU). Dle Wikipedie se H.323 v�t�inou pou��v� na p�te�n�ch s�t�ch telekomunika�n�ch provider�, v men��m m���tku se uplat�uje SIP. Budeme se tedy zab�vat protokolem SIP.
Chceme-li d�lat n�co slo�it�j��ho, ne� jen propojovat dva klienty p��mo mezi sebou, nap��klad chceme vyt��et sv� kolegy v pr�ci podle jm�na (nikoliv ale pomoc� hostname!), pot�ebujeme m�t bu� n�jak� proxy server nebo �st�ednu (PBX).
Session Initiation Protocol, jak u� n�zev napov�d�, je protokol, kter� se star� o navazov�n� a spr�vu multimedi�ln�ch spojen�. SIP nen� v�zan� na konkr�tn� s��ov� prokol a m��e b�et nad TCP, UDP nebo SCTP.
Protokol SIP je designem podobn� protokolu HTTP -- jedn� se o textov� protokol zalo�en� na principu request/response. Kaz�d� po�adavek nebo odpov�� s sebou m��e n�st sadu dopl�uj�c�ch atribut�.
P�i navazov�n� spojen� po�le klient po�adavek INVITE, bu� p��mo druh�mu klientovi, nebo �ast�ji n�kter�mu proxy serveru. Proxy servery funguj� jako �st�edny a po�adavky sm�ruj� spr�vn�m sm�rem, nap��klad pomoc� DNS nebo pomoc� sv� lok�ln� datab�ze. Po�adavek INVITE v sob� nese URI adres�ta (nap��klad sip:avakar@technika.junior.cz) a tak� funguje jako nosi� pro SDP (Session Description Protocol). SDP v sob� obsahuje detaily o medi�ln�m spojen� a nab�dku pou�iteln�ch protokol� a kodek� apod.
Po p�ijet� po�adavku INVITE po�le druh� strana spojen� odpov�� "ringing" a zobraz� u�ivateli informaci o p��choz�m spojen�. Je-li spojen� u�ivatelem akceptov�no, ode�le druh� strana po�adavek OK, spolu s SDP popisuj�c� vypran� protokol.
Vlastn� komunikace potom prob�h� po dedikovan�m spojen� skze RTP (Real-time Transport Protocol).
Pokud je v j�d�e zapnut� podpora SIP pro iptables, jsou RTP spojen� klasifikov�na jako related a firewallem �i NAT proch�z� bez probl�m.
Aby se u�ivatel mohl voln� pohybovat a p�esto jeho URI z�st�valo stejn�, umo��uje SIP protokol registrovat u�ivatele u sv�ch proxy server� pomoc� po�adavku REGISTER. Takto si proxy server m��e napl�ovat datab�zi sv�ch u�ivatel�.
Pro vyzkou�en� SIPu je mo�n� pou��t libovoln� SIP softphone, kter� nevy�aduje pou�it� proxy serveru. J� jsem zkou�el Linphone, zejm�na proto, �e b�� i na Windows.
V sou�asn� dob� asi nejobl�ben�j�� implementac� PBX je softwarov� bal�k Asterisk. Asterisk je kompletn� �st�edna, kter� um� propojovat r�zn� druhy VoIP s�t� a dokonce (za pomoci speci�ln�ho hardwaru) se p�ipojovat do analogov� telefonn� s�t�. K Asterisku existuje kvalitn� (ale rozs�hl�) dokumentace ve form� elektronick� knihy.
Po instalaci Asterisku (v gentoo emerge -v asterisk) je akor�d pot�eba nakonfigurovat, co se m� st�t, kdy� p�ijde p��choz� vol�n� na adresu sip:neco@moje-domena.cz. Jm�no "neco" se v Asterisku naz�v� extension, a p��slu�n� akce se konfiguruj� v souboru extensions.conf.
[globals] [general] [default] exten => _hello!,1,Playback(hello-world) exten => _hello!,n,Hangup()
V��e uveden� konfigurace nastav� Asterisk tak, aby hovory na adresu sip:hello@moje-domena.cz nebo sip:hellocokoliv@moje-domena.cz byly odpov�zeny, byl do nich p�ehr�n soubor hello-world a potom bylo spojen� ukon�eno.
Chceme-li n�kter�m u�ivatel�m umo�nit volat jinou mno�inu ��sel, mus�me je zaregistrovat. To ud�l�me v souboru sip.conf.
[general] [avakar] type=friend context=my_context host=dynamic secret=heslo
Takto se k Asterisku m��e p�ipojit u�ivatel avakar@moje-domena.cz, pokud se mu ov�em poda�� autentizovat se heslem. Uprav�me-li soubor extensions.conf takto:
[globals] [general] [default] exten => _hello!,1,Playback(hello-world) exten => _hello!,n,Hangup() exten => avakar,1,Dial(SIP/avakar) [my_context] exten => echo,1,Echo() exten => echo,n,Hangup()
Zavol�-li u�ivatel avakar adresu sip:echo@moje-domena.cz, bude sly�et s�m sebe. Nav�c pokud kdokoliv jin� zavol� adresu sip:avakar@moje-domena.cz, p�esm�ruje Asterisk vol�n� na telefon u�ivatele avakar. (Ten se p�edt�m ale musel zaregistrovat pomoc� SIP po�adavku REGISTER.)