Professional Documents
Culture Documents
Autor textu:
Miroslav Vozňák
Ostrava 2014
Neprodejné
ISBN 978-80-248-3326-2
PŘEDMLUVA
Vážené studentky a vážení studenti, mým cílem bylo vytvořit studijní materiál, který by reflektoval
na současný trend hlasových komunikačních systémů. Do jaké míry má snaha byla úspěšná,
nepochybně ukáže čas a především, do jaké míry bude koncept po obsahové stránce nadčasový.
VoIP lze chápat jako technologii, která využívá prostředky sítě Internet k přenosu hlasu,
v aplikační rovině pak vidíme IP telefonii jako aplikaci nad VoIP. První pokusy s přenosem hlasu
datovaných v počátcích Internetu uskutečnil Danny Cohen v roce 1977. Komerční úspěch Internetu
znamenal podnět k intenzivnímu vývoji v této oblasti a přijetí mezinárodně uznávaných standardů, a
to především H.323 v roce 1996 z organizace ITU-T a SIP doporučení v roce 1999 z dílny IETF.
V naší publikaci se budeme orientovat na SIP, a to vzhledem k faktu, že SIP se stal de-facto
stěžejním protokolem pro IP telefonii a s přihlédnutím k rozsahu publikace a užitné hodnotě informací
byl pro autory jednoznačnou volbou.
V první části se čtenář seznámí s nezbytnými teoretickými základy VoIP technologie a SIP
protokolu, které zužitkuje v druhé části věnované Asterisku. Tak jako je Apache symbolem
úspěšného projektu webového serveru, tak analogicky Asterisk představuje v IP telefonii uznávané
komunikační řešení pro nasazení IP telefonie.
Na závěr této předmluvy bych rád poděkoval své manželce Pavle a našim dětem za trpělivost, bez
které by tato skripta nevznikla a rovněž děkuji kolegům, kteří se mnou odborně spolupracují a přispěli
tak k formování obsahu této publikace a to především svým nejbližším spolupracovníkům Honzovi
Rozhonovi a Filipovi Řezáčovi. V neposlední řadě patří poděkováním i mým kolegům z FEKT VUT
v Brně za spolupráci při řešení projektu OP VK č. CZ.1.07/2.2.00/28.0062 “Společné aktivity VUT a
VŠB-TUO při vytváření obsahu a náplně odborných akreditovaných kurzů ICT“, za jehož podpory byl
obsah předmětu inovován a vytvořena tato skripta.
E-mail: voznak@ieee.org
OBSAH
1 Přenos sítí Internet v reálném čase 1
1.1 Real Time Protocol 1
1.2 Timestamp a rozptyl zpoždění 4
1.3 Stanovení zpoždění z RTP 5
1.4 Řídící protokol RTCP 6
1.5 Zabezpečení přenosu RTP 6
1.5.1 Zabezpečení pomocí SRTP 7
1.5.2 Návrh vylepšení SRTP pomocí ZRTP 11
1.6 Přenos DTMF a jiných tónů přes RTP 13
1.7 SCTP Stream Control Transmission Protocol 15
1.8 Audio v přenosovém řetězci od odesílatele k příjemci 16
1.9 Nároky na přenos audia v IP sítích 18
1.10 Kodeky 19
1.10.1 PCM 20
1.10.2 ADPCM 20
1.10.3 CELP 21
3 Hlasové brány 43
Signalizace v PSTN 43
3.1.1 Siťová signalizace v digitálních sítích 44
3.1.2 Účastnická signalizace v digitálních sítích 45
3.2 Vlastnosti hlasové brány 46
3.2.1 Modul FXS 48
3.2.2 Modul FXO 48
3.2.3 Modul EM 49
i
3.2.4 Moduly ISDN 49
3.3 Konfigurace ISDN modulů v Cisco směrovačích 50
3.3.1 Globální parametry nastavení 51
3.3.2 Příklad nastavení BRI 51
3.3.3 Příklad nastavení PRI 52
3.3.4 Pravidla volby čísel a směrů 53
3.3.5 Třídy kodeků 54
3.3.6 Chybějící kontrolní vyzváněcí tón 55
3.4 Diagnostika na hlasové bráně 56
4 GNU Gatekeeper 59
4.1 Instalace a konfigurace GnuGK 60
4.1.1 Základní konfigurace po instalaci 60
4.1.2 Registrace EP 61
4.1.3 Propojení GnuGK s jiným GK 63
4.1.4 Statická registrace GW v GnuGK 63
4.1.5 Autentizace v GnuGK 64
4.1.6 Autorizace v GnuGK 66
4.2 Návrh sítě s konfigurací GnuGK 67
4.2.1 Nastavení GK a mezizónové propojení 68
8.2.2 Nastavení VoGW a dynamické registrace na GK 69
ii
5.5.1 Směrování dle RURI a Via 97
5.5.2 SIP trapezoid 98
5.5.3 Udržení SIP Proxy v signalizační trase 102
5.6 SDP- protokol popisu relace 104
5.6.1 Konstrukce položek SDP pro komunikaci SIP/SDP 105
5.6.2 Offer/Answer model 107
iii
8.2.2 Vytváření XML schémat 142
8.2.3 Vkládání hodnot z externích souborů 147
8.2.4 Ovládání SIPp za běhu 149
8.2.5 Další tipy pro SIPp 150
11 Asterisk 171
11.1 Verze Asterisku 171
11.2 Popis Asterisku 172
11.2.1 Režimy Asterisku 173
11.2.2 Kodeky a protokoly Asterisku 174
11.2.3 Služby Asterisku 175
11.3 Instalace 177
11.4 Globální nastavení asterisk.conf a modules.conf 178
11.5 Konfigurace SIP a IAX uživatelů v sip.conf a iax.conf 180
11.5.1 SIP uživatel v sip.conf 181
11.5.2 IAX uživatel v iax.conf 181
11.5.3 Další možnosti sip.conf a iax.conf 182
11.6 Dialplan extensions.conf 185
11.6.1 Kontexty 185
iv
11.6.2 Pobočky 185
11.6.3 Priority 186
11.6.4 Aplikace 186
11.6.5 Tvorba dialplanu 187
11.6.6 Vzory – Pattern Matching 188
11.6.7 Offset při práci s řetězcem 189
11.6.8 Vložené kontexty – Include Statements 190
11.6.9 Časové Vložené kontexty 190
11.6.10 Proměnná ${EXTEN} a funkce ${CALLERID(num)} 191
11.7 Voicemail 191
11.8 IVR – Interactive Voice Response 192
11.8.1 Jednoduché IVR 193
11.8.2 Neplatný vstup (extension i) 193
11.8.3 Pauzy 193
11.8.4 Víceúrovňové IVR 194
11.9 DAHDI/ZAPTEL 195
11.9.1 Chan_dahdi.conf (Zapata.conf) 196
11.10 Peering mezi dvěma Asterisky 197
11.11 Použití SRTP a SIPS/TLS 200
11.11.1 Zabezpečení médií pomocí SRTP 200
11.11.2 Zabezpečení signalizace v Asterisku pomocí SIPS 201
11.12 Asterisk a kalendáře 202
11.12.1 Instalace Davical serveru 203
11.12.2 Propojení Asterisku a Davical serveru 205
11.13 Aplikace kalendářových funkcí 206
11.13.1 Směrování volání na základě zaneprázdněnosti 206
11.13.2 Zapisování do kalendáře 206
11.13.3 Čtení záznamů uložených v kalendáři 207
11.13.4 Upozornění na schůzku 209
11.14 XMPP server a Asterisk 209
11.14.1 Instalace Openfire 210
11.14.2 instalace XMPP klientů 211
11.14.3 Propojení XMPP a Asterisku 213
12 Kamailio 216
12.1 Popis modulů Kamailia 217
12.2 Instalace o rozběhnutí Kamailia 219
v
13.2 IntServ 223
13.2.1 IntServ Architektura a protokol RSVP 223
13.3 DiffServ 224
13.3.1 Architektura DiffServ 225
13.3.2 DSCP značka 227
13.4 Nástroje QoS 230
13.5 Obsluha paketových front 230
13.5.1 Metoda FIFO 230
13.5.2 Metoda CQ 231
13.5.3 Metoda WFQ 231
13.5.4 Metoda PQ 232
13.5.5 Metoda CBWFQ 232
13.5.6 Metoda PQ/WFQ 232
13.5.7 Metoda LLQ 233
13.5.8 Řízení toku a zahlcení 233
13.5.9 Komprese RTP a fragmentace 234
13.6 Kvalita řeči 235
13.7 Vliv zabezpečení na kvalitu hovoru 237
13.7.1 RTP přes TLS 237
13.7.2 RTP přes IPsec 240
Literatura 246
Rejstřík 250
vi
1 Přenos sítí Internet v reálném čase
Real Time Protocol je označován jako protokol aplikační vrstvy, který využívá transportní protokol
UDP, ale dle účelu a obsahu polí hlaviček nese důležité znaky transportního protokolu a tak se jeví
logičtější ho zařadit na transportní vrstvu hned nad UDP, jehož přenos vylepšuje. Tento pohled je ale
spíše filozofický a neřeší nic zásadního, pojďme se podívat na jednotlivá pole RTP a způsob
adaptace real-time aplikací na přenos v Internetu, viz. obr. 1.2 RTP protokol především zajišťuje
seřazení zaslaných paketů (Sequence Number) a jejich časové značkování (Timestamp), další
vlastnost, která ho řadí do transportní vrstvy je multiplexování a demultiplexování. Pokud si vezmeme
postup odesílání hlasu v IP sítí, tak tok bitů digitalizovaného hlasu ve zvoleném formátu (např. PCM)
je naporcován do bloků (typicky 20 B až 160 B) a každý blok je opatřen hlavičkou RTP o velikosti 12
B, dále se před hlavičku zařadí 8 B hlavičky UDP, viz. obr. 1.1. Tím je datagram připraven ke vstupu
do vrstvy síťové, kde dostane IP hlavičku o velikosti 20 B, celkově tedy bylo k užitečné zátěži přidáno
40 B. Jednotlivá pole RTP obsahují tyto položky, viz. obr.1.2 :
1
1 Přenos sítí Internet v reálném čase
Samotný přenos audia/videa v RTP bývá doplněn o dohledový protokol RTCP (Real Time
Control Protocol), který nese statistické informace o průběhu přenosu. Port pro RTCP je nastaven o
jedničku vyšší než RTP, minimální doba pro odeslání RTCP je stanovena na 2 sec., např. u G.711 by
to znamenalo jeden paket RTCP na sto paketů RTP, pro čísla portů platí (1.1), přičemž portům RTP
jsou přidělována sudá čísla.
port_RTCP=port_RTP+1 (1.1)
2
1 Přenos sítí Internet v reálném čase
3
1 Přenos sítí Internet v reálném čase
RFC 1889, z roku 1996 (Transport Protocol for Real-Time Applications), původní doporučení;
RFC 3550, z roku 2003, drobná vylepšení oproti RFC 1889 především v části dohledu nad
RTP tokem, tím původní RFC 1889 zastaralo;
RFC 3711, z roku 2004, specifikuje zabezpečený přenos RTP jako SRTP (Secure Real-time
Transport Protocol). Hlavička RTP může být komprimována ze 40B na 2-3B s použitím kompresního
protokolu cRTP (compressed RTP), jelikož je vyžadována podpora na obou stranách, tak je použití
víceméně omezeno na dvoubodové spoje a cRTP není příliš rozšířen [coli], [cam]. Typickým portem
RTP je 5004 a RTCP tím pádem 5005, ale v zásadě může být použit jakýkoliv port vyšší než 1024,
např. Cisco zařízení alokují pro RTP porty v rozmezí 16384 až 32767.
RTP pakety jsou odesílány obvykle v pravidelných intervalech Δt [s]. Pokud zachytíme RTP tok,
tak tento interval zjistíme z časových značek (timestamp). Pro timestamp platí, že údaje v políčku
jsou odvozeny od lineárního časového zdroje. Interval odesílání (timing) se z RTP paketů vypočte ze
dvou po sobě jdoucích časových značek dle rovnice (1.2).
timestamp{N+1} timestamp{N}
t= (1.2)
sampling_frequency
Vzorkovací kmitočet je obvykle 8 kHz, na obrázku níže jsou zachyceny RTP pakety s PCM
kódováním G.711-Alaw. Rozdíl dvou po sobě jdoucích údajů zachycených na obr.1.4. v položce
Time úplně vpravo (timestamp) je 160, pochopitelně odcházejících ze stejné IP adresy (source). Po
vydělení vzorkovacím kmitočtem 8 kHz dostáváme 20 ms, což je časování odesílání paketů ze
zdroje. V uvedeném případě můžeme očekávat tedy 50 paketů za sekundu.
Ačkoliv datagramy byly odeslány v intervalech 20 ms, tak pokud bychom určili rozdíly mezi
vyslanými na straně odesílatele a srovnali je s rozdíly mezi přijatými datagramy na straně příjemce,
zjistili bychom, že se liší. Jelikož pakety neměly stejné podmínky přenosu, způsobené především
odlišným časem stráveným ve frontách na směrovačích, tak došlo k rozdílu mezi časem skutečného
a očekávaného příchodu, tento rozdíl označujeme jako rozptyl (jitter).
4
1 Přenos sítí Internet v reálném čase
Označme Si jako hodnotu časové značky v i-tém RTP paketu (timestamp) a Ri čas skutečného
doručení paketu i příjemci, potom pro dva dva pakety i a i-1 bude platit pro výpočet rozptylu jejich
doručení příjemci rovnice (1.3):
Di (R i R i 1 ) (Si Si 1 ) (R i Si ) (R i 1 Si 1 ) (1.3)
Podmínkou platnosti vztahu je, že RTP pakety jsou přijaty z jednoho zdroje synchronizace (SSRC
pole v RTP hlavičce).
Zatímco Di [ms] představuje okamžitý jitter, tak v praxi se využívá k sledování rozptylu klouzavý
průměr, který reflektuje jeho dosavadní průběh, na druhé straně je ale potřebnost rychlé
konvergence k aktuálním hodnotám. Pro tento účel se nejčastěji používá následující vztah pro
výpočet sledované hodnoty rozptylu Ji, přičemž empiricky získaná hodnota 16 zahrnující průměr 16-ti
předchozích rozptylů reflektuje vlastnosti zmíněné v předchozí větě.
[ Di J i 1 ] 15 D
Ji Ji 1 Ji 1 i (1.4)
16 16 16
RCTP XR definuje rozšířené posílání zpráv XR (Extended Reports) v rámci dohledu nad RTP
tokem, které zajišťuje protokol RTCP (Real Time Control Protocol). RTCP XR je obsažen v
doporučení RFC 3611 z konce roku 2003, XR pakety jsou složeny z jednotlivých bloků oznámení
(report blocks) a jedním z těchto bloků je i VoIP Metrics Report Block, který uceleně informuje o
kvalitativních parametrech VoIP.
5
1 Přenos sítí Internet v reálném čase
Jednosměrné síťové zpoždění OWPD (1.5) může být stanoveno z RTD (Round Trip Delay) [ms],
což je doba oběhu zprávy od odesílatele k příjemci a zpět neboli odezva. Jelikož je nutné vyjádřit
celkové E2E zpoždění, tak RFC 3611 zavádí parametr odhadu systémového zpoždění ESD
(Estimated System Delay) [ms], který je definován součet všech přírustků zpoždění na zařízení.
RTCP-XR stanovuje, že na straně vysílací je v ESD(A) zahrnuto celkové zpoždění vzniklé
kódováním a paketizací, na straně přijímací je ESD(B) tvořenou součtem nastavené doby
mezipaměti vyrovnání rozptylu (de-jitter buffer) a zpožděním při dekódování. Je zaveden parametr
jednosměrného symetrického zpoždění hlasové cesty OWPD (one way symmetric voice path delay),
který je vyjádřen vztahem (1.5).
Původní RFC 1889 pro RTP z ledna 1996 vydrželo poměrně dlouho a další RFC pro RTP bylo
uvolněno až v červnu roku 2003. Implementace RTP dle RFC 3550 si dokáže poradit se starší RFC
1889, neboť ve formátu paketu či v obsahu hlaviček nedošlo ke změnám, změny jsou v RTCP, čili
v protokolu dohledu toku médií. Změnila se pravidla a algoritmy užití protokolu, nejvýznamnější
změnou je specifikace typů zpráv RTCP a rozšíření týkající se pravidel odesílání RTCP (jedná se o
algoritmus časování odesílání RTCP). RTCP shromažďuje statistiky přenosu na RTP, informace o
množství odeslaných bajtů a počtu paketů, ztracených paketů, rozptylu zpoždění. Dle RFC 3550 je
definováno celkem pět typů zpráv:
Použitím nešifrovaného přenosu pomocí RTP zvyšujeme riziko odposlechu hovoru [v191], [v193].
Oblíbený síťový softvérový analyzátor Wireshark umí ze zachyceného RTP toku rekonstruovat
původní zvukovou stopu. Získání zvukové stopy z RTP paketů a její následné přehrání či uložení, je
v aplikaci Wireshark možné pouze u kodeků PCM A-law a µ-law, ovšem existuje řada placených
analyzátorů, které zpracují pro přehrání audio signál i s jinými kodeky (např. Observer). Nešifrovaný
přenos RTP je proto velkým hazardem a zabezpečení je nezbytné. U transportních protokolů
užívaných pro multimédia musíme hlavně brát zřetel na to, že komunikace pomocí těchto protokolů
probíhá v reálném čase, proto i zabezpečovací techniky musí byt implementovány tak, aby vznikalo
minimální časové zpoždění [v138], [v166] a [v194].
6
1 Přenos sítí Internet v reálném čase
Stejně jako u signalizačních protokolů, tak ani nejpoužívanější protokol RTP neobsahuje ve svém
základu žádné ochranné metody či mechanizmy, a proto byl v roce 2004 v RFC 3711 definován
protokol SRTP (Secure Real-time Transport Protocol). Formát paketu SRTP je odvozen od RTP,
šifrován je přenášený obsah užitečné informace (payload) a integrita polí hlaviček je zajištěna
pomocí autentizační značky (authentication tag), která je získána algoritmem HMAC-SHA-1. Do této
hašovací funkce vstupuje klíč auth_key a užitečná zátěž RTP, výstupem je autentizační značka,
která je přidána do poslední položky zabezpečeného SRTP datagramu.
Použití SRTP autentizační značky je v RFC 3711 doporučeno vždy, zatímco další značka SRTP
MKI je nepovinná
7
1 Přenos sítí Internet v reálném čase
MKI (Master Key Identifier) je prezentován jako hlavní klíč a může být použit pro správu klíčů
(key management), využití je pro účely obměny klíčů během relace, identifikuje konkrétního hlavní
klíč (master_key) užívaného v SRTP, z něj jsou odvozeny další důležité klíče, což je zobrazeno v obr.
1.7. MKI zvyšuje bezpečnost, protože během jedné relace mohou být klíče střídány [v120].
Podívejme se nyní na kryptografické mechanizmy užité v RFC 3711. SRTP definuje používání
režimu šifrování AES-CTR (Counter Mode) anebo AES-f8, přičemž výchozím módem je AES-CTR.
Povinně implementováno musí být šifrování AES-CTR a případně může být nepovinně podporován i
algoritmus AES-f8. Zatím jsme se s implementací algoritmu AES-f8 v SRTP dosud nesetkali, všichni
implementují AES-CTR. V případě f8 jde o aplikaci módu OFB (Output Feedback) a používá se pro
šifrování v UMTS sítích. U OFB se otevřený text sčítá na členu nonekvivalence s výstupním blokem
získaným aplikací blokové šifry, viz. obr. 1.8. První výstupní blok je vytvořen šifrovací funkcí CIPH K z
inicializačního vektoru a je zároveň vstupem do druhého bloku, kde po aplikaci šifrovacího algoritmu
získáme druhý výstupní blok, který je opět vstupem do dalšího.
Šifrový text získáme operací exkluzivní disjunkce, vstupními hodnotami jsou jednak bity
otevřeného textu a jednak bity z jednotlivých výstupních bloků. Jedná se o režim proudové šifry
(stream cipher mode) anebo exaktně řečeno, u OFB dochází k převodu blokové šifry na proudovou.
Čítačový režim CTR, viz. obr. 1.9, je zjednodušenou verzi zpětnovazební šifry OFB, kdy při
šifrování je namísto vazby na předchozí blok použita vazba s hodnotou inkrementálního čítače, viz.
obrázek. Opět dochází převodu blokové šifry na proudovou. CTR rovněž využívá inicializační
hodnotu, která se načte do vstupního registru (Counter 1) a po zašifrování funkcí CIPH K dostáváme
první výstupní blok, který se sčítá na členu XOR s otevřeným textem. Poté doje k aktualizaci čítače
8
1 Přenos sítí Internet v reálném čase
(obvykle přičtením jedničky) a získáváme Counter 2, opět se opakuje jeho šifrování a operace
operací exkluzivní disjunkce s otevřeným textem.
Aktualizace čítače je definována poměrně volně, hodnota nemusí být inkrementována o jedničku,
musí být ovšem splněna podmínka, že obsah čítačů nesmí být stejný.
Podívejme se nyní na aplikaci AES-CTR v SRTP, viz. obr. 1.10. Důvěrnost přenášených dat v
paketu zajišťuje kryptografický primitiv AES, který funguje v tomto případě jako generátor
pseudonáhodných klíčů.
Vstupem do generátoru je šifrovací klíč encr_key a inicializační vektor IV, který sestává z
kontrolního součtu salt key, SSRC a indexu paketu. Výsledný klíč je pomocí logické operace XOR
9
1 Přenos sítí Internet v reálném čase
aplikován na nezašifrovaný obsah paketu, což odpovídá CTR režimu šifrování. Inicializační vektor IV
je získán z rovnice (1.6), ve které SSRC je identifikátor synchronizace, ks je sůl a i je index SRTP
paketu odesílatele
Šifrovací klíče encr_key a salt_key, jsou získány opět pomocí AES-CTR, přičemž jsou odvozeny
z hlavního klíče master_key, viz. obr. 1.11. Problém je ovšem v distribuci hlavního klíče, který je
distribuován během sestavení spojení, v signalizaci SIP se používá SDP (Session Description
Protocol).
Pokud je šifrování provedeno na úrovni SIP, není pochopitelně nutné používat silné
kryptografické algoritmy pro přenášení informací uvnitř SIP, sice je to možné, ale je to zbytečné
plýtvání výpočetním výkonem. Jako ukázku naprosto nevhodné implementace a přenosu šifrovacího
klíče, uvádím příklad zachycený při použití MS Messenger
k=base64:D0c7ni7jtkF+mJJY7bfXioIhnJe6rrckZ46GSTvXElE=
Zda bylo použito base64 či nebylo, to už není zásadní, base64 je triviální způsob kódování, který
lze dekódovat ručně s papírem, tužkou a ASCII tabulkou po ruce a navíc interoperabilita s dalšími
zařízeními bude problematická. Zásadním problémem je zde přenos šifrovacího klíče přímo v SDP
s využitím deskriptoru k=* (encryption key), takto by to opravu býti nemělo.
V dalším příkladu je způsob vyjednávání klíčů popsaného v RFC 4568 z roku 2006, jedná se o
SDES (Security Descriptions for Media Streams). V SDP pod “m“ řádkem s popisem médií se
10
1 Přenos sítí Internet v reálném čase
přidává crypto atribut ve formě “a“ řádku s popisem režimu šifrování obsahu (AES_CM_128_,
F8_128_) a vytvoření autentizační značky (HMAC_SHA1_80, HMAC_SHA1_32).
a=crypto:1 AES_CM_128_HMAC_SHA1_80
inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32
Pod crypto atributem je “inline“ řádek obsahující klíče (master key a salt key) a politiky vztažené
k master klíči, tzn. jak dlouho bude platit (lifetime) a zda se bude používat MKI (master key identifier)
s konkrétním master klíčem "inline:" <key||salt> ["|" lifetime] ["|" MKI ":" length] . Zřetězení dvou klíčů
key||salt je opět kódováno v base64. Níže je uveden příklad použití SDES dle RFC 4568.
Bez použití TLS anebo S/MIME, kterým by bylo zašifrován obsah SDP v SIP relaci, neposkytuje
ani výše uvedené řešení dostatečnou úroveň zabezpečení. S tím nebyl spokojen Philip Zimmermann,
který přišel s dalším vylepšením umožňující bezpečně sestavit klíče na obou komunikujících stranách.
Philip Zimmermann již zanechal ve světě sítí důležitou stopu v oblasti šifrování emailové komunikace
a proslavil se protokolem PGP (PGP Pretty Good Privacy). Jelikož produkt svého intelektu poskytl
v roce 1991 k volnému použití pro tehdy rodící se Internet, tak si zasloužil v USA obvinění z
nelegálního vývozu kryptografického softvéru, na který se tehdy stahovalo embargo a tři roky byl
vyšetřován a pronásledován FBI, než byl zbaven tohoto absurdního obvinění. Návrhem nového
zabezpečení RTP s označením ZRTP se bude zabývat další podkapitola.
ZRTP (Zimmermann Real-time Transport Protocol, RFC 6189) neslouží jako náhrada za SRTP,
ale pouze jako nadstavba pro jeho lehčí použití a implementaci. ZRTP rozšiřuje SRTP protokol o
mechanismus pro počáteční dohodu na klíčích a dokáže chránit i proti útokům zvaných jako MiTM
(Man in the middle). Zimmermann si všiml způsobu distribuce hlavního klíče v SRTP, ve kterém viděl
slabinu a možnost prolomení šifrované komunikace třetí stranou. Zásadním rozdílem je, že výměna
probíhá v dohodnuté trase pro média a zprávy jsou transportovány přes stejné porty jako RTP. Návrh
ZRTP používá při dohodě na klíčích Diffie-Hellmanův algoritmus, komunikující strany si vyměňují
řetězce, ze kterých je odvozen utajený šifrovací klíč, tento klíč se přitom nepřenáší, jeho získání z
přenášených zpráv třetí osobou je velmi časově náročným matematickým problémem řešení
diskrétního logaritmu s velkými čísly. Detekce MiTM útoků se řeší zobrazováním krátkých
11
1 Přenos sítí Internet v reálném čase
autentizačních řetězců SAS (Short Authentication String). ZRTP užívá tři fáze k tomu, aby zjistil a
nastavil potřebné klíče a přešel na SRTP mód:
V první fázi si oba ZRTP účastníci vymění mezi sebou informace o šifrování, dohodnutých klíčích
a způsoby autentizace, které budou používat. Současně ZRTP specifikace tyto šifrovací režimy:
Pro dohodu na klíči se používá ZRTP Diffie-Hellmanův algoritmus. Pro tento algoritmus ZRTP
může využívat dva různé módy:
Princip DH algoritmu je znázorněn na obrázku 1.12, tento algoritmus umožňuje rychle sestavit
tajný klíč, aniž by byl přenesen komunikujícími stranami přenesen, přičemž útočník
odposlouchávající komunikaci by k jeho sestavení potřeboval extrémní výpočetní výkon a čas. DH
algoritmus je postaven na složitosti řešení diskrétního logaritmu. Mějme rovnici g a y , přičemž
známe hodnoty g, y a neznámou a vypočteme jako a log g y , to je triviální problém logaritmu.
Pokud ale aplikujeme funkci modulo p, kde p bude prvočíslo v rovnici g a mod p y , tak dostáváme
12
1 Přenos sítí Internet v reálném čase
netriviální problém tzv. diskrétního logaritmu, výpočet je při použití velkých prvočísel p velmi složitý a
současnými prostředky nezvládnutelný.
Jakmile se pomocí ZRTP vyjednají klíče, tak je nastavena v SRTP kryptografická souvislost a
komunikace se přepne do SRTP módu. Nakonec ZRTP změní některé kontrolní informace, aby si
mohl ověřit, zda celá operace proběhla úspěšně. ZRTP řeší také ochranu proti útoku MITM, kde se
případný útočník snaží řídit a kontrolovat spojení mezi komunikujícími stranami. Pro zamezení
tohoto útoku ZRTP používá metody Short Authentication String (SAS) a Retained Secrets (RS).
Zajímavým projektem implementace ZRTP je Zfone [zph], , který pracuje s běžnými SIP klienty.
Zfone GUI slouží k ujištění volaných, že hovor je šifrován a nebyl detekován útok MiTM. U SRTP
nelze MiTM vyloučit a ani detekovat.
Philip Zimmermann udělal svým návrhem ZRTP velký krok jiným směrem, než by chtěla
jakákoliv vláda, regulátor či úřední moc. Dosud bylo možné spojení odposlechnout a pokud bylo
šifrováno SRTP, tak výměnu klíče odchytit a rozšifrovat, případně šifrovat spojení hop-by-hop. ZRTP
zaručuje šifrování end-to-end a v případě MITM budou jeho uživatelé aspoň upozorněni, že spojení
není bezpečné. ZRTP je významný krok v bezpečném přenosu médií a bude mít značný dopad
zvláště v USA, kde platí od roku 2007 rozšíření CALEA (The Communications Assistance for Law
Enforcement Act) i na IP telefonii. CALEA jsou pravidla právně vynucovaného nahrávání hovorů,
které stanovily Ministerstvo spravedlnosti a FBI. V USA platí CALEA pro všechny poskytovatele
telefonních služeb a od roku 2007 nevyjímaje poskytovatele hlasových služeb na VoIP. I tito
poskytovatelé musí v USA poskytnout asistenci při nahrávání hovorů, to platí i např. pro Skype,
pokud je alespoň jeden účastník spojení v USA.
V roce 2000 bylo uvolněno RFC 2833 (RTP Payload for DTMF Digits, Telephony Tones and
Telephony Signals), které specifikuje způsob přenášení tónové volby a obecně tónů pomocí RTP
protokolu. Dnes je RFC 2833 nejpoužívanější způsob pro přenos DTMF (tónové volby). Pomocí RFC
2833 či RFC4733 lze obecně přenášet tóny, jde o způsob přenosu out-of-band, čili mimo hovorové
pásmo, tóny jsou popsány určitou formou (u DTMF postačí čísla, lze i kmitočet) a příjemce je
generuje z popisu.
Druhý způsob přenosu in-band vyžaduje použití PCM a tóny v pásmu 300-3400 Hz jsou
přenášeny v digitalizované podobě dané standardem ITU-T G.711. Třetím způsobem je přenos
pomocí SIP metody INFO, který je používán zřídka. Pro přenos DTMF se dle výše uvedeného
používají tři způsoby:
RFC 4733 z roku 2006 plně nahrazuje RFC 2833 z roku 2000 a je s ním zpětně kompatibilní.
Původní RFC definuje dva typy formátů:
13
1 Přenos sítí Internet v reálném čase
Informace jsou přenášeny v RTP a níže uvedený příklad ukazuje přenos čísla 112, pole digit
nese přenášená DTMF čísla (112), pole duration indikuje dobu vysílání tónu (při výchozím
vzorkování 8 kHz jsou doby trvání 200ms, 250ms a 50ms. Pole timestamp offset prezentuje časovou
souslednost vysílaných tónů, první znak 1 znamená začátek časové osy 0 sec, z druhé hodnoty
4800/8 kHz určíme, že další znak 1 začne být reprodukován 800 ms od začátku přehrávání prvního a
poslední 11200/8Kz říká, že třetí znak 2 začne být reprodukován po 1,4 sec. od začátku generování
prvního.
Novější RFC 4733 na rozdíl od RFC 2833 přidává tři nové procedury:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
| 2 |0|0| 0 |0| 96 | 28 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
| 11200 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
| 0x5234a8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| block PT | timestamp offset | block length |
|1| 97 | 11200 | 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| block PT | timestamp offset | block length |
|1| 97 | 11200 - 6400 = 4800 | 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| Block PT |
|0| 97 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| digit |E R| volume | duration |
| 1 |1 0| 7 | 1600 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| digit |E R| volume | duration |
| 1 |1 0| 10 | 2000 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| digit |E R| volume | duration |
| 2 |0 0| 20 | 400 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Obr. 1.13. RTP paket dle RFC 2833 po volbě čísla 112
14
1 Přenos sítí Internet v reálném čase
Stream Control Transmission Protocol je transportní protokol RFC 4960 (2007), který byl navržen
IETF skupinou Signaling Transport (SIGTRAN), která především řešila přenos SS7 přes IP. Jedním z
požadavků bylo vytvoření několika nezávislých kanálů přepravovaných paralelně, což je největší
odlišností SCTP od transportních protokolů jako je UDP a TCP. Po navázání spojení (asociaci), lze
přenášet několik navzájem nezávislých toků (streams), v rámci každého toku je garantováno
doručení ve správném pořadí a jednotlivé toky se navzájem neovlivňují, čili výpadek, opakování,
zdržení v jednom nemá vliv na další a jejich komunikace pokračuje bez přerušení či pozdržení. SCTP
je velmi zajímavým protokolem, ve VoIP se ovšem neprosadil. SCTP má jednodušší strukturu než
UDP či TCP: Hlavička 12B obsahuje Source port, Destination Port, Verification tag a Checksum,
následně zbytek datagramu tvoří Chunks (balíky – porce dat), viz. obr. 1.14.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port Number | Destination Port Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Verification Tag |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Chunks - doručení probíhá v balících a eliminují se chybějící bloky obdobně jako u TCP
Výběr a sledování trasy - SCTP monitoruje všechny trasy, jedna je vybrána jako primární,
v případě problémů se přechází na další alternativní
15
1 Přenos sítí Internet v reálném čase
V řetězci cesty audia od odesílatele k příjemci nacházíme tři podstatná místa, viz. obr.1.15 [v111]:
Místa výše uvedená jsou zdrojem zpoždění, které může zásadním způsobem ovlivnit výslednou
kvalitu řeči. Komponenty zpoždění v souladu s jejich umístěním můžeme klasifikovat následovně:
Při zpracování audio signálu na straně odesílatele dochází k následujícím operacím [v111]:
Při přenosu audia IP sítí dochází k časovému posunu mezi RTP pakety především vlivem jejich
řazení ve frontách na směrovačích, viz. obr. 1.17 a vzniká jitter, což bylo již vysvětleno v kapitole 1.2.
Na tento problém bylo pamatováno při návrhu standardu RFC 1889 pro RTP protokol a v hlavičce
paketu je přenášena položka Timestamp vyjadřující vzorkovací značku v RTP paketu odvozenou od
lineárního časovače. Díky této značce je možné jitter přesně rozpoznat a jeho vliv eliminovat. Na
straně příjemce je přijatý paket zařazen do vyrovnávací mezipaměti (de-jitter buffer neboli playout
buffer), tím je minimalizován vliv rozptylu zpoždění, viz. obr. 1.16. Následně jsou data z mezipaměti
předávány k dekódování, mezipaměť je vhodné nastavit na násobky dob trvání kódovaných
hlasových fragmentů při paketizaci (např. 60 ms je nejvhodnější, neboť vyhovuje pro kódování G.711,
G.729 i G.723.1.), některá zařízení umožňují samokorekci velikosti mezipaměti a pomocí adaptivních
algoritmů přizpůsobují její hodnotu aktuální situaci.
17
1 Přenos sítí Internet v reálném čase
Základními kroky předcházející odeslání hlasu v RTP paketu je kódování určitým typem kodeku
a paketizace. RTP pakety jsou odesílány v dedikovaných intervalech a načasování odeslání bude
záviset jednak na velikosti užitečné zátěže a jednak rychlosti výstupního toku z kodéru. Základní
rovnice, která vyjadřuje časování odesílání RTP je vyjádřena jako
PS
t= (1.7)
CR
kde t [s] je časování, PS [b] je velikost užitečné zátěže a C R [bit/s] představuje rychlost
proudu bitů z kodéru. Informace o časování jsou uloženy v RTP paketech v časových značkách
(timestamp) a mohou být zpětně získány, viz. vztah (1.1). Na aplikační vrstvě můžeme do vztahu (1.8)
vyjádřit jednak payload PS a velikost RTP hlavičky H RTP , což je 12B.
Nyní je důležité vyjádřit velikost dalších hlaviček v jednotlivých vrstvách OSI modelu, což je
3
provedeno jako suma H
j 1
j . Jednak se jedná o 8B na UDP, 20B na IP poté 26B v případě
Ethernetu jako velikost polí v rámci IEEE 802.3. Nyní můžeme vyjádřit hodnotu BW M nárokovaného
pásma RTP toků pro M hovorů jako sumu jednotlivých příspěvků velikosti rámců SFi , které je nutné
přenést v intervalu t :
M
SFi
BWM (1.9)
i 1 t i
Pokud všechny hovory používají stejný kodek, tak (1.7) a (1.8) do vztahu (1.9) získáváme pro
výpočet nároků všech RTP toků (1.10).
3
H
RTP j 1 H j
BWM M CR 1 (1.10)
P
S
Z výše uvedené rovnice můžeme graficky vyjádřit, jak závisí nárokované pásmo na velikosti
užitečné zátěže v RTP a počtu hovorů, obr. 1.18. Ve 3D zobrazení vidíme, že s klesající velikostí
užitečné zátěže rostou nároky na pásmo, což je způsobeno režií hlaviček, jejichž poměr vůči
klesajícímu množství přenášené informaci roste.
18
1 Přenos sítí Internet v reálném čase
1.10 Kodeky
Kodek je zařízení nebo algoritmus, který slouží ke zmenšení jinak zbytečně velkého objemu
audiovizuálních dat. Slovo kodek vzniklo složením slov kodér a dekodér, tj. zařízení jež je na jedné
straně schopné data zakódovat a na druhé straně opět rozkódovat. Při použití osobního počítače je
typicky vstupem kodeku zvuková karta, data získaná z mikrofonního vstupu kodér zpracuje a předá
je RTP vrstvě, vzniklé protokolové datové jednotky se enkapsulují v jednotlivých vrstvách OSI
modelu, až jsou nakonec vyslána příjemci. Přijatá data převede do původní podoby dekodér a pošle
na audio výstup zvukové karty. Kodeky velmi často používají ztrátovou kompresi a proto dekódovaná
data nejsou totožná s daty, která byla zakódována.
Tato kapitola je věnována popisu kodeků, které se v IP telefonii nejčastěji vyskytují. Zdrojem
hovorového signálu jsou řečové orgány, které se skládají z hlasivek, hrdelní dutiny, ústní dutiny,
nosní dutiny, měkkého a tvrdého patra, zubů a jazyka. Zdrojem buzení této soustavy jsou plíce ve
spolupráci s dýchacími svaly. Vlivem tlaku proudu vzduchu vycházejícího z plic dochází k jeho
modulaci hlasivkami. Kmitočet závisí na tlaku vzduchu na svalovém napětí hlasivek. Kmitočet
hlasivek je charakterizován základním tónem lidského hlasu, který tvoří základ znělých zvuků.
Kmitočet základního tónu je různý u dětí, dospělých, mužů i žen, pohybuje se většinou v rozmezí 150
až 400 Hz. V klidu je štěrbina hlasivek otevřena a proud vzduchu volně prochází hlasivkami.
Vytvářený zvuk je po průchodu hlasivkami formován ústní dutinou a je vyřazován do volného
prostoru. Sdělení zprostředkované řečovým signálem je diskrétní, tzn. může být vyjádřeno ve tvaru
posloupnosti konečného počtu symbolů. Každý jazyk má vlastní množinu těchto symbolů - fonemů,
většinou 30 až 50. Lidská řeč je souvislý časově proměnný proces, z toho plyne i náročnost popisu
lidské řeči a jejího modelování. Hovorový signál snímáme mikrofonem, který převádí modulovaný
proud vzduchu na elektrický signál. Přístupy ke kódování jsou následující:
19
1 Přenos sítí Internet v reálném čase
kódování vlny (waveform coding), zpracování vychází z přeměny hovorového signálu ve tvaru
elektrického signálu. Tento signál je vzorkován, kvantován a následně kódován,
kódování parametrů zdroje hovorového signálu (Source Coding),
a hybridní, do této kategorie patří kodeky založené na adaptivních predikčních metodách, na
metodách vektorové kvantizace, složkovém kódování anebo adaptivním transformačním
kódování.
1.10.1 PCM
Nejznámější a nejpoužívanější kodek je PCM ITU-T G.711, výstupem kodéru je bitový tok 64
kbit/s. Kódování PCM (Pulse Code Modulation) se sestává ze tří kroků:
1.10.2 ADPCM
Kódování ADPCM (Adaptive Differential Pulse Code Modulation) vychází z DPCM. Kódování
DPCM (Differential Pulse Code Modulation) je modifikací PCM kódování, nekódují se navzorkovaná
data, ale jejich rozdíl oproti odhadnutému průběhu signálu, průběh signálu je možné částečně
odhadnout, navzorkovaný průběh a odhadnutý průběh jsou si podobné, výsledný rozdíl má mnohem
menší dynamický rozsah a je možné ho zakódovat pomocí menšího počtu bitů, tedy množství
přenášených dat se snižuje. ADPCM je vylepšeno tak, že generátor srovnávacího průběhu je
adaptivní a přizpůsobuje se konkrétní řeči, která se kóduje. Výsledkem je ještě menší dynamický
rozsah než v případě DPCM a tedy opět menší počet bitů nutný k zakódování. Kromě toho se mění i
vlastnosti kvantifikace pro charakteristiku konkrétní řeči. Nejznámějším představitelem ADPCM je
ITU-T G.726 (32 kbit/s), ale jsou možné i jiné rychlosti výstupního toku z kodéru v závislosti na
20
1 Přenos sítí Internet v reálném čase
použitém adaptivním algoritmu, G.726 a G.727 umožňují 40, 32, 24 a 16 kbit/s. Vůbec prvním
standardem ADPCM bylo doporučení ITU-T G.721 pro 32 kbit/s. LPC
LPC (Linear Predictive Coding) je způsob kódování založený na úplně jiném principu než PCM
nebo ADPCM, ty vycházely z kvantifikace průběhu signálu. Metoda LPC vychází naopak ze znalostí
o mluvícím traktu (tj. hlasivkách a krku). Tato metoda se snaží vytvořit model hlasového ústrojí
člověka. LPC využívá předpokladu že hlasový signál je generován bzučákem na konci trubky,
štěrbina mezi hlasivkami produkuje bzukot, který je charakterizován hlasitostí a frekvencí. Mluvící
ústrojí (krk, ústa) vytváří trubku, která je charakterizována svými rezonancemi nazývanými formanty.
LPC analyzuje řeč aproximováním formantů, odstraněním jejich působení z hlasového signálu a
odhadem intenzity a frekvence zbývajícího signálu, který je generován hlasivkami. Proces
odstranění formantů se nazývá inverzní filtrování. LPC vytváří signál řeči obráceným procesem,
vygeneruje se signál s příslušnou hlasitostí a frekvencí a z formantů se vytvoří filtr. Tímto filtrem se
potom vygenerovaný signál zpracuje a výsledkem je signál podobný původnímu signálu řeči. Protože
vstupní signál se mění v závislosti na čase, je nutné tento proces opakovat pro kratší časové
intervaly, tzv. rámce. Pro rozumnou kvalitu výsledné řeči se používá 30 až 50 rámců za vteřinu.
Představitelem je LPC kodek s výstupním tokem 4,8 kbit/s nebo kodek LPC-10 s tokem 2,4 kbit/s.
1.10.3 CELP
Kódování CELP (Code Excited Linear Prediction) zásadně vylepšuje LPC. Problém metody LPC
je v tom, že to, co zbude po odfiltrování formantů, není pouze signál bzučáku. Důvodem je, že v řeči
se vyskytují složky reprezentující třeba sykot. Takovéto zvuky nebudou jednoduchým LPC kodekem
správně aproximovány. Nepřesnosti při odhadu formantů způsobí, že více informací o signálu
zůstane v reziduu (zbytek po odfiltrování formantů). To platí pro zvuky které neodpovídají
21
1 Přenos sítí Internet v reálném čase
jednoduchému LPC modelu, platí to například pro zvuky generované různou pozicí jazyka atd. Tedy
reziduum obsahuje důležité informace o tom, jak má řeč znít, tyto informace se zakódováním pomocí
LPC ztratí, protože reziduum se zakóduje pouze pomocí dvou parametrů, frekvence a amplitudy
signálu. Vzniká tedy otázka, jak reziduum zakódovat lépe tak, aby se příliš nezvýšil nárok na šířku
pásma a tyto důležité informace se přitom neztratily.
Jednou z nejúčinnějších metod je použití codebooku. Kódová kniha je tabulka obsahující typické
průběhy rezidua. Kodér potom porovnává průběh rezidua s hodnotami v tabulce a použije tu, která
odpovídá nejvíc, index této hodnoty z tabulky se potom přenáší. Druhá strana má stejnou tabulku a
po příjmu indexu dokáže průběh rezidua z tabulky obnovit, toto reziduum potom slouží jako budič pro
filtr aproximující formanty. Výsledkem je lepší aproximace hlasového signálu než v případě
jednodušší metody LPC. Tato metoda se nazývá Code Excited Linear Prediction, zkratka CELP. Aby
metoda CELP správně fungovala, tabulka obsahující typické průběhy rezidua musí být velmi
rozsáhlá, pokud je ale tabulka velká, bude vyhledávání v tabulce trvat rovněž velmi dlouho. Dalším
problémem je, že tabulka by musela obsahovat vzorky pro různě vysoký hlas, taková tabulka by však
byla extrémně rozsáhlá. Tento problém se řeší vytvořením dvou tabulek. Jedna tabulka je vytvořená
při tvorbě kodeku a obsahuje vzorky pro právě jednu výšku hlasu. Druhá tabulka je adaptivní, ze
začátku je prázdná a průběžně se plní předešlými vzorky rezidua zpožděnými o určitou hodnotu.
Právě hodnota zpoždění určuje výšku hlasu, popsaný algoritmus poskytuje dobrou kvalitu přenášené
řeči už při šířce pásma 4,8 kbit/s. Typickými představiteli jsou ACELP dle G.723.1 s tokem 5,3 kbit/s,
CS-ACELP dle G.729 s tokem 8kbit/s anebo LD-CELP dle G.728 s tokem 16 kbit/s.
Mezi modifikace CELP patří ACELP (Algebraic Code Excited Linear Prediction), LD-CELP (Low
Delay Code Excited Linear Prediction) a CS-ACELP (Conjugate Structure Algebraic Linear Code
Prediction). Následně si popíšeme nejpoužívanější kodeky, ty jsou specifikovány v doporučeních
ITU-T:
G.711 je základní kodek PCM, který se používá i v klasické telefonní síti. Kvalita přenášeného
hlasu je totožná s kvalitou hlasu při běžném telefonním hovoru, MOS má hodnotu 4,2, rámec
trvá 0,125 ms;
22
1 Přenos sítí Internet v reálném čase
G.723.1 používá buď kódování MP-MLP nebo ACELP. První typ kódování vyžaduje šířku
pásma 6,3 kbit/s, druhý typ 5,3 kbit/s. Jeden rámec obsahuje úsek trvající 30 ms a MOS
skóre je 3,9 při použití kódování MP-MLQ a 3,65 při použití ACELP;
G.726 kodek používá kódování ADPCM, potřebná šířka pásma je 16, 24, 32 a 40 kbit/s.
Kodek může zpracovávat bloky různé délky podle toho, jak velké zpoždění je požadováno,
pro 32 kbit/s se uvádí MOS=3,85;
G.728 používá kódování LD-CELP. Potřebná šířka pásma je 16 kbit/s, MOS skóre je přibližně
3,6;
G.729 Použité kódování je CS-ACELP - Conjugate Structure Algebraic Code Excited Linear
Prediction. Rámec trvá 10 ms a potřebná šířka pásma je 8 kbit/s, MOS je hodnocen 3,92;
GSM kodek, šířka pásma je 13 kbit/s (Full Rate GSM FR). Kodek je založen na kódování LPC.
Dalším rozšířením v roce 1997 byl kodek GSM EFR (Enhanced Full Rate, GSM 06.60) s
rychlostí 12,2 kbit/s a rámcem 20 ms (obsahuje 244 bitů). V roce 1998 přišlo další kódovací
schéma, a to AMR kodek (Adaptive Multi-Rate), který je používán i v UMTS. AMR používá
ACELP techniku kódování a rychlosti se pohybují od 4,75 (AMR 4,75) do 12,2 kbit/s (AMR
12,2). AMR 12,2 je kompatibilní s GSM EFR.
iLBC - internet Low Bit Rate Codec, tento kodek byl vyvinut firmou Global IP Sound, potřebná
šířka pásma je 13.33 kbit/s, rámec obsahuje úsek trvající 30 ms. Kodek umožňuje elegantní
snížení kvality přenášeného signálu v případě zpoždění nebo ztráty paketů. Použitý
algoritmus je Block Independent Linear Predictive Coding. Každý rámec je komprimován na
399 bitů, které se potom přenáší.
G.722 je wideband hlasový kodek z roku 1988 pracující se šířkou pásma 50Hz-7 kHz
s typickým výstupním proudem 64 kbit/s., technologie je postavena na SB-ADPCM (sub-band
ADPCM). Dalšími 7 kHz wideband kodeky jsou G.722.1 a G.722.2, tyto kodeky nejsou
deriváty původní G.722, ale využívají jiné kompresní algoritmy. G.722.1 (Siren codec) se
vyznačuje výkonnou kompresí s typickým proudem 24 nebo 32 kbit/s. Novější G.722.2 známá
jako AMR-WB (Adaptive Multirate Wideband) vychází z ACELP kódování a vyznačuje se
jednak silnou kompresí (až 6,6 kbit/s) a schopností adaptovat kompresní algoritmus na
aktuální situaci.
V tabulce 1.2 můžeme vidět srovnání nejpoužívanějších kodeků, ve čtvrtém sloupci tabulky je
uvedena typické časování odesílání paketů, v dalším sloupci je doba trvání rámce a po sečtení s
23
1 Přenos sítí Internet v reálném čase
V posledním řádku je použit kodek G.729A, což je dodatek ke kodeku G.729, tento dodatek
implementuje G.729 s nižší výpočetní náročností, G.729A vyžaduje pouze 11 MIPS, klesá ale MOS
na 3,6. Dalším používaným dodatkem G.729 je implementace detekce ticha VAD s označením
G.729B, často najdeme i kodek s oběma dodatky s označením G.729AB.
Implementace VAD do G.723.1 je označována jako G.723.1A. VAD (Voice Activity Detection)
nebo taky někdy označována jako SS (Silence Suppression) je funkce potlačení ticha, ticho během
hovoru se nepřenáší, neboť nenese žádnou informaci. V průměrném hovoru ticho tvoří 40-60%
celkové doby spojení. Během ticha se tedy nebudou přenášet RTP pakety a u příjemce se zapne
generování šumu CNG (Comfort Noice Generator). Princip aktivace a deaktivace SS je založena na
překročení prahových úrovní odstupu signálu od šumu, pokud se detekuje úroveň signálu
setrvávající stanovený čas pod či nad prahovou úrovní, tak se aktivuje či deaktivuje SS. V praxi je
ovšem zkušenost taková, že funkce VAD může způsobovat ořezávání prvních slabik slov po
odmlkách, jelikož aktivace je záležitostí typicky cca 20 ms, funkce VAD proto není používána při
broadband konektivitě. Cisco IOS má pro aktivaci a deaktivaci jednoduché příkazy , a to VAD a no
VAD, pokud ovšem není použita G.729B či G.723.1, potom je VAD součástí kodeku a funkce se
nedá řídit.
24
2 Standard ITU-T H.323
25
2 Standard ITU-T H.323
Za vývojem rodiny protokolů H.32x stojí mezinárodní telekomunikační unie ITU-T. H.32x rodina
řeší multimediální komunikace přes různé sítě, a to:
Doporučení H.323.v1 z roku 1996 ve verzi 1 popisuje terminály, zařízení a služby pro
multimediální komunikaci v lokálních počítačových sítích LAN bez garance kvality služby. Terminály
H.323 mohou přenášet hlas, data a video, nebo kombinaci služeb včetně videotelefonie. Evoluce
standardu H.323 přinesla další verze, v roce 1998 byla přijata verze 2, která řešila především
vylepšení H.245, nástroj QoS pomocí rezervačního protokolu RSVP a autentizaci standardem H.235.
Další verze 3 je z roku 1999 a přispěla především v oblasti doplňkových služeb, které řeší
doporučení H.450. Nové služby přináší i verze 4 z roku 2000, v roce 2003 byla uvolněna verze 5,
která řeší i podporu ENUM (univerzální identifikátory, vazba DNS a E.164), z roku 2006 je verze 6 s
vylepšeným zálohováním (hot standby) a poslední verze 7 je z roku 2009.
H.323v1 byla uvolněna v únoru 1996 jako Vizuální telefonní systém a zařízení pro LAN bez
poskytování garantované kvality služeb. Jedna z prvních implementací se objevuje v MS Windows
pod označením NetMeeting. Standard specifikuje komponenty, protokoly a procedury, které poskytují
služby multimediální komunikace přes paketové sítě. První verze neřeší bezpečnost a má problém s
vyjednáváním médií během sestavování spojení, později tato vlastnost dostává název Slow-Start.
26
2 Standard ITU-T H.323
H.323v3 v následujícím roce 1999 reaguje především na zoufalé naléhání vývojářů na zmenšení
obsáhlosti doporučení, neboť nejsou schopni plně implementovat celý H.323 stack, který je nesmírně
rozsáhlý a robustní, přichází nová vylepšení:
Simple Endpoint Terminal (SET) definovaný v Annex F, což je ořezaná H.323 pouze pro
audio, objevuje se řada výrobců HW telefonů s H.323,
H.450.x – přidržení hovoru, parkování, převzetí volání, indikace čekající zprávy a
čekajícího hovoru (call hold, call park, pickup, MWI, call waiting),
H.341 – MIB (Management Information Base) pro SNMP, je možné přes SNMP provádět
základní správu H.323, vyčítat stavy a provádět dohled.
H.323v5 z roku 2003, která přinesla již v začátku kapitoly zmiňované vylepšení podpory URL a
spolupráci s DNS, nejvýznamnějšími přínosy jsou:
assigned GK, model přidruženého GK, který umožňuje režim hot standby (H.323 síť při
výpadku GK okamžitě konverguje do provozuschopného stavu s přidruženým GK),
vylepšení H.235 – bezpečnost a SRTP,
27
2 Standard ITU-T H.323
single transmitter multicast , umožňuje otevřít multicast (výhodné např. pro Music on
Hold),
procedura Common Alerting Protocol (CAP) definuje nové zprávy pro použití v nouzové
komunikaci, umožňuje rozesílat nouzové zprávy a varování
Situace ve studijní skupině SG 16, která stojí za H.323 je nejasná, v roce 2007 byl oznámen
vývoj nového protokolu H.235, který by měl nahradit SIP i H.323 a měl by být použit v sítích NGN.
Jeho uvolnění bylo oznámeno na rok 2009, ale zprávy o postupu prací nelze najít a domnívám se, že
organizace ITU-T se smířila s faktem, že pro NGN byl vybrán SIP a sdružení IETF bylo úspěšnější.
Nelze říct, že v IETF byl vyvinut lepší protokol pro multimediální komunikaci, SIP uspěl díky své
jednodušší koncepci, otevřenosti a vůli vývojářů se dohodnout. Vývoj aplikací na SIPu je sice levnější,
ale má evidentně větší problémy v interoperabilitě, které se i více než deset let po jeho uvedení stále
vyskytují a řeší.
Hovor je přenášen na RTP/RTCP protokolech. RTP přenáší konkrétní hovor a RTCP přenáší
stavové a řídící informace. Signalizace, s výjimkou RAS, je přenášena spolehlivě přes TCP.
Následující protokoly se zabývají signalizací:
V případě H.323 jsou signalizační informace k hovoru dány doporučením H.225.0, které využívá
obou protokolů UDP i TCP, standardně řídící prvek sítě (Gatekeeper) naslouchá signalizaci
H.225.0/RAS na portu UDP 1719 a případně i na 1718 (pro multicast 224.0.1.41, povoleno pro
zprávy GRQ a LRQ), hovorová signalizace spojení H.225.0/Q.931 se přenáší na portu TCP 1720.
Navíc je tu další část signalizace dle ITU-T H.245 pro vyjednávání parametrů audia/videa, která je
postavena na TCP, od verze H.323v2 je pomocí metody Fast Connect schopná většinu informací
přenést v H.225.0/Q.931.
28
2 Standard ITU-T H.323
H.323 protokoly jsou zobrazeny na obr. 2.2. Všechny H.323 terminály musí podporovat audio.
Podpora pro video a data jsou volitelné. Ve třetí verzi H.323 byl specifikován terminál SET (Simple
endpoint Terminal), který je zredukovanou verzi audio terminálu H.323.
RAS (Registration, Admission and Satus) je komunikační protokol pro Gatekeeper (dále
jen GK), pokud jakékoliv zařízení (terminál, brána, další gatekeeper) komunikuje s GK,
tak používá RAS zprávy,
H.225.0/Q.931 protokol v H.323 je nazýván jako signalizace volání (Call signaling) a
obsahuje zprávy pro inicializaci i ukončení spojení (SETUP, ALERTING, CONNECT,
RELEASE COMPLETE, atd..), koncepce byla převzata z ISDN,
H.245 je označován jako protokol řízení médií (media control), obsahuje procedury pro
vyjednání kodeků a portů pro RTP toky, pro každý směr zvlášť.
Jak jsme si již vysvětlili v předešlé kapitole, nezbytnou součástí H.323 audio terminálu je
vyrovnání zpoždění doručovaných RTP paketů, neboť jitter by znemožnil kontinuální dekódování.
Maximální velikost zpoždění mezi odesílatelem a příjemcem je 150 ms, což je podmínka pro spojení
s vysokou kvalitou, rozsahy zpoždění definuje ITU-T G.114.
Na obr. 2.3 jsou vyobrazeny komponenty v H.323. Prvky sítě H.323 tvoří koncové body EP
(endpoints) a řídící prvky GK (gatekeepers). Množina EP registrovaná ke stejnému GK tvoří zónu,
zónu můžeme chápat jako logickou oblast spravovanou GK, v jedné zóně nemůžeme provozovat
více GK. Existuje způsob zálohování GK, kdy více GK se může postarat o EP, ovšem veškeré EP
29
2 Standard ITU-T H.323
jsou přihlášeny vždy v danou chvíli jen k jednomu GK. Zálohování je prováděno na principu
přeregistrace EP a replikací směrovacích tabulek, které více GK sdílí mezi sebou. Kupříkladu
budeme mít dva identické GK, jeden v Praze, druhý v Ostravě, EP geograficky náležející Moravě
budou přihlášeny na GK v Ostravě, zbytek bude registrován na pražském. Oba GK si mezi sebou
synchronizují směrovací informace (sousední GK a hlasové brány k výstupu z H.323 sítě). V případě
vypnutí ostravského, pošle tento GK všem EP v jeho zóně požadavek na přeregistrování do Prahy.
Pokud by došlo k nekorektnímu vypnutí a GK by už neměl možnost komunikovat EP, tak i na to je
pamatováno, jelikož už při první registraci EP na GK, je předán list s alternativními GK seřazenými
dle priorit, pro případ výpadku. Protože registrace EP na GK platí omezenou dobu, tak je zajištěno,
že mrtvá zóna vždy nakonec zkonverguje do jiné, pokud má ovšem kam.
H.323 infrastruktura je logicky rozdělena do zón. Zóna je množina zařízení řízených jedním GK.
V H.323 rozeznáváme následující komponenty:
Endpoint (koncový bod, zařízení), tím může být MCU, brána GW nebo terminál TE,
Gatekeeper (řídící prvek sítě),
GW (Gateway) je brána zajišťující propojení s telefonní sítí, obsahuje tedy zpravidla navíc ISDN
rozhraní (případně jiné) a DSP procesory pro podporu více kodeků, dle výkonu, kapacity, typu
rozhraní a podporovaných kodeků se odvíjí i cena.
telefonů, cena pochopitelně záleží na výkonu zařízení (implementované funkce, podpora kodeků,
NAT, 802.1Q, diffserv, napájení 803.af, miniswitch uvnitř, apod..).
Gatekeeper je řídicím prvkem H.323 koncových bodů (terminal, gateway, MCU). Dle standardu
H.323 musí zajišťovat následující:
Dále GK obvykle podporují autorizaci volání (Call authorization). Autorizace jednotlivých volání
se provádí dle identifikačních kódů a umožňuje zavést hovorový kredit. GK může zajišťovat Least
Cost routing, optimalizaci směrování cestou nejnižších nákladů a možnosti nastavení záložního GK
(standby GK).
RAS signalizace zajišťuje řídicí funkce spojení v H.323 sítích. Kanál RAS je sestavován mezi
koncovými body a GK. Nalezení GK probíhá z H.323 koncových bodů sítě automaticky nebo
manuálně. Manuální způsob spočívá v pevném nastavení IP adresy, automatické vyhledání vyžaduje
mechanizmus známý jako auto discovery. UDP discovery port je 1718 a GK UDP registrační port je
1719. Pomocí zpráv multicast je vyhledán GK na IP adrese 224.0.1.41. RAS zpráv jsou následující:
Následující obr. 2.4 znázorňuje mechanizmus navázání spojení přes RAS signalizaci, hlasové
brány VoGW-A a VoGW-B se při startu registrují ke GK, kde předají svou IP adresu, H.323 Id
(identifikaci typu alias) a prefix Id (identifikaci typu E.164). GK zapíše tyto informace do směrovací
tabulky. Registrace má obvykle omezenou platnost a je vyžadováno její obnovování, pokud EP tak
nečiní, tak GK si opětovnou registraci vyžádá. Pokud je z VoGW-A vysláno na GK číslo, které
31
2 Standard ITU-T H.323
obsahuje řetězec začínající prefixem Id VoGW-B, potom GK ve zprávě ACF (Admission Confirm)
vrací příslušnou IP adresu a zprávy signalizace Q.931 jsou přenášeny přes H.225 protokolem TCP.
H.245 otevírá logický kanál pro řízení spojení a vlastní hovor je již přenášen protokolem RTP. Během
spojení GK monitoruje zprávou Status Enquiry, zda je spojení ještě aktivní. Při ukončení spojení
musí proběhnout ukončení logického spojení (H.245) a následně se mezi GK a koncovým bodem
vyměňují zprávy DRQ/DCF (Disengage Request/Confirm).
CryptoToken jako hash získaný pomocí MD5 a prozradí i některé vstupní parametry jednosměrné
hashovací funkce, ačkoliv ten nejdůležitější (heslo) tají, uživatelské jméno a heslo je uloženo v
útrobách terminálu.
Gatekeeper srovná zaslaný autentizační řetězec s vlastním výsledkem výpočtu MD5 funkce
(pochopitelně musí znát všechny parametry do funkce vstupující) a pokud sedí, tak uživatel je
úspěšně autentizován a registraci potvrdí v RCF, případně upraví dobu registrace. Zachycená
zpráva RRQ:
H.225.0 RAS
RasMessage: registrationRequest (3)
callSignalAddress: 1 item
Item 0
Item: ipAddress (0)
ipAddress
ip: 192.168.1.10 (192.168.1.10)
port: 1164
terminalAlias: 2 items
Item 0
Item: h323-ID (1)
h323-ID: 950012305
Item 1
Item: dialedDigits (0)
dialedDigits: 950012305
timeToLive: 120
cryptoTokens: 1 items
Item 0
Item: cryptoEPPwdHash (0)
cryptoEPPwdHash
33
2 Standard ITU-T H.323
H.225.0 RAS
RasMessage: admissionRequest (9)
admissionRequest
endpointIdentifier: 7254_gk1ext
destinationInfo: 1 item
Item 0
34
2 Standard ITU-T H.323
H.225.0 RAS
RasMessage: admissionConfirm (10)
admissionConfirm
callModel: gatekeeperRouted (1)
gatekeeperRouted: NULL
destCallSignalAddress: ipAddress (0)
ipAddress
ip: 195.113.222.2 (195.113.222.2)
port: 1720
irrFrequency: 120
Monitorování koncových bodů je prováděno průběžně během spojení zprávami IRQ/IRR, což je
Information Request/Response. Status Enquiry je zpráva, kterou GK používá k ověření, zda je volání
ještě stále aktivní. Řízení pásma předchází sekvence řízení přístupu ARQ/ACF, nicméně šířka
přiděleného pásma může být změněna i během hovoru. K řízení pásma jsou v RAS signalizaci
definovány zprávy BRQ/BCF/BRJ, což je Bandwidth Request/Confirm/Reject. Pro ukončení hovoru
35
2 Standard ITU-T H.323
Další procedura popsaná v RAS signalizaci je určení umístění koncového bodu sítě, viz. obr. 2.7,
jestliže je volání terminováno na koncový bod, který není přihlášen v zóně inicializující spojení.
LRQ/LCF/LRJ znamená Location Request/Confirm/Reject. Zprávou LRQ se posílá požadavek na
E.164 adresu např. v případě, že koncový bod je mimo vlastní zónu GK. Řízení přístupů v H.323 síti
je zajištěno v RAS signalizaci pomocí zpráv ARQ/ACF/ARJ, pokud se podaří vyhledat umístění
volaného, tak je zasláno potvrzení ACF, proto potvrzení ACF logicky následuje až po přijetí LCF.
Signalizace RAS zajišťuje vždy komunikace čehokoliv s Gatekeeperem, viz. obr. 2.8,
nevypovídá o tom, zda bylo spojení navázáno, jak dlouho trvalo vyzvánění, z RAS nelze sestavit
záznam o spojení CDR (Call Detail Record).
Standardně se pro RAS používá UDP s cílovým portem 1719 pro unicast, v případě multicastu
pak 1718 (GRQ), pomocí GRQ se dá v síti vyhledat GK. Další signalizací je H.225.0 Call Signalling,
čímž se myslí signalizace volání Q.931. Ta je znázorněna na dalším obr. 2.9. Obsahem této
signalizace jsou zprávy, které slouží k sestavení a ukončení spojení mezi koncovými terminály.
Standardně se používá TCP s cílovým portem 1720. Aby tato signalizace mohla proběhnout, tak
musí být známa cílová IP adresa a Q.931 port, což se zjistí ze zprávy RAS ACF. Přes Q.931 se
36
2 Standard ITU-T H.323
může v jednom TCP spojení přenášet i signalizace pro média (H.245 tunneling) anebo alespoň část
(H.245 Fast Connect).
Setup
Call Proceeding
Alerting
Information
Release Complete
Facility
Progress
Status
Setup Acknowledge
Notify
Connect
Při ukončení spojení se posílá pouze Release Complete na rozdíl od ISDN, kde se posílá
Disconnect, Release a Release Complete, u H.323 je Q.931 přenášena spolehlivým transportním
protokolem TCP, a proto se upustilo od potvrzování přijetí odpovědi. Q.931 nemusí být přenášena
přímo mezi EP, H.323 signalizace umožňuje v zásadě dva režimy:
DRC, Direct Routed Call signalling, kdy veškerá komunikace kromě RAS jde přímo
mezi koncovými účastníky spojení (IP telefony, bránami),
GRC, Gatekeeper Routed Call signalling, která může být provozována ve více
režimech (přes GK prochází kromě RAS i Q.931 a případně i H.245).
37
2 Standard ITU-T H.323
Pro média je určena signalizace H.245, přenáší se v oddělených zprávách anebo v rámci Q.931
pomocí metody Fast Connect (rychlé navazování spojení). H.245 obsahuje následující důležité
procedury, viz. obr. 2.10:
TCS, Terminal Capability Set, nastavení vlastností terminálů, každá strana poskytne druhé
list preferovaných kodeků s jejich vlastnostmi,
MSD, Master Slave Determination, tato procedura rozhodne, kdo je Master a čí zprávy jsou
tedy směrodatné v případě konfliktu,
OLC, Open Logical Channel, otevření logického kanálu, vybere se kodek i port a bude
otevřeno spojení pro RTP zvlášť pro každý směr.
Výměna zpráv v H.245 probíhá pomocí žádosti a potvrzení (Request, Acknowledge). Při použití
Fast Connect se přenášejí prvky Fast Start uvnitř zpráv SETUP, ALERTING, CONNECT a ty
obsahují parametry vyjednávání spojení, při přihlášení volaného je proto H.245 vždy sestavena a
RTP může přenášet obsah hovoru. Problém u H.323v1 byl ten, že H.245 probíhala odděleně od
Q.931 až po ukončení výměny Q.931, což nebylo šťastné a mohlo docházet k prodlení otevření
kanálu anebo jednostranné slyšitelnosti. Kromě Fast Connect může popsaný problém H.323v1
odstranit i Parallel H.245, která umožní spustit procedury H.245 paralelně s Q.931 a nakonec
tunelovaná H.245, u které se nemusí sestavovat nové TCP, pro odeslání H.245 PDU se může využít
zpráva FACILITY.
38
2 Standard ITU-T H.323
Pokud se sestavuje nové TCP spojení pro H.323, tak IP adresa a port H.245 je přenesen ve
zprávě Connect, jak je uvedeno následovně:
Q.931 CONNECT
H245_IP_Address,
H245_Port = Called H245 Port,
q931.call_ref = 50:A4,
h225.t35CountryCode = 0
Otevřením logického kanálu H.245 je umožněno zasílání RTP paketů, pro ukončení H.245 se
jednak uzavře logický kanál a potom celá relace:
Pokud během relace dojde ke změně parametrů médií, tak stačí zavřít kanál a otevřít jej znovu s
novými parametry, u H.323v4 je procedura zjednodušena pomocí mechanizmu ExtendedFast
Connect, ten umožňuje modifikaci médií zasláním FastStart prvku s jejich popisem v Q.931.
Odesílání RTP paketů ihned po sestavení logického kanálu se označuje jako Early Media.
Na následujících obrázcích jsou znázorněny modely spojení, na prvním obrázku je model DRC,
obrázky jsou převzaty přímo z doporučení H.323. DRC model umožňuje přes GK pouze komunikaci
RAS, vše ostatní probíhá přímo mezi koncovými body spojení. O použitém modelu rozhoduje GK, ve
zprávě ACF je určeno, který model se použije. Koncové zařízení sice může navrhnout typ modelu,
ale GK definitivně rozhodne.
39
2 Standard ITU-T H.323
Na druhém obrázku 2.12 je model GRC, u modelu GRC jde H.225.0 vždy přes GK, ale v tomto
modelu můžeme ovlivnit i cestu H.245 a RTP.
40
2 Standard ITU-T H.323
V této kapitole si ukážeme, jak náročné je sestavit spojení klasickou metodou Slow Start
popsanou H.323v1, viz. obr 2.13.
Další scénář využívá běžně používaných prvků Fast Start (metoda Fast Connect) a nakonec s
tunelováním H.245. Na obr. 2.13 je první navázání spojení pomocí Slow Start. Ve druhém scénáři
na obr. 2.14 je Fast Connect, OLC procedura H.245 je přenášena přes Q.931 a už ve zprávě
Connect proběhlo otevření logického kanálu a pokud by byly použity Early Media, tak RTP výměna
mohla začít, z příkladu je čitelné, že RTP tok se rozběhl, až po ukončení všech procedur H.245.
41
2 Standard ITU-T H.323
V posledním scénáři na obr. 2.15 je tunelovaná H.245 přes Q.931, kde je zřetelně vidět, jak je
využito zpráv Q.931 a pokud potřebuje H.245 nějakou další Q.931 zprávu, tak se použije FACILITY.
Otevření logického kanálu proběhlo už před zprávou Connect, tzn. před přihlášením volaného a RTP
pakety jsou přenášeny oběma směry, což znamená, že se jedná o Early Media (urychlená média).
42
3 Hlasové brány
3 Hlasové brány
Ideálním stavem pro IP telefonii by bylo využívání pouze VoIP technologie, ale jelikož v roce
2013 bylo na světě IP telefonie přes 7 mld. telefonních čísel fungujících na jiné technologiee (v roce
2000 to bylo 2,5 mld.), tak j nutné zajistit interoperabilitu se stávajícími telefonními sítěmi. Například
v roce 2013 bylo v ČR cca 500 tis. IP telefonů, 13 mil. mobilních telefonů a cca 3 mil. telefonních
čísel na pevných linkách (převážně podniková telefonie).
Signalizace v PSTN
Signalizace se dělí na účastnickou, síťovou a vnitřní, rozdělení je dle místa použití, viz. obr. 3.1,
S postupem vývoje se sjednotila nejdříve vnitřní se síťovou signalizací (u SS7 se je vnitřní a síťová
identická) a následně i účastnická (pokud je používána IP telefonie jak pro trunk tak pro účastníka,,
tak veškerou signalizaci může přenášet jeden protokol, např. SIP) a dělení je již pouze logické. V
současné době jsou používány v sítích s propojováním kanálů následující typy signalizací:
43
3 Hlasové brány
V sítích pobočkových ústředen jsou používány navíc ještě další typy signalizací, se kterýma se
setkáme v podnikových sítích:
Q-signalizace (QSIG) se používá pro vzájemné ISDN propojení pobočkových ústředen [v44] ,
EM signalizace se používá pro analogové propojení PBX různých výrobců.
u IP telefonie v případ PBX Asterisk se může použít IAX trunk při propojení PBX a rovněž pro
IAX IP telefon
Ve veřejné síti je od roku 1997 pro propojení spojovacích systémů použit signalizační systém č.7.
Architektura sítě signalizačního systému č.7 (SS7) se skládá ze třech základních komponentů:
SSP jsou koncové body sítě, ve kterých vznikají požadavky na spojení a kam jsou zároveň tyto
požadavky terminovány. STP jsou tranzitní body, které směrují zprávy SS7 a rozdělujeme je do třech
úrovní:
Jednotlivé komponenty SS7 sítě jsou propojeny do struktury vytvářející signalizační síť, viz.
obrázek níže.
44
3 Hlasové brány
IAM (Initial Address Message) – Tato zpráva se používá pro inicializaci hovorového spojení.
Mimo informace o čísle volaného obsahuje další parametry týkající se např. typu spojení, zda
je použito potlačení echa,
ACM (Address Complete Message) – Zpráva je posílána v opačném směru
než IAM a indikuje, že hovor je zpracováván, například účastník je vyzváněn.
ANM (Answer Message) – Zpráva indikující přijmutí hovoru,
CPG (Call Progress Message) – Tato zpráva slouží k informování vzdálené
strany (ústředny) o nějaké události týkající se hovoru,
REL (Release Message) – Zpráva informující o ukončení hovoru,
RLC (Release Komplete Message) – Tato zpráva se posílá jako potvrzení o ukončení hovoru
a uvolnění spojovací cesty.
Jako účastnická signalizace se v ISDN používá DSS1, a to jak pro připojení koncových terminálů,
tak pro připojení pobočkových ústředen pomocí BRI či PRI přípojek. Základní přístup je označován
jako BRI (Basic Rate Interface) a má sktrukturu 2B + D, kde B je informační kanál s užitečnými daty o
rychlosti 64 kbit/s a D je signalizační kanál 16 kbit/s. Primární přístup je označován jako PRI (Primary
Rate Interface) a má strukturu 30B + D, kde D má rychlost 64 kbit/s a používá se klasický 32
kanálový multiplex s připojením na metalickém rozhraní dle ITUT G.703 (2.048 kbit/s).
SETUP (Sestavování volání), žádost o sestavení spojení. Při blokové volbě obsahuje zpráva
všechny potřebné informace pro spojení, při postupném vysílání volaného čísla zpráva
obsahuje jen část nebo žádné adresné informace,
SETUP ACKNOWLEDGE (Potvrzení sestavování volání), potvrzení zprávy SETUP, pokud je
volba neúplná,
CALL PROCEEDING (Sestavování spojení), ústředna již nepotřebuje další informace pro
spojení, probíhá sestavování spojení,
ALERTING (Vyzvánění), spojení bylo vybudováno k požadovanému cíli, volaný terminál je ve
stavu přijmout volání, tj. vyzvání
CONNECT (Propojení), příchozí volání bylo volaným terminálem přijato (vyzvednutí), B kanál
byl propojen,
CONNECT ACKNOWLEDGE (Potvrzení propojení), potvrzení zprávy CONNECT, spojení
bylo navázáno,
DISCONNECT (Rozpojení), výzva k rozpadu spojení (zavěšení),
RELEASE (Vybavení), odpověď na DISCONNECT, uvolnění B kanálu a požadavek na
uvolnění Call Reference,
RELEASE COMPLETE (potvrzení vybavení), potvrzení RELEASE, uvolňuje se Call
Reference, což je jedinečný identifikátor spojení,
INFORMATION (Informace), pomocí této zprávy se přenášejí informace mezi terminálem a
ústřednou (např. volba),
45
3 Hlasové brány
Hlasová brána VoGW (Voice Gateway) je klíčovou částí služeb IP telefonie, neboť umožňuje
spojení mezi telefonní a paketovou sítí, to znamená, že provádí veškerý nezbytně nutný fyzický
překlad a hlasovou kompresi a tím dovoluje volání mezi těmito dvěma prostředími. Brány s
analogovým rozhraním mohou obsahovat jednak rozhraní U s moduly FXS a FXO a jednak rozhraní
EM. Digitální brány budou mít většinou jeden z ISDN přístupů, a to BRI nebo PRI, výjimečně se
může vyskytnout i některá starší CAS signalizace na PCM 30/32. Uveďme si charakteristiku brány:
počet současně realizovatelných hovorů s daným kodekem, tato výkonnost je ovlivněna nejen
SW, ale hlavně typem a počtem DSP, některé GW mají modulární koncepci DSP (dají se
přidávat),
podporovaná rozhraní a jejich počet,
podporované signalizace na straně telefonní sítě a IP sítě,
způsob konfigurace brány a její dohled (např. podpora CLI, webový přístup, dohled SNMP,
podpora RADIUS, atd...),
zábrana echo (výkonnější je pochopitelně HW implementace echo-cancellation).
Echo v hovoru vzniká nežádoucím odrazem hovorového signálu zpět k hovořícímu účastníkovi a
negativně ovlivňuje kvalitu, jelikož ozvěny vlastních slov působí pro hovořícího rušivě. Echo vzniká
ze dvou základních příčin, které jsou i důvodem pro rozdělení na akustické a elektrické echo.
Akustické echo vzniká částečným přenosem signálu ze sluchátka zpět do mikrofonu na straně
naslouchajícího účastníka a nejčastěji vzniká u mobilních, bezdrátových telefonů a při hlasitém
příposlechu. Typicky je známé zavazbení signálu, které vede až k rozpískání, pokud je IP telefon
tvořen počítačem s reproduktory a stojánkovým mikrofonem. Tento typ echa není tak významný,
jelikož se s ním velmi dobře vypořádají echokancelátory (potlačovače echa), které pracují s algoritmy
eliminujícími jeho vliv.
Elektrické echo vzniká nevyvážeností telefonní vidlice přechodu 4-dr. vedení na 2-dr., typicky je
to v místech napojení analogových telefonních přístrojů. Na vyvážení telefonní vidlice se podílí
kvalita řešení vidlice a vyvažovače, vlastnosti přípojného vedení (účastnické vedení může mít i pár
metrů, ale i přes deset km) a impedance přístroje (teoreticky 600 Ω). Echo vzniká na straně
naslouchajícího účastníka, ale negativně se projeví u hovořícího, teoreticky je možné i echo echa
(druhý odraz hovoru), který ovšem v praxi není znám. Elektrické echo nemůže vznikat na částech
spojení, které mají povahu 4-dr.
Pokud se odražený signál vrací do 25 ms, tak hovor neovlivňuje a pro člověka se zdá přirozené,
se vzrůstajícím časem se zvyšuje negativní vliv na hovor, který závisí pochopitelně i na úrovni
46
3 Hlasové brány
vracejícího se signálu TELR, což je míra hlasitosti ozvěny na straně hovořícího (Talker Echo
Loudness Rating).
Většina GW umí generovat záznamy o spojení CDR a předávat je (např. pomocí RADIUS
protokolu), vždyť přes GW odchází hovory do veřejné telefonní sítě, kde je spojení spojeno s
nějakým poplatkem. Call Detail Record (CDR) je detailní záznam volání obsahující nejčastěji tyto
informace:
identifikace volajícího,
identifikace volaného,
začátek hovoru,
délka hovoru,
identifikace vedení či poskytovatele (operátora).
CDR záznamy se obvykle ukládají v databázích, jejich zpracování je závislé na typu použité
technologie, v případě klasických PBX jsou dočasně uchovávány v pamětech (flash, HDD ...) a
vyčítány v intervalech přes sériové rozhraní nebo pomocí IP.
CC může být 1-3 místné číslo a CC + NDC + SN může být max. 15-ti místné číslo. Struktura
geografických čísel má dvě možnosti:
47
3 Hlasové brány
Pokud konkrétní PBX umožňuje DISA provolbu, lze pomocí pseudoprovolby dosáhnout až
provolení na konkrétní pobočku ústředny. V případě potřeby je možné modifikovat řadu parametrů,
např. impedanční přizpůsobení, generování šumu, zisk na vstupu, útlum na výstupu, potlačení
ozvěny, dobu čekání na volbu čísla, čas mezi volbou čísel apod.. V případě připojení PBX je odchozí
provoz z PBX bez omezení, v případě příchozího volání je možné předat hovor na konkrétní
pobočkovou linku např. přes spojovatelské pracoviště. DISA se někdy se označuje jako
"pseudoprovolba". Umožňuje automatické vyzvednutí příchozího hovoru a výběr volané pobočky
pokračováním ve volbě čísla. Po vyzvednutí hovoru je obvykle volajícímu přehrána hlasová zpráva a
nabídnuta možnost přepojení. DISA se používá v PBX, které nemají DDI (Direct Dialing In - provolba)
a jsou připojeny analogovou státní linkou. V těchto PBX je při příchozím volání možnost buď nechat
vyzvánět volání na určené pobočce a nebo použít DISA provolbu.
Modul FXO (Foreign Exchange Office) pracuje v režimu analogového přístroje. Na rozhraní lze
připojit např. státní tel. linku nebo analogovou linku pobočkové ústředny. Problémy s ukončením
hovoru, např. u prvních FXO modulů Cisco, mohou vzniknout při připojení většiny evropských
48
3 Hlasové brány
ústředen. Komplikace způsobuje signalizační značka Kewl-start (označováno taky jako Power denial
nebo Battery drop), jedná se o přerušení napájení při ukončení hovoru inicializované účastnickou
sadou. Zmiňovaná značka není v ČR a ve většině evropských zemích vyžadována a řešení problému
při zavěšení spočívá ve vyhodnocení kontrolních tónů modulem FXO.
3.2.3 Modul EM
V případě VoIP brány s modulem E&M se jedná o analogové rozhraní pro připojení PBX s
oddělenou hovorovou a signalizační částí. Pro hovor se používá dvoudrátová nebo i čtyřdrátová
cesta s možností odděleného nastavení přijímacích/vysílacích útlumů/zesílení na delších trasách. Z
nabízených signalizačních zapojení na straně GW je vzhledem k univerzálnosti nejvhodnější vybrat
verzi č. 5. (negativní logika). Rozhraní pracuje s trvalou EM linkovou signalizací a je doplněné DTMF
registrovou signalizací. Pro vlastní EM linkovou signalizaci je nejvhodnější zvolit signalizaci US-WINK
doplněnou o DTMF volbu, neboť s touto signalizací jsou nejlepší zkušenosti. US-WINK má
následující výhody:
Výhoda E&M modulu oproti FXS spočívá v možnosti technicky neomezené obousměrné
komunikace, tzn. provolení na pobočku ústředny v příchozím volání a na rozdíl od FXS je přenášena
IP sítí značka přihlášení, tzn. u tranzitního hovoru nemůže dojít k zahájení tarifování během
vyzvánění.
Doporučené nastavení:
49
3 Hlasové brány
Layer 1, Master,
Layer 2, TEI=0, L1/2permanent active,
Layer 3, signalizace DSS1 (případně QSIG).
Layer 1, Slave,
Layer 2, L1/2permanent active,
Layer 3, signalizace DSS1 (případně QSIG).
Signalizační systém QSIG je založen na využití principu komunikačních funkcí a protokolů, které
odpovídají hierarchické struktuře modelu OSI (Open System Interconnection). Je to varianta ISDN
signalizace D kanálu. Základním principem modelu je členění na vrstvy. Funkce jednotlivých vrstev
jsou definovány ve standardech ETS. Pro fyzickou vrstvu L1 platí standard ETS 300 011, pro
linkovou vrstvu standard ETS 300 125 s úpravou pro QSIG ETS 300 170. Pro síťovou a aplikační
vrstvu platí více standardů ETS.
Pro registraci na GK je nutné v Ciscu konfigurovat položky na síťovém rozhraní pod označením
h323-gateway. Během registrace se zasílá GRQ a RRQ se jménem GK jako id (identifikátoru GK) a
brána je registrována s prefixy seřazenými v tech-prefix a s jeho h323-id.
# interface FastEthernet0/0
# ip address 158.196.81.200 255.255.255.0
# h323-gateway voip interface
# h323-gateway voip id OpenH323GK ipaddr 158.196.81.103 1718 priority 100
# h323-gateway voip h323-id gw1vsb
# h323-gateway voip tech-prefix 0
V případě použití GNU GK je název GNU GK zadán v sekci Main v souboru /etc/gatekeeper.ini ,
kde musí být stejné id GK jako v Cisco GW.
50
3 Hlasové brány
[Gatekeeper::Main]
Name=OpenH323GK
Pro registraci na SIP serveru se nekonfigurují položky pod síťovým rozhraním ale globálně.
# sip-ua
# authentication username jmeno heslo
# sip-server dns:asterisk.vsb.cz
# anebo sip-server ipv4:158.196.81.205
# show gateway
H.323 ITU-T Version: 4.0 H323 Stack Version: 0.1
H.323 service is up
Gateway gw1vsb is registered to Gatekeeper OpenH323GK
A konečně se dostáváme ke konfigurací ISDN rozhraní na Cisco GW. Nejdříve několik globálních
nastavení, které je vhodné minimálně zkontrolovat. Co se týče nastavení v sekci voice, tak je to
ověření, že je zapnutý příjem i vysílání RTP a v podsekci voip, že je zakázán H.245 caps režim, bez
něj může být problém s dokončením vyjednání H.245, jelikož Cisco nechává nepotvrzenou H.245 pro
detekci DTMF, tónů a faxu, s touto vlastností mají produkty třetích stran většinou potíže.
Dále je nutné na voice portu nastavit české kontrolní tóny, evropskou kompresní křivku pro PCM
A-law a jako výchozí bearer-capability doporučuji 3100Hz.
# voice-port 0/0
# compand-type a-law
# cptone CZ
# bearer-cap 3100Hz
Následující nastavení je pro ISDN BRI na Cisco GW, která je konfigurovaná jako síťová strana,
tzn. k tomu portu můžu připojit koncové zařízení či PBX a nakonfigurovaný port se chová jako
poskytovatel (obdobně jako ISDN BRI veřejného operátora).
51
3 Hlasové brány
Pro stranu uživatele se změní několik položek. K tomuto rozhraní můžeme připojit ISDN BRI z
veřejné sítě.
Následující nastavení je pro ISDN PRI na Cisco GW, nejdříve nakonfigurujeme E1 kontroler.
# controller E1 1/0
# clock source line primary /* L1 – synchronizace hodin z PCM traktu
anebo # clock source internal /* interní zdroj časování
# pri-group timeslots 1-31
Následně můžeme přistoupit ke konfiguraci signalizační části ISDN PRI, která je podobná jako v
přechozím případě a začneme nejdříve stranou sítě, čili konfigurujeme Cisco GW v pozici
poskytovatele.
# interface Serial1/0:15
# no ip address
# isdn switch-type primary-net5 /* primary-net5 znamená PRI s DSS1
# isdn overlap-receiving
# isdn not-end-to-end 64 /* přepsání rychlosti, kterou avizuje síť
# isdn protocol-emulate network
# isdn incoming-voice modem
# isdn send-alerting
# isdn sending-complete
Časovače na ISDN není doporučeno měnit z jejich výchozích hodnot, ale někdy to může prospět
a proto si uvedeme seznam vybraných časovačů.
Abychom s Cisco GW mohli uskutečnit spojení, tak je nutné definovat příchozí volbu z VoIP sítě
do PSTN označovanou jako inbound peers (POTS) a odchozí volbu z PSTN do VoIP označovanou
jako outbound peers (VoIP). Tato konfigurace se provádí v sekci dial-peer voice. Následující
nastavení je pro ISDN PRI na Cisco GW, nejdříve nakonfigurujeme E1 kontroler.
Předpokládejme, že směrovač v tomto příkladu přijímá volání s volbou 59699XXXX z VoIP sítě,
kde XXXX je pobočka a 59699 je prefix. Níže uvedené pravidlo akceptuje řetězec začínající 59699,
za kterým následují čtyři čísla, tyto čísla jsou odeslány do připojené PBX přes port 0/0, což zajišťuje
příznak provolení direct-inward-dial.
T je speciální znak časovače ukončení volby, jehož použití potlačuje čekání na přesný počet
čísel, namísto toho se spustí časovač T302 mezičíslicové pauzy (interdigit timer), po jeho uplynutí je
příchozí číslo považováno za úplné.
# destination-pattern 59699T
Pravidla odchozí volby směrem jsou chápána směrem do VoIP sítě a proto je dial-peer označen
jako voip. Předpokládejme, že potřebujeme nasměrovat na GK všechna čísla začínající 603565, z
PBX tedy přichází do Cisco GW devítimístné číslo, což vyjadřuje 603565... , na posledních třech
číslech nezáleží, GW spáruje takovýto řetězec s pravidlem odchozí volby číslo 20 a směruje volání
na cíl zadaný v session target. Na cíl je posláno celé přijaté číslo 603565... .
Pokud je uvedeno session target ras, tak je použita RAS signalizace pro zjištění cílové IP adresy
a portu pro Q.931, což znamená, že RAS je směrován na GK, viz. kapitola 7.3. V případě session
target ipv4 není použita RAS signalizace a odchází se přímo zprávami signalizace Q.931, což značí
odeslání zprávy SETUP a protějším zařízením nemůže být GK nýbrž EP (GW anebo TE).
# translation-rule 1
# Rule 0 ^59699.... 42059699 ANY unknown
# Rule 1 ^0 420 ANY unknown
Popsaná pravidla jsme uložili do pravidel překladu čísel č. 1 a teď je použijeme po směr odchozí
volby číslo 20.
Pokud potřebujeme některé z pravidel použít rutinně, tak abychom je nemuseli zapisovat u
každého směru, tak se nastaví jako globální a v tom případě se zapisují na voice-port , pokud
potřebujeme použít jiné, tak je nastavíme přímo na konkrétní dial-peer.
Skvělým pomocníkem je nastavení třídy kodeků (voice class codec). Tím dosáhneme nastavení
preferencí a přiřadíme třídu pro konkrétní dial-peer. Nastavíme tím seznam položek kodeků, které
budou ve spojení ze strany Cisco GW nabízeny.
54
3 Hlasové brány
Výše uvedeným nastavením byla sestavena třída kodeků č.99 obsahující tři kodeky a tuto třídu
teď přiřadíme na dial-peer voice 20 voip, tím docílíme, že se bude vytvořený list preferencí kodeků
nabízet v odchozím směru č. 20.
Zcela netypicky se nastavuje kodek pro příchod, a to rovněž v dial-peer voice voip, níže uvedený
příklad bude použit pro všechny příchozí volání s volbou delší než dvě číslice. Doporučuji používat
uvedené pravidlo, neboť výchozím kodekem je u Cisca G.729.
Cisco brány jsou velmi spolehlivá zařízení. Pokud se vůbec objeví nějaký problém, tak obvykle
při volání přes Cisco GW volající neslyší kontrolní vyzváněcí tón, ačkoliv příchozí volání úspěšně
vyzvání u volaného. Proto si rozebereme řešení této situace. Důvodem je většinou situace, kdy
strana volaná posílá svůj kontrolní tón v hovorovém kanále (in-band) a volající strana nenaslouchá,
neboť nebyl propojen B-kanál. K nepropojení může dojít z více důvodů, informaci o propojení nese
informační prvek Progress Indicator (PI) a jeho nastavením dokážeme vynutit propojení B-kanálu již
během vyzvánění. Nemusí se jednat pouze o přenos kontrolních tónů, ale i různých ohlášení. PI
můžeme najít ve zprávách ALERTING, CONNECT, PROGRESS nebo DISCONNECT. Kde hodnota
PI=1 nebo PI=8 vyjadřuje přítomnost informace in-band. Můžeme přinutit otevření B-kanálu i přes
SETUP hodnotou PI=3, pokud takovéto PI v SETUPu dorazí na GW, tak to znamená, že je
očekávána informace in-band.
Pro Cisco jsou pomocí IOS řešení následující. Prvním krokem by mělo být nastavení globálním
parametrem.
Pokud nastavení nezabralo, tak si vynutíme otevření B-kanálu přepisem PI , předpokladem je, že
kontrolní vyzváněcí tón (kvt) je skutečně v B-kanálu posílán. Tam, kde kvt v B-kanále není zasíláno,
tak naopak může způsobit nefunkčnost, protože přepíše PI a zabrání vygenerování lokálního kvt,
takže příkaz se používá selektivně a taky je možné zkusit nastavit PI pro konkrétní zprávu. Tady platí,
že měníme co nejméně, přepisy PI jsou dost tvrdým zásahem do signalizace.
55
3 Hlasové brány
Jestliže ani přechozí nastavení nepomohlo, tak přichází zaručený recept v podobě vynucení
lokálního generování kvt.
Pokud se chceme přesvědčit zda Cisco GW je připravena a ISDN je v dobré kondici, tak
použijeme příkaz show isdn status a dostaneme odezvu, kde zkontrolujeme, zda je aktivní vrstva L3.
Pokud není, tak hledáme problém na L2, praxe je taková, že většina chyb je na L1, takže pokud
nevidíme aktivní první vrstvu, tak jdeme prověřit vedení. Vyplatí se mít po ruce LED diodu pro
testování fyzické vrstvy PRI, tímto nejlevnějším testerem lze rychle zjistit, na kterých párech jsou
vysílače obou propojovaných stran a hlavně, zda vysílají.
C2651-VoGW-OV#
Aug 19 19:06:23.024: ISDN Se1/0:15 Q931: TX -> SETUP pd = 8 callref = 0x5D9D
Sending Complete
Bearer Capability i = 0x9090A3
Standard = CCITT
Transfer Capability = 3.1 kHz Audio
Transfer Mode = Circuit
Transfer Rate = 64 kbit/s
Channel ID i = 0xA98381
Exclusive, Channel 1
Progress Ind i = 0x8183 - Origination address is non-ISDN
Display i = 'Voznak Mobil'
56
3 Hlasové brány
Další zprávou Call Proceeding byla strana inicializující volání informována o zpracování
požadavku na sestavení spojení. Ve zprávě ALERTING se volající strana dozvídá jednak, že u
volaného začal vyzvánět telefon a jednak dostává v PI informaci o zaslání in-band informace, což je
jistě kontrolní vyzváněcí tón a je nutné ho naslouchat na B-kanálu. Nakonec při přihlášení volaného
je přijat CONNECT, který je potvrzen CONNECT_ACK.
Dále byl zachycen rozpad spojení, jelikož požadavek DISCONNECT byl vyslán (TX), tak
spojení ukončila strana volající standardní cestou a rozpad je dovršen přijetím RELEASE a
potvrzením RELEASE_COMPLETE.
Poslední příklad ukazuje odchozí spojení z PBX přes CiscoGW, což je indikováno jako RX
SETUP, čili zpráva SETUP byla přijata na E1 rozhraní (z PBX) a obsahovala opět kompletní volbu,
viz. Sending Complete, po čtyřech vteřinách od odeslání přišla zpráva o vyzvánění a od té chvíle
dostával volající kontrolní vyzváněcí tón, po dalších 4 vteřinách bylo volání přijato volaným, což
indikuje zpráva CONNECT. Spojení bylo ukončeno volající, účastníkem na pobočkové ústředně, což
je indikováno odesláním žádosti o rozpojení DISCONNECT.
C2651-VoGW-OV#
000160: Dec 30 16:41:55.988: ISDN Se1/0:15 Q931: RX <- SETUP pd = 8 callref = 0x0011
Sending Complete
Bearer Capability i = 0x8090A3
Standard = CCITT
Transfer Capability = Speech
Transfer Mode = Circuit
Transfer Rate = 64 kbit/s
Channel ID i = 0xA9839A
Exclusive, Channel 26
57
3 Hlasové brány
Za povšimnutí rovněž stojí, že všechny přijaté zprávy GW z PBX mají shodný Call
reference ”callref = 0x0011” a odchozí odeslané GW do PBX ”callref = 0x8011” a byl použit TSL 26
(timeslot) 32-kanálové E1 ”Exclusive, Channel 26”. Podle Call reference najdu zprávy týkající se
jednoho spojení a v případě silně zatížené GW, kde probíhají desítky volání současně lze očekávat
poměrně slušný provoz zpráv z různých kanálů a je nutné najít nejdříve konkrétní Call reference,
podle kterých můžou býti zprávy analyzovaného spojení dohledány.
Výše zmíněná nastavení byla prakticky ověřena v rálném nasazení (autor stál u zrodu
akademické VoIP sítě v ČR postavené na Cisco technologii), ale je nutné vzít v potaz, že s dalšími
verzemi IOS byly možnosti ještě rozšířeny.
58
4 GNU Gatekeeper
4 GNU Gatekeeper
GNU Gatekeeper je open-source projekt, který vznikl v roce 2001, jedná se o svobodný software
šířený pod licencí GNU GPL. Nejznámějším gatekeeperem je bezesporu GNU GK, jedná se o plně
H.323 kompatibilní gatekeeper (dále jen GK) dostupný na stránkách projektu http://www.gnugk.org
a použitelný pod licencí GPL. GNU GPL dovoluje aplikaci kopírovat, distribuovat, prodávat nebo
modifikovat, ale veškerá činnost musí být opět pod GPL, což znamená, že k případně provedeným
úpravám původního kódu musí být dodán i modifikovaný zdrojový kód. Aktuálně je aplikace v ostré
verzi 3.5 z roku 2014, během jednoho roku může být vydáno i několik verzí. GNU GK je úspěšný
projekt a existuje řada sítí, které jsou postaveny na GNU GK. V akademické komunitě je to např.
GDS (Global Dialing Scheme), což je síť pro videokonference a telefonii, projekt vznikl původně na
anglických univerzitách a postupně byl rozšířen po celém světě.
Současným koordinátorem projektu GNU GK (dále jen GnuGK) je Jan Willamowius. Jelikož se
jedná o open-source projekt, je možné se do samotného vývoje případně testování osobně zapojit.
GnuGK gatekeeper je velmi stabilní, proto je komerčně využíván mnoha organizacemi poskytujícími
VoIP služby. Autoři projektu poskytují GnuGK pro operační systémy: Linux, Windows, FreeBSD,
Solaris a MacOS X. Pod operačním systémem Windows může GnuGK běžet jako služba v pozadí.
GnuGK nabízí mnoho užitečných funkcí, jako např. flexibilní směrování hovorů, široké možnosti
autentizace a autorizace, plnou podporu H.323 proxy a NAT a rovněž H.235 bezpečnostních
mechanizmů. Vývojáři také postupně implementují nové funkce dle požadavků uživatelů. GnuGK je
možné dále rozšířit o grafické uživatelské prostředí usnadňující práci s gatekeeperem nebo možnost
vytvořit aplikaci call-centra. Stává se nedílnou součástí systémů pro IP telefonii, založených na
standardu H.323. Velká výhoda je vzájemná kompatibilita GnuGK gatekeeperu s řadou zařízení pro
VoIP služby. Na uvedené webové stránce projektu GnuGK je možné získat více informací o projektu,
procházet diskuze týkající se podpory, nalézt konfigurační tipy a ukázkové konfigurace, získat
samotný gatekeeper a přehledně zpracovaný manuál.
59
4 GNU Gatekeeper
Příkladem nejrozsáhlejšího nasazení GnuGK v ČR je síť sdružení vysokých škol CESNET2 [v55].
V současné době je v rámci IP telefonie sdružení CESNET2 přihlášeno zhruba padesát hlasových
brán (dále jen VoGW), které jsou registrovány k vnitřním GK na platformě Cisco. K těmto VoGW jsou
připojeny pobočkové ústředny institucí (dále jen PBX), které mohou volat v rámci sítě CESNET2 a
subjekty mohou využívat i výstupu do veřejné sítě přes ČVUT. Sdružení CESNET byl přidělen
přístupový kód do neveřejné sítě sdružení ve tvaru 4209500. Na GNU GK je provozován národní
gatekeeper akademické sítě v ČR, který je zapojen jak do další mezinárodní struktury hierarchického
směrování (GDS), tak slouží pro připojení jiných GK. Doménové jméno národního GK je
gk1ext.cesnet.cz . Téměř všechny univerzity v ČR mají k síti CESNET2 připojeny své pobočkové
ústředny a GnuGK se uplatňuje jako hraniční Gatekeeper, je využíván pro peering se zahraničními
institucemi a kromě komunikace s interními GK spravuje číselný plán s prefixem 9500. Například v
roce 2005 bylo v síti CESNET2 pomocí technologie VoIP uskutečněno zhruba 1,5 mil. hovorů. Bližší
informace k projektu GnuGK na Cesnetu lze najít na stránkách projektu http://www.cesnet.cz a v
dalších publikacích [v50], [v67], [sir].
Předpokládejme, že pro otestování postačí zavolat mezi dvěma H.323 koncovými body a k tomu
nám postačí nějaká aplikace H.323 klienta, použijeme např. YATE, který stáhneme ze stránek
http://yate.null.ro anebo SPRANTO http://www.spranto.com/. S GnuGK budeme pracovat
v linuxovém prostředí, jelikož autor pracuje s distribucí Debian, tak je nutné vzít v potaz, že instalace
např. v Ubuntu bude nutné uvést příkazy vzhledem k uživatelským právům pomocí sudo a v případě
CentOS namísto apt-get se použije yum, apod. Nejdříve zjistíme, zda je balíček s gnugk dostupný a
potom nainstalujeme. Během instalace vidíme, jaká verze je instalována.
60
4 GNU Gatekeeper
sekcích, název sekce je v hranatých závorkách, pokud je jakýkoliv řádek uvozen středníkem, tak
není brán v potaz. Nejdříve bychom měli do gatekeeper.ini vepsat základní část konfigurace.
[Gatekeeper::Main]
Fourtytwo=42
Name=gk1ext
Home=195.113.113.131
TimeToLive=300
GnuGK umožňuje čtyři režimy volání, jedná se o režim DRC (Direct Routed Call), GRC
(Gatekeeper Routed Call) pouze s H.225.0/Q.931, GRC včetně H.245 a režim Proxy. V režimu DRC
zpracovává GnuGK pouze RAS zprávy, veškerá komunikace se odehrává přímo mezi EP. Pokud je
povolen režim GRC, tak lze nastavit směrování signalizace H.225.0/Q931 a H.245 přes GK.
Nastavení se provede v sekci [RoutedMode]. Nastavuje se parametry GKRouted na hodnotu 0
(vypnuto) nebo 1 (zapnuto) a H245Routed opět pomocí dvou hodnot. Položku CallSignalPort pro
Q.931doporučuji posunout na typický port 1720.
[RoutedMode]
GKRouted=1
H245Routed=0
CallSignalPort=1720
Pokud je zapnut třetí režim GRC, tak může být povolen i Proxy režim, vše přes GK, pokud se
zadá v sekci [Proxy] volba Enable a hodnota 1.
[Proxy]
Enable=1
4.1.2 Registrace EP
Registrace EP (Endpoint - H.323 telefon nebo H323 brána) je na GnuGK časově omezená.
GnuGK vrací při registraci každému EP dobu platnosti registrace ve zprávě RFC (Registration
Confirm), která je zapsána v poli timeToLive. Po vypršení této doby je registrace zrušena. Každý EP
by měl svou registraci periodicky obnovovat zasíláním RRQ (Registration Request), je povoleno i
obnovování pomocí lightweight RRQ, tzn. pomocí keepAlive bit, to probíhá tak, že před uplynutím
registrace na GK (time to live) zašle EP zprávu RRQ s keepAlive a tím resetuje čítač timeToLive a
registrace je prodloužena. EP může pochopitelně požadovat i menší čas timeToLive ve zprávě RRQ,
než má GNU GK jako výchozí. Aby nedošlo k zahlcení GNU GK RRQ zprávami, tak GK vrací jako
nejmenší limitní čas pro registraci 60 sekund, ikdyž EP bude požadovat nižší hodnotu. Po expiraci
61
4 GNU Gatekeeper
registrace na GK zašle GnuGK dvě zprávy IRQ (Information Request), kterými zjistí, zda je EP
komunikativní a pokud nedostane odpověď zprávou IRR, kterou může být registrace prodloužena,
tak posílá na endpoint URQ (Unregistration Request) s odůvodněním ttlExpired. V této chvíli je
vymazán z databáze aktivních EP na GnuGK a EP musí provést opětovnou registraci pomocí RRQ.
Problém může nastat u registrovaných EP, kteří mění svou IP adresu během doby registrace,
například bezdrátová LAN dle 802.11 a uživatel přemísťující se se softphonem na notebooku nebo s
WiFi telefonem. To lze vyřešit tak, že přidáme do gatekeeper.ini další sekci, ve které povolíme
přepisování IP adres registrovaných EP.
[RasSrv::RRQFeatures]
OverwriteEPOnSameAddress=1
Určitě bychom chtěli kontrolovat, jaký EP (Endpoint) se může registrovat na GK. GNU GK
umožňuje jednoduchou metodu autentizace, ověření uživatelského jména a hesla přenášeného v poli
cryptoTokens (hashed by MD5), pričemž uživatelské jméno je vidět transparentně. V GNU GK lze
například zadat, aby probíhala autentizace pouze při registraci na GK. Heslo zadané do sekce
SimplePasswordAuth se získá přes utilitu addpasswd. Ta se spustí z příkazové řádky a mezerami se
oddělí parametry, prvním je název souboru, kam se zapíše výsledek, následuje název sekce, uživatel
a heslo.
[passwd]
cesnet=FVqqGh4sTxE=
Jednotlivé účty řadíme pod sebe do sekce SimplePasswordAuth. Nejdříve ale musíme
specifikovat v sekci Gatekeeper::Auth, které zprávy RAS budeme autorizovat k provedení
autentizace. Uvedený příklad vyžaduje autentizaci při registraci na GnuGK.
[Gatekeeper::Auth]
SimplePasswordAuth=required;RRQ
default=allow
[SimplePasswordAuth]
cesnet=FVqqGh4sTxE=
SW klient, který umí autentizaci je např. YATE, SPRANTO či EKIGA. Pokud máme koncová
zařízení, která neumí autentizaci, tak může být užitečné znát další mechanizmus s názvem Alias
Authorization a spočívá v ověření uživatelského jména a IP adresy ve zprávě RRQ. Můžeme oba
mechanizmy zkombinovat tak, že nejdříve proběhne ověření uživatelského jména a hesla v RRQ
62
4 GNU Gatekeeper
modulem SimplePasswordAuth a pokud autentizace přes tento modul neprojde, tak postoupíme další
pravidlo a tady je už vyžadováno, aby prošlo přes Alias Authorization. Upravíme tedy sekci
Gatekeeper::Auth.
[Gatekeeper::Auth]
SimplePasswordAuth=optional;RRQ
AliasAuth=required;RRQ
default=allow
[RasSrv::RRQAuth]
950012345=sigip:195.113.150.124:1720
default=reject
Infrastruktura H.323 ovšem bývá složitější, protože potřebujeme volat i mimo svou vlastní zónu
obsluhovanou GnuGK a v tom případě potřebujeme propojení s dalším GK. To je snadné,
potřebujeme znát jeho IP adresu a telefonní čísla, které používá. Přidání sousedního Gatekeeperu
se provádí přes dvě sekce, první RasSrv::Neighbors určuje typ GK a druhá Neighbor už obsahuje
konkrétní konfiguraci.
[RasSrv::Neighbors]
LSU=GnuGK
[Neighbor::LSU]
Host=130.39.252.136
SendPrefixes=1225578
AcceptPrefixes=*
Na vzdálenou zónu, kterou jsme si nazvali LSU (jedná se o univerzitu v Lousianě), jsou posílány
požadavky na spojení začínající čísly 1225578, a to včetně prefixu, z této zóny jsou přijímány
požadavky na vytočení jakéhokoliv čísla.
Často potřebujeme propojení s jiným typem sítě, tak potřebujeme hlasovou bránu VoGW (Voice
Gateway), nejčastěji s rozhraním ISDN PRI nebo BRI. VoGW může být realizována například na
směrovači osazeném příslušným rozhraním pro propojení nebo kartou v PC. Pokud budeme mít v
popisu práce intenzivně šetřit a máme solidní znalosti Linuxu, tak je možné GK i VoGW postavit na
řešení Asterisk, což je doslovně SW pobočková ústředna, která je vyvíjena jako open-source projekt
http://www.asterisk.org/ a firma Digium, která za Asteriskem stojí, se zabývá prodejem a podporou
HW pro Asterisk.
63
4 GNU Gatekeeper
Pokud se GW registruje na GK pomocí registračních zpráv RRQ obdobně jako klient, tak není
nutné statickou registraci provádět a nakládáme s GW stejně jako s IP telefonem, GW si na GnuGK
zaregistruje své prefixy a o nic se nemusíme starat. Pokud se nechceme spoléhat na dynamickou
registraci a chceme mít natvrdo v konfiguraci zapsáno, že čísla začínající určitým řetězcem mají být
směrována na konkrétní EP, tak GW do konfigurace přidáme, tím pádem GK bude volání na GW
směrovat, ať už bude GW funkční či nikoliv. Přidání VoGW je záležitostí jednoho řádku sekce
RasSrv::PermanentEndpoints, často je ovšem nutné přepisovat čísla. Například používáme-li
mezinárodní formát čísel a nechceme, aby uživatel musel točit před každým čísel ještě 420, příchod
na GW mu tedy ještě přepíšeme v sekci RasSrv::GWRewriteE164 , předtím je ovšem nutné dát GW
do sekce RasSrv::GWPrefixes. Přepisy mohou být nejen v příchodu na GW, ale taky při vytočení 420
950 0 z GW budeme chtít přepsat na 950 0.
[RasSrv::GWPrefixes]
GW-VUTBR=54114
[RasSrv::GWRewriteE164]
GW-VUTBR=out=54114=42054114
[RasSrv::PermanentEndpoints]
195.113.113.131:1720=GW-VUTBR;42054114
[RasSrv::RewriteE164]
4209500.....=9500.....
64
4 GNU Gatekeeper
[Gatekeeper::Auth]
FileIPAuth=required;RRQ,LRQ,Setup
[FileIPAuth]
192.168.1.240=reject
192.168.1.0/24=allow
any=reject
Autentizace na GnuGK probíhá pomocí modulu FileIPAuth. Povolený přístup mají pouze
uživatelé sítě s IP adresou 192.168.1.0/24, kromě IP adresy 192.168.1.240, která má přístup
zakázán.
Autorizace je proces pro ověření práv daného uživatele. Úspěšně autentizovaný a přihlášený
uživatel může mít totiž různá práva pro různé úkony. V oblasti IP telefonie to znamená např. omezit
uživateli možnost volat na určitá čísla nebo naopak omezit přístup na jeho číslo. V současnosti nabízí
GnuGK možnost autorizace uživatelů pomocí dvou modulů.
PrefixAuth modul podporuje autorizaci uživatelů pro signalizační zprávy ARQ a LRQ. Modul
ověřuje prefix z pole destinationInfo (volané číslo), obsažený v požadavku spolu s IP adresou
nebo alias adresou, jestli se shoduje s definovaným pravidlem. Na základě tohoto
definovaného pravidla je možné požadavek přijmout nebo zamítnout. Můžeme také definovat
implicitní pravidlo, pokud nedojde ke shodě prefixu s pravidlem. Modul tedy nabízí možnost
efektivně zamezit volání uživatelů na určitá zakázaná čísla.
SQLAuth modul je výkonný modul nabízející více možností autorizace uživatelů. Podporuje
RAS signalizační zprávy RRQ, ARQ, LRQ a signalizační zprávu Q.931 Setup. Na základě
tohoto modulu můžeme autorizovat uživatele dle mnoha volitelných parametrů, které
ukládáme v SQL databázi. Uživatele můžeme autorizovat na základě volaného čísla,
uživatelského jména, můžeme stanovit maximální délku hovoru, můžeme směrovat jednotlivé
hovory apod. SQL databáze tedy tvoří flexibilní možnost libovolně autorizovat uživatele na
základě řady podporovaných parametrů. Mechanizmus autentizace a autorizace na obr.
4.2 byl realizován jako diplomová práce [sir] a řešení přes RADIUS bylo zvoleno z důvodu
nepodporovaného protokolu LDAP v GnuGK, podpora LDAP byla přidána ve verzi 2.2.7 a dá
se zapnout při kompilaci GnuGK.
Návrh topologie je v obr. 4.3, skládá se ze dvou GK, každý GK spravuje svou zónu, ve které jsou
umístěny IP telefony a v zóně B je navíc umístěna hlasová brána VoGW, která je propojena s PBX a
přes PBX do veřejné sítě PSTN, tato VoGW se registruje dynamicky s prefixem 9, čili cokoliv
začínající číslicí 9 posíláme přes VoGW do PBX. V zóně A se budou nacházet čísla začínající pětkou,
např. 5959991699 (IP phone A) a v zóně B začínající dvojkou, např. 224352979 (IP phone B), navíc
je v zóně B už zmíněná brána VoGW s ISDN. Zvolíme ISDN BRI a jelikož se připojujeme k PBX, tak
budeme emulovat stranu sítě, nechť je konfigurace v PBX standardní.
Začneme s konfigurací GnuGKA umístěného na obr. 4.3 vlevo nahoře. Než nainstalujeme gnugk,
tak pro jistotu nejdříve odinstalujeme starší verzi, pokud se nachází a vyčistíme staré konfigurační
soubory, následně provedeme aktualizaci seznamu balíčku z repozitáře a poté konečně
nainstalujeme gnugk.
67
4 GNU Gatekeeper
# nano /etc/gatekeeper.ini
# telnet localhost 7000
reload
rv
exit
V sekci Main si GK vhodně pojmenujeme a nastavíme režim (např. DRC), posuneme TCP port
Q.931 na standardní 1720 a abychom se vyhnuli problémům s detekcí duplicitní registrace (změna
IP u EP), tak raději povolíme i přepisování registrací.
[Gatekeeper::Main]
Name=GnuGKA
TimeToLive=600
[RoutedMode]
GKRouted=0 /* running in DRC
H245Routed=0
CallSignalPort=1720
68
4 GNU Gatekeeper
[RasSrv::RRQFeatures]
OverwriteEPOnSameAddress=1
Teď bychom měli nakonfigurovat IP klienta Yate, PacPhone nebo Ekiga a zkusit se zaregistrovat.
Registraci můžeme sledovat přes telnet v konzoli. Připravíme si mezizónovou komunikaci směrem na
GK-B, kam budeme směrovat volbu s čísly začínající dvojkou a devítkou, jako příchozí akceptujeme
jakoukoliv volbu (*).
[RasSrv::Neighbors]
GK-B=GnuGK
[Neighbor::GK-B]
Host=158.196.142.3
SendPrefixes=2,9
AcceptPrefixes=*
[Gatekeeper::Main]
Name=GnuGKB
TimeToLive=600
[RoutedMode]
GKRouted=0
H245Routed=0
CallSignalPort=1720
[RasSrv::RRQFeatures]
OverwriteEPOnSameAddress=1
[RasSrv::Neighbors]
GK-A=GnuGK
[Neighbor::GK-A]
Host=158.196.81.102
SendPrefixes=5
AcceptPrefixes=*
h323
h245 caps mode restricted
interface FastEthernet0/0
ip address 158.196.81.205 255.255.255.0
h323-gateway voip interface
h323-gateway voip id GnuGKB ipaddr 158.196.142.3 1718 priority 100
h323-gateway voip h323-id VoGW
h323-gateway voip tech-prefix 9
V další části nastavíme opět globální parametry brány ale tentokrát z pohledu ISDN, zatímco
předtím to byly parametry ze strany IP světa. Konfigurace ISDN BRI je dána tím, že emulujeme
stranu sítě a používáme signalizaci DSS1, jedná se opět o popsané nastavení z třetí kapitoly.
voice-port 0/0
compand-type a-law
cptone CZ
bearer-cap 3100Hz
interface BRI0/0
no ip address
isdn switch-type basic-net3
isdn not-end-to-end 64
isdn protocol-emulate network
isdn layer1-emulate network
isdn incoming-voice voice
isdn send-alerting
isdn outgoing-voice info-transfer-capability 3.1 kHz-audio
isdn static-tei 0
isdn skipsend-idverify
Poslední část konfigurace VoGW se týká nastavení směrů jak odchozí tak příchozí a v závorce
uvedený řetězec [25] je součást regulárního výrazu říkající, že platí pro číslo začínající dvojkou nebo
pětkou.
70
4 GNU Gatekeeper
GK na levé straně obr. 4.4 nemůže odpovědět ihned na ARQ, jelikož nezná umístění volaného
EP, posílá LRQ na sousední GK, kde se ptá na destinationInfo (hledané číslo 5969919699),
odpověď je očekávána na IP 158.196.244.177 portu 1719, viz. obr 4.5.
Odpověď LCF, viz. obr. 4.6 obsahuje callSignalAddress (Q.931) 158.196.81.101 port 1720, tato
informace je následně vložena do ACF, tím se volající EP dozvídá, kam má poslat žádost o
sestavení spojení SETUP. Sousední GK rovněž sděluje adresu pro další RAS komunikaci
158.196.244.176 port 1719.
71
4 GNU Gatekeeper
72
5 Základy protokolu SIP
SIP pracuje na aplikační vrstvě, byl navržen tak, aby byl snadno implementovatelný, rozšiřitelný a
dostatečně flexibilní. Protokol je užíván pro sestavení, modifikaci a ukončení spojení s jedním nebo
více účastníky, ale není jediným protokolem, který je potřebný pro audiovizuální komunikaci, ve
spojení se SIPem jsou nejčastěji používány ještě dva další protokoly, RTP (Real-Time Protocol) pro
přenos vlastního obsahu a SDP (Session Description Protocol) pro popis přenášeného obsahu [sin1],
[sin2].
SIP je end-to-end orientovaný signalizační protokol, což znamená, že veškerá logika je uložená v
koncových zařízeních, koncová zařízení znají i jednotlivé stavy komunikace, chování lze popsat
stavovým diagramem, ve kterém se v rámci dialogu (spojení) probíhají jednotlivé transakce (žádosti
a odpovědi). Tím je zvýšena odolnost komunikace proti chybám. Cena, která se musí zaplatit za
decentralizaci a dostupnost služby, je vyšší režie hlaviček zpráv. Nepochybně stojí za zmínku, že
end-to-end koncept SIPu je zásadně odlišný od klasického řešení PSTN (Public Switched Telephone
Network), kde logika je uložena v síti a koncová zařízení jsou primitivní. Jedním z cílů SIPu je zajistit
stejnou funkcionalitu jakou mají klasické PSTN, ale end-to-end návrh umožňuje v SIPu podstatně
snadnější implementaci nových služeb a některé z nich mohou být jen stěží nasazeny v klasických
PSTN.
SIP je textově orientovaný protokol z rysy podobnými HTTP a SMTP protokolu. HTTP a SMTP
jsou nepochybně nejúspěšnějšími a nejpoužívanějšími protokoly v Internetu, volba osvědčeného
73
5 Základy protokolu SIP
modelu komunikace zaručuje SIPu robustnost a nadčasovost. Klient posílá požadavky na server,
který zasílá odpovědi obdobně jako u HTTP, v hlavičkách najdeme položky From, To či Subject jako
u mailové komunikace pomocí SMTP. SIP entita je vázána k doméně obsluhovanou SIP Proxy a
mezidoménová komunikace je tedy mezi různými SIP Proxy, výjimkou je multidoménová SIP Proxy.
SIP entity jsou identifikovány použitím SIP URI (Uniform Resource Identifier), řekli bychom
jednoduše jmennými identifikátory, jejich obecný tvar je uveden níže.
sip:user:password@host:port;uri-parameters?headers
SIP URI se skládá jednak z části username identifikující uživatele a jednak z host vztažené k
doméně neboli hostiteli, který poskytuje uživateli určité prostředky k zajištění komunikace, následuje
pole password jehož použití není doporučeno. Port je standardně 5060 na UDP, případné parametry
se oddělují středníkem a pokud je potřebné přímo do URI zadat i nějaké parametry hlavičky, tak se
uvádějí za otazníkem. Většinou ale uvidíme SIP URI v podobě jednoduché konstrukce
sip:user@host , což nápadně připomíná emailovou adresu. Příkladem SIP URI může být:
sip:voznak@cesnet.cz
sip:234680468@cesnet.cz
SIP tedy pracuje se jmennými identifikátory a číslo můžeme přeložit na URI pomocí DNS, kde
jsou k tomu určeny záznamy NAPTR (Name Authority Pointer) a technika mapování URI na tel. čísla
(standard ITU-T E.164) se nazývá ENUM (E.164 NUmber Mapping). URI je obecně prezentováno
řetězcem znaků, jehož cílem je umožnit interakci se zdrojem pomocí určitého protokolu, tzn. musí
nutně obsahovat název schématu (protokol) a adresu zdroje, za schématem následuje dvojtečka.
URI dle RFC 3986 je definováno následovně:
Hierarchical part nese informaci o identifikaci zdroje, obvykle začíná dvojitým lomítkem “ // „ a
následuje např.:
domain name,
IP address,
username:password@,
user@host.
Pokud je specifikováno číslo portu, tak se začíná znakem „:“, např. :5060, :8080, :8085, atd...
Query je nepovinná část, která obsahuje doplňující informace, obecná syntaxe není definována,
obvykle se objevuje ve formě <key>=<value>, kde jednotlivé hodnoty jsou odděleny znakem „&“ ,
např. key1=value1&key2=value2&key3=value3 . Fragment je nepovinná část umožňující nepřímo
identifikovat další zdroj a začíná znakem „#”.
74
5 Základy protokolu SIP
SIP adresa je vázána k doméně, a proto následuje několik základních informací k DNS. Jména
domén jsou vyjádřena pomocí adres 32-bitových (IPv4) A záznam nebo 128 bitových (IPv6) - AAAA
záznam. Systém DNS zajišťuje překlad doménových jmen na IP adresy, stejně tak zajišťuje zpětný
překlad IP adresy na doménové jméno - PTR záznam. Doménová jména jsou vytvářena hierarchicky,
stejně jako jsou hierarchicky organizovány DNS servery. Prostor doménových jmen tvoří strom, jeho
kořenem je kořenová doména, která se zapisuje jako samotná tečka, pod ní se v hierarchii nacházejí
tzv. domény nejvyšší úrovně (Top-Level Domain, TLD).
Při vyhledávání v DNS provádějí klienti obvykle dopředné vyhledávání (reverzní dotaz slouží
k získání doménového jména ze známé IP adresy), což je hledání založené na názvu DNS jiného
počítače, který je uložen v záznamu o prostředku hostitele (A). U odpovědi na tento typ dotazu se
jako údaj o prostředku očekává adresa IP. Systém DNS poskytuje rovněž zpětné vyhledávání, při
kterém klienti používají známou adresu IP a hledají název počítače na základě jeho adresy, pro tento
účel byla ve standardech DNS definována speciální doména in-addr.arpa. V rámci domény in-
addr.arpa jsou pomocí opačného pořadí čísel adres IP v desítkovém formátu s tečkou vytvořeny
subdomény, které tvoří obor názvů pro zpětné dotazy. Stromová struktura domény in-addr.arpa
integrovaná do systému DNS vyžaduje definování dalšího typu záznamu o prostředku - záznamu o
prostředku ukazatele (PTR). Tento záznam o prostředku vytváří v zóně zpětného vyhledávání
mapování, které obvykle koresponduje se záznamem prostředku hostitele (A) pro název počítače
DNS hostitele v jeho zóně dopředného vyhledávání.
Strom je administrativně rozdělen rozdělit do zón, které spravují jednotliví správci. Obsah zóny
(domény či několika domén) je uložen v tzv. zónovém souboru, skládá se z jednotlivých záznamů
(resource records, RR) obsahujících dílčí informace. Zónový soubor vždy musí začínat záznamem
typu SOA. Nejčastěji se používají následující typy záznamů:
A (address record) obsahuje IPv4 adresu přiřazenou danému jménu, například neco.vsb.cz
má IP adresu 1.2.3.4, zónový soubor pro doménu vsb.cz bude obsahovat záznam,
neco IN A 1.2.3.4,
CNAME (canonical name record) je alias - jiné jméno pro jméno již zavedené, jeho definice
pomocí přezdívky umožňuje jej později snadno přestěhovat na jiný počítač, např. neco.vsb.cz
má sloužit zároveň jako nic.vsb.cz, v zónovém souboru přibude
nic IN CNAME neco,
SOA (start of authority record) je zahajující záznam zónového souboru. Obsahuje jméno
primárního serveru, adresu elektronické pošty jejího správce a další údaje (serial, refresh,
retry, expire a TTL).
Ačkoliv v nejjednodušší konfiguraci je možné použít dva UA posílající si navzájem SIP zprávy,
typická SIP síť bude obsahovat více než jeden typ prvků.
75
5 Základy protokolu SIP
Jednotlivé servery jsou většinou stavěny jako logické části SIP serveru, jelikož z pohledu nákladů
je efektivnější jejich provoz na jednom společném HW, každopádně filozofie návrhu SIP architektury
umožňuje jejich plnou dekompozici, což je výhodou pro velká řešení, distribuovaná architektura vede
ke zvýšení robustnosti.
Koncové body, kde vzniká a je terminována SIP relace, jsou nazývány jako user agents (UA). UA
obvykle jsou představovány koncovými terminály ve formě HW SIP telefonu nebo aplikace, SIP UA
mohou být IP telefony, Smartphones, PSTN brány (GW), IVR systémy, atd. UA jsou vztaženi k User
Agent Server (UAS) a User Agent Client (UAC). UAS a UAC jsou pouze logické entity, každý UA
obsahuje UAC a UAS:
Žádost a odpověď jsou dva základní typy SIP zpráv. Protože koncové zařízení téměř vždy
obsahuje UAC a UAS, tak používáme pouze označení UA namísto UAC a UAS. Například, volající
UA funguje jako UAC, když odesílá zprávu INVITE (požadavek na sestavení spojení) a přijímá
odpověď na požadavek. Volaný UA se chová jako UAS, když obdrží zprávu INVITE a odesílá
odpověď. Ale tato situace se mění, když volaný se rozhodne zavěsit a odesílá se zpráva BYE a
ukončuje spojení. V tomto případě se volající chová jako UAC a volaný jako UAS.
76
5 Základy protokolu SIP
Obr. 5.1 ukazuje tři UA a SIP Proxy. UAC inicializuje spojení odesláním žádosti INVITE na
SIP Proxy, ta je přeposlána adresátovi, jelikož je příjemců více, tak dochází k rozeslání na dva UAS
(forking). Na prvním z nich, který přijme volání, tak je sestaveno spojení. Při ukončení spojení
odesílá UAC zprávu BYE přímo na UAS.
Použití B2BUA je poměrně časté, typickým příkladem je ASTERISK, který má rozsáhlé možnosti
doplňkových služeb pro koncové uživatele, je používán jako pobočková ústředna do velikosti řádově
tisíců uživatelů. Jako představitele klasické SIP PROXY si uveďme KAMAILIO, řešení je vhodné i pro
velké poskytovatele s dimenzování až pro stovky tisíc uživatelů [v133], [v191] and [v229].
SIP umožňuje vytvořit infrastrukturu sítě hostitelů nazývaných jako SIP Proxy servery. Koncové
terminály UA mohou odesílat zprávy na SIP Proxy server. SIP Proxy servery jsou důležité entity
infrastruktury. Zajišťují směrování žádostí o spojení dle aktuálního umístění adresáta, mohou
provádět autentizaci, účtování a realizovat doplňkové služby (např. přesměrování). Nejdůležitější
úloha SIP Proxy serveru je směrovat žádosti o sestavení spojení blíž k volanému. Při inicializaci
sestavení spojení je základní úlohou SIP Proxy nalézt další SIP Proxy, která obslouží požadavek a
na tuto danou zprávu odeslat. K nalezení SIP proxy pro next hop může kromě statického záznamu i
vyhledávat v DNS. Požadavek na sestavení spojení je tedy směrován přes jednotlivé SIP Proxy a
volaný nakonec žádost akceptuje nebo odmítne. Máme dva základní typy SIP proxy serverů:
stateless (bezestavový),
stateful (a s informací o stavech).
Stateless SIP Proxy jsou poměrně jednoduché a pouze přeposílají zprávy nezávisle na jejich
vzájemné vazby. Zprávy jsou většinou v pořádku z hlediska souslednosti a významu v signalizaci,
bezestavové SIP Proxy servery neumí kontrolovat jejich výměnu z hlediska smysluplnosti, nezachytí
77
5 Základy protokolu SIP
replikaci zpráv, detekce nekonečných smyček jim trvá déle, nejsou srovnatelné se stateless SIP
Proxy do rozsahu možností, neumí např. větvení či přesměrování. Stateless SIP Proxy servery jsou
jednoduché, ale rychlejší než Stateful SIP Proxy . Využití mají jako balanční servery, pro jednoduché
překládání zpráv a směrování.
Stateful SIP Proxy servery jsou mnohem komplexnější. Po přijetí požadavku, server vytvoří záznam
stavu a drží důležité informace, dokud nedojde k ukončení transakce či dialogu, dělí se tak na dva
typy.
Některé transakce, zejména vytvořené zprávou INVITE, mohou trvat poměrně dlouho (dokud
volaný nevyzvedne nebo se neukončí volání). Protože proxy servery s informací o stavech musí
udržovat stav po celou dobu dané transakce, je jejich výkon limitován.
Schopnost přiřazovat SIP zprávy do transakcí dává serveru některé zajímavé vlastnosti,
například může provádět větvení, na přijetí jedné zprávy, může být odesláno více zpráv (uživatel má
např. vícenásobnou registraci). Stateful SIP Proxy server může zachytit opakování zpráv, protože
ze stavu transakce ví, jestli byla stejná zpráva už přijata (Stateless Sip Proxy nemůže ověřovat,
protože nedrží stav). Stateful SIP Proxy server může aplikovat komplikovanější metody nalezení
uživatele, například možnost zkusit volat na telefon v zaměstnání a v případě neohlášení volání
přesměrovat na mobilní telefon, zatímco stateless SIP Proxy žádost přepošle a už o nemá k ní
informacemi, čili nemůže tedy provést např. přesměrování po čase. Většina SIP Proxy serverů je
stateful , často nabízejí generování záznamů o spojeních, větvení, některé druhy podporují i NAT.
SIP je připraven na situaci, kdy každá jednotka (např. firma) bude mít vlastní SIP proxy server, který
je užíván všemi UA v rámci administrované jednotky [v90].
Předpokládejme, že jsou dvě firmy A a B a každá z nich má svůj Proxy server. Obr. 5.2 ukazuje
situaci, kdy Alice z firmy A inicializuje spojení na Boba z firmy B. Uživatel Alice volá Boba a použije
URI adresu sip:bob@b.com. UA neví, kam má poslat žádost o sestavení spojení, ale je
nakonfigurován tak, že veškerý odchozí provoz (outbound traffic) posílá na SIP Proxy server své
firmy A s adresou proxy.a.com. Proxy server zjistí, že uživatel sip:bob@b.com je v jiné firmě a tak
vyhledá odpovídající SIP Proxy server, kam pošle žádost. Odpovídajícím serverem je proxy.b.com a
je zadán staticky v proxy serveru firmy A anebo bude Proxy vyhledán pomocí záznamu DNS SRV,
kterým je zjištěno, kdo poskytuje službu SIP v doméně b.com. Žádost tedy dorazí na proxy.b.com.
SIP Proxy ví, že Bob je aktuálně ve své kanceláři a dosažitelný na telefonu na svém stole, jež má IP
adresu 1.2.3.4, takže SIP Proxy přeposílá žádost INVITE.
78
5 Základy protokolu SIP
Zmínili jsme se, že SIP Proxy na proxy.b.com zná současnou polohu Boba, ale neřekli jsme, jak
Proxy může lokalizovat uživatele. Bobův UA (SIP telefon) musí být registrován na SIP Registrar
serveru. Registrar server je speciální část SIP serveru, která přijímá od uživatelů požadavky na
registraci, tím získává informaci o jejich aktuální poloze (IP adresa, port a uživatelské jméno) a
ukládá informaci do lokalizační databáze (location database).
V lokalizační databázi v našem případě došlo k namapování adresy User URI sip:bob@b.com k
adrese Device URI sip:bob@1.2.3.4:5060. Lokalizační databáze je pak užívána Proxy serverem.
Když inbound Proxy server obdrží žádost pro sip:bob@b.com, vyhledá v lokalizační databázi záznam
sip:bob@1.2.3.4:5060 a na danou IP adresu pošle žádost. Registrar server je velmi často pouze jako
logická část SIP serveru, jelikož je těsně svázán s Proxy serverem. Obr. 5.3 znázorňuje typickou SIP
registraci. Zpráva REGISTER je vyslána do Registrar serveru a obsahuje adresu záznamu User URI
sip:bob@biloxi.com a kontaktní adresu Device URI sip:bob@1.2.3.4:5060 , kde 1.2.3.4 je IP adresa
telefonu. Registrar zaznamenává tyto informace do lokalizační databáze. Pokud registrace proběhla
správně, tak Registrar server posílá odpověď 200 OK a proces registrace je ukončen. Každá
registrace má limitovanou dobu platnosti, doba platnosti je v hlavičce kontaktu (Expires), do té doby
musí UA obnovit registraci, jinak bude nedostupný.
79
5 Základy protokolu SIP
Jak již bylo řečeno, SIP URI je vázána k doméně, ta je nezávislá na síťové topologii, a například SIP
server v doméně vsb.cz můžu používat odkudkoliv. Může být ovšem někdy nepraktické jej používat,
pokud jsem v doméně cvut.cz a nabízí se mi možnost využívat jejich SIP Proxy, v tom případě by
ale někdo měl vědět o mém novém SIP URI a zajistit přesměrování, viz. obr. 5.4
80
5 Základy protokolu SIP
Entita, která přijímá požadavek a odesílá zpět odpověď obsahující lokalizaci konkrétního
uživatele se nazývá Redirect server. Redirect server přijímá požadavky a vyhledává zamýšlené
příjemce v lokalizační databázi vytvořené registrar serverem. Následně vytváří seznam aktuálních
lokalizací uživatele a posílá jej odesílateli požadavku v odpovědi zařazené do třídy 3xx. Odesílatel
požadavku poté dostává seznam destinací a odesílá další požadavky přímo na ně. Obr. 5.5 ukazuje
způsob přesměrování, Alice volá Boba a odeslaný INVITE přijme Redirect server, který zjistí, že Bob
má nový kontakt a vrací odpověď 302 Moved Temporarily, ve které do pole contact zapíše SIP URI,
na kterou je Bob přesměrován. Alice zasílá nový INVITE na URI z kontaktu předaného Redirect
serverem a INVITE již s novou požadovanou URI se dostává na SIP Proxy sip.cvut.cz , kde už o
Bobovi vědí a umí INVITE na něj přeposlat.
Komunikace v SIPu je tvořena zprávami, které jsou obvykle přenášeny v samostatných UDP
datagramech. Každá zpráva obsahuje hlavičku zprávy (header) a může obsahovat vlastní tělo zprávy
s popisem médií (body, většinou SDP), hlavička a tělo jsou odděleny volným řádkem (CRLF).
generic-message = start-line
*header fields
CRLF
[ message-body ]
V prvním řádku zprávy je identifikován její typ. Známe dva typy zpráv, jednak žádost (neboli
metoda) a jednak odpověď.
Žádosti jsou obvykle užívány k registraci uživatele, sestavení, modifikaci či ukončení spojení
anebo může jít o další služby (presence, instant messaging). Odpovědi jsou užívány k potvrzení
přijetí žádosti a její vyřízení, obsahují konkrétní status. Typická SIP žádost vypadá následovně:
(v): 0
(o): - 3428274950 3428274950 IN IP4 158.196.192.32
(s): SJphone
81
5 Základy protokolu SIP
První řádek nám říká, že se jedná o zprávu INVITE, jež je užívána k sestavení spojení. URI
na prvním řádku sip:0738331699@asterisk.vsb.cz se nazývá Request URI a obsahuje URI
dalšího skoku zprávy (next hop, směruje se dle RURI). V tomto případě bude hostitelem
asterisk.vsb.cz a hledá se uživatel 0738331699.
SIP žádost obsahuje v hlavičce jedno nebo více polí Via, jež jsou použity k záznamu cesty
žádosti. Následně jsou užívány ke směrování SIP odpovědí přesně takovou cestou, jakou
byly odeslány. Naše INVITE zpráva obsahuje jedno pole Via, to bylo vytvořeno UA, který
odeslal žádost. Z pole Via můžeme říct, že odpověď bude doručena UA na IP adresu
158.196.192.32 a port 5060.
Pole hlavičky From a To identifikuje iniciátora volání (volající) a příjemce (volaného). Pole
From obsahuje parametr tag, který slouží jako identifikátor dialogu a bude popsán později.
Pole hlavičky Call-ID je identifikátor dialogu a jeho cílem je identifikovat zprávy náležející
jednomu volání. Takovéto zprávy mají stejný identifikátor Call-ID.
V rámci dialogu jsou jednotlivé žádosti očíslovány v poli CSeq. Protože žádosti mohou být
odeslány nespolehlivým přenosem, může docházet k opakováním a pořadové číslo je nutné,
aby příjemce mohl detekovat opakování a správně tak selektovat žádosti.
V SIP hlavičce je dále pole Contact obsahující IP adresu a port, na kterém odesílatel očekává
další žádosti odesílané volaným, obě strany si vymění své kontakty v žádosti a odpovědi a
pokud bude chtít jedna ze stran poslat další požadavek, např. ukončení spojení BYE, tak
nemusí posílat žádost na SIP Proxy, ale pošle ji přímo. Samozřejmě že je možnost ovlivnit i
cestu dalších žádostí v dialogu, ale to si vysvětlíme v dalších kapitolách.
Hlavička zprávy je oddělena od těla zprávy prázdným řádkem. Tělo zprávy žádosti INVITE
obsahuje popis médií vyhovující odesílateli a kódované v SDP. Z SDP jsme se dozvěděli,
kdo poslal nabídku SDP a na které IP má být tok médií ukončen. A co se týče vlastní nabídky,
tak ta obsahuje čtyři kodeky seřazené dle preferencí G.729, GSM, PCM (A-law) a PCM (μ-
law).
Žádosti neboli metody jsou obvykle užívány k inicializaci procedury (sestavení, aktualizaci či
ukončení spojení). V jádru SIP protokolu je dle RFC 3261 specifikováno šest metod, které jsou
následující:
INVITE je žádost o inicializaci spojení nebo změnu parametrů již probíhajícího spojení (re-
INVITE);
ACK je metoda potvrzující přijetí konečné odpovědi na žádost INVITE. Sestavení relace
používá „3-way hand-shaking“, volaný periodicky opakuje odpověď (např. 200 OK), dokud
82
5 Základy protokolu SIP
nepřijme ACK, což indikuje, že odpověď byla doručena. Metoda ACK má řadu výjimek v
pravidlech gramatice SIPu, které budou zmíněny později;
BYE je zpráva užívána k ukončení sestaveného spojení;
CANCEL se používá ke zrušení sestavovaného spojení, když není sestaven dialog, volaný
ještě nepotvrdil konečnou odpovědí žádost INVITE a volající chce zrušit sestavování spojení;
REGISTER je žádost registrace anebo odregistrování uživatele, sváže se logická jmenná
adresa uživatele s jeho fyzickým umístěním (IP adresa a port), konkrétně jde o položky
FROM a CONTACT ze SIP hlavičky. Registrace jsou časově limitovány a je nutné je
periodicky obnovovat;
OPTIONS je speciální typ metody k zjištění vlastností SIP zařízení, má stejnou strukturu jako
INVITE, ale spojení není sestavováno, pouze se přijme odpověď. Využívá se např. nejen ke
zjištění podporovaných funkcí, ale SIP Proxy může periodickými dotazy zjišťovat mezi
registracemi, zda SIP UA odpovídá a je dostupný anebo naopak SIP UA může periodicky
posílat Options přes NAT k udržení záznamu překladu a tím pádem průchodnosti zvenčí.
Kromě výše vysvětlených šesti základních metod existují i další žádosti, které byly definovány
dodatečně v některých dalších RFC, viz. níže. Kupříkladu vyžadujeme-li funkcionalitu spolehlivé
doručování dočasných odpovědí (PRACK), tak je nutné zjistit, zda konkrétní zařízení podporuje RFC
3262. Pro základní telefonii postačí RFC 3261, pro přehled si uvedeme seznam metod užívaných
SIPem s odkazem na konkrétní RFC:
Jestliže UAS obdrží žádost, tak na žádost odesílá odpověď. Každá žádost musí být zodpovězena,
výjimkou je metoda ACK, což je žádost, která má význam potvrzení doručení odpovědi na INVITE.
Naproti tomu PRACK (Provisional Acknowledgement) se potvrzuje. Odpovědi jsou svou strukturou
83
5 Základy protokolu SIP
velmi podobné žádostem, kromě prvního řádku [col]. První řádek odpovědi obsahuje verzi protokolu
(SIP/2.0) a kód odpovědi (reply code). Typická odpověď vypadá následovně:
(v): 0
(o): root 4648 4648 IN IP4 158.196.146.12
(s): session
(c): IN IP4 158.196.146.12
(t): 0 0
(m): audio 14290 RTP/AVP 0 8 3
(a): rtpmap:0 PCMU/8000
(a): rtpmap:8 PCMA/8000
(a): rtpmap:3 GSM/8000
Kód odpovědi je celé číslo z rozsahu 100 až 699 a označuje typ odpovědi. Celkem je definováno
6 tříd odpovědí, buď jsou informativní 1xx anebo finální 2xx-6xx:
1xx jsou dočasné informativní odpovědi, které jsou odesílány na žádosti, které byly přijaty,
ale výsledek zpracování ještě není znám, na základě této odpovědi musí odesílatel zastavit
opakování odesílání dané žádosti. Obvykle SIP Proxy servery odesílají odpovědi s kódem
100 (Trying), jestliže začínají zpracovávat INVITE a UA odesílají odpovědi s kódem 180
(Ringing), které oznamují vyzvánění volaného, kód 183 Session Progress má stejný význam
jako 180, ale je doplněn o popis médií (SDP),
2xx jsou pozitivní finální odpovědi, je to poslední odpověď, kterou odesílatel na svou
žádost dostává, vyjadřuje výsledek zpracování konkrétní žádosti. Odpovědi s kódy 200 až
299 oznamují, že požadavek byl akceptován a úspěšně zpracován, například odpověď 200
OK je vyslána, jestliže uživatel akceptuje žádost INVITE. V případě větvení zprávy INVITE
můžeme dosáhnout několik UAS a každý z nich bude akceptovat žádost. V tomto případě je
každá odpověď rozlišena parametrem tag v poli To. Každá odpověď probíhá v odlišném
dialogu s jedinečným identifikátorem dialogu,
3xx odpovědi jsou užívány k přesměrování. Tyto odpovědi dávají informaci o nové poloze
uživatele nebo alternativní službě, která má být použita. Pokud Proxy přijme žádost a
nezpracuje ji z nějakého důvodu, tak vyšle volajícímu v odpovědi požadavek na přesměrování
a vloží do odpovědi jiné umístění, které má být kontaktováno. Může to být jiná Proxy nebo
aktuální umístění volajícího (z lokalizační databáze vytvořené registrar serverem). Volající
následně znovu vyšle žádost na nové umístění, odpovědi 3xx jsou konečné,
84
5 Základy protokolu SIP
4xx jsou negativní konečné odpovědi a znamenají problém na straně klienta. Žádost
nemohla být zpracována, protože obsahuje chybnou syntaxi,
5xx znamenají problém na straně serveru. Žádost je zřejmě v pořádku, ale server selhal při
zpracování, klient by měl obvykle požadavek zkusit znovu,
6xx představuje globální chybu a tento kód je vysílán, pokud žádost nemůže být splněna na
žádném serveru, to je odpověď obvykle vysílaná serverem, když má informaci o konkrétním
uživateli, např. UA vysílá 603 Decline response, když odmítá žádost o sestavení spojení,
Kromě odpovědi odpovídající třídy obsahuje první řádka popis reason phrase, obsažený kód je
určen ke zpracování, což je snadno analyzovatelné a popis jasně oznamuje výsledek. UA může
popis zobrazit uživateli. Přiřazení žádosti k odpovědi je na základě pole CSeq v hlavičce, kromě
pořadového čísla obsahuje také metodu korespondující žádosti, v našem případě to byla žádost
INVITE. Níže je uveden seznam odpovědí, se kterými se můžeme setkat v SIP protokolu:
86
5 Základy protokolu SIP
Na obr. 5.5 jsou pole žádosti INVITE a konečné odpovědi na ni 200 OK, zobrazeny jsou i obsahy
SDP, obě strany si vyměnily na sebe kontakty, nabídku SDP a odpověď na ní, použit bude kodek
PCM G.711 µ-law.
5.3.4 Transakce
Transakce jsou v SIPu velmi důležité pro tok zpráv a zacházení s nimi, neboť většina SIP prvků
jsou transakční stroje. Ačkoliv bylo řečeno, že SIP zprávy jsou posílány sítí nezávisle, tak obvykle
jsou uspořádány do transakcí agenty UA a stavovými SIP Proxy servery.
Transakce je sekvence SIP zpráv vyměňovaných mezi síťovými SIP prvky. Transakce obsahuje
jednu žádost a všechny odpovědi vztažené k této žádosti. To může znamenat žádnou, jednu nebo i
více dočasných odpovědí a jednu nebo více konečných odpovědí (např. při větvení v Proxy na
zprávu INVITE ). Jestliže byla transakce zahájena žádostí INVITE, pak stejná transakce obsahuje i
zprávu ACK, ale dle RFC 3261 pouze tehdy, jestliže finální odpověď nebyla třídy 2xx, potom ACK
není součástí dané transakce. Důvodem je, že odpověď je zpráva 200 OK, viz. obr. 5.6. Jiná situace
je po přijetí non-2xx odpovědi, např. 407 Proxy Authorization Required, pak by žádost ACK do
transakce patřila a v poli branch byl stejný identifikátor jako u předešlých zpráv stejné transakce.
Především UA jsou zodpovědní za opakování odpovědi 200 OK, dokud nepřijmou ACK.
SIP entity, které sledují tyto transakce, se nazývají stateful, vytvořený stav k žádosti je spojován
s transakcí a je držen po celou dobu trvání transakce. Pokud přichází žádost nebo odpověď, tak je
zkoušeno vždy přiřazení zprávy do probíhající transakce. Aby tato operace byla proveditelná, tak
musí ze zprávy přečíst jednoznačný identifikátor transakce a porovnat jej s identifikátory
87
5 Základy protokolu SIP
probíhajících transakcí. Jestliže takováto transakce existuje, tak dochází k jejímu doplnění o další
informace. V předchozím SIP RFC2543 (SIP 1.0) byl identifikátor transakce odvozován jako hash z
důležitých informací v hlavičce zprávy (zahrnující pole To, From, Request-URI a CSeq), což bylo
komplikované a zpomalovalo zpracování a při testech interoperability bylo zdrojem problémů. V
aktuálně používaném RFC 3261 (SIP 2.0) byl způsob výpočtu identifikátoru transakce zásadně
změněn. Namísto komplikovaného určování z polí hlavičky teď obsahuje SIP zpráva identifikátor
přímo v políčku Via s názvem branch. To je významné zjednodušení, ovšem stále existují staré
implementace, které nepodporují nový způsob určování identifikátoru transakce, proto musí být
určování zpětně kompatibilní s oběma verzemi, noví UA a SIP Proxy musí rozeznat i předešlý
způsob, skutečnost v praxi je ovšem mnohdy jiná. Způsob nového určení transakce poznáme dle
začátku řetězce z9hG4bK v branch identifikátoru pole Via.
branch=z9hG4bK9ec4c0248acd48724710d7
Stavový transakční stroj okamžitě odpovídá 100 Trying na přijetí INVITE, čímž se potvrdí
přijetí INVITE a zastaví se případné její opakování, pokud už odpověď 100 Trying byla jednou
zaslána, tak se znovu nepřeposílá. Bezestavový stroj má jiné chování a přepošle vše, co dostane,
neboť si nepamatuje stavy transakce. Rozdíl mezi SIP Proxy pracující s transakcemi nebo bez je
vidět na obr. 5.7.
5.3.5 Dialog
V předchozím kapitole jsme si ukázali dvě transakce, viz. obr. 5.8, jedna transakce obsahovala
zprávu INVITE a odpověď, druhá obsahovala zprávu BYE a následnou odpověď. Obě transakce
však spolu souvisejí a náleží tak do jednoho dialogu, v první verzi SIPu RFC 2543 se používal pro
dialog výraz call-leg.
Dialog bychom mohli definovat jako soubor SIP zpráv peer-to-peer mezi dvěma UA, které mají
vzájemnou spojitost. Dialogy popisují řazení a směrování zpráv mezi dvěma koncovými body.
Dialogy jsou identifikované pomocí pole Call-ID, From (tag) a To (tag). Zprávy, které mají tyto tři
identifikátory stejné, tak náleží jednomu dialogu. Ukázali jsme si, že pole CSeq je užíváno k řazení
zpráv, je používáno k řazení zpráv uvnitř dialogu. CSeq číslo určuje transakci uvnitř dialogu, protože
jsme řekli, že žádost a přidružená odpověď se nazývá transakce. To znamená, že v každém směru
může být uvnitř dialogu aktivní pouze jedna transakce. Mohli bychom také tvrdit, že dialog je
posloupnost transakcí. Pomocí CSeq snadno rozpoznáme zprávy dialogu. Dialogy usnadňují řízení
komunikace, protože UA nedrží stavy dialogu. V uvedeném příkladu zpráva INVITE zahajuje dialog,
neboť inicializuje spojení, všechny zprávy v tomto spojení patří do stejného dialogu, který je ukončen
konečnou odpovědí na žádost BYE.
Dialogy jsou vytvářeny generováním odpovědí typu non-failure (bez návratu chyby), pouze
odpovědi typu 2xx a 101-199 jsou schopny sestavit dialog, neboť vrací značku (tag) v poli To (To tag).
RFC 3261 nepřináší zcela jednoznačnou definici, kdy je dialog přesně sestaven a proto
rozeznáváme dva stavy:
Pokud se hovoří o dialogu, tak jde o potvrzený dialog, zatímco v prvním případě se vždy uvádí
plně jako early dialog. Early dialog je sestaven dočasnou (non-final) odpovědí 101-199, potvrzený
dialog je sestaven pomocí pozitivní konečné odpovědi 2xx. Dialog při typickém sestavení spojení
projde prvním stavem, než je potvrzen. Všimněme si, že dočasná odpověď typu 100 TRYING
neumožňuje sestavit early dialog a v této odpovědi se nepřidává To tag.
Určení transakce a dialogu si můžeme ukázat v následujícím příkladu, který odpovídá obr. 5.9,
jde tedy o žádost INVITE s odpověďmi 100 TRYING, 180 RINGING, 200 OK, dále žádost ACK a
nakonec BYE s odpovědí 200 OK. První zpráva #1 INVITE obsahuje branch=z9hG4bK7225f861 ,
který najdeme ve zprávách #1 INVITE, #2 100 TRYING, #3 180 RINGING a #4 200 OK, tím je
určena první transakce. Zpráva #5 ACK obsahuje branch=z9hG4bK57289016 , čili do první
transakce nepatří a ani novou transakci nevytváří, neboť na tuto žádost není odpověď. Druhá
transakce obsahuje branch=z9hG4bK011c16dd a je tvořena #6 BYE a #7 200 OK. Dialog je určen:
Early dialog je vytvořen přijetím #3 180 RINGING a dialog je sestaven přijetím #4 200 OK. Pole
Cseq se v rámci dialogu inkrementuje s každou novou žádostí (výjimkou je ACK), všechny odpovědi
k žádosti mají stejný Cseq, čili lze jednoduše určit, ke které žádosti odpověď patří a rovněž se
snadno rozpoznají retransmise.
#1 INVITE
Request-Line: INVITE sip:7002@158.196.192.32 SIP/2.0
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK7225f861;rport
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: <sip:7002@158.196.192.32>
Contact: <sip:5779@158.196.146.12>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: 422
(v): 0
(o): root 4648 4648 IN IP4 158.196.146.12
(s): session
(c): IN IP4 158.196.146.12
(t): 0 0
(m): audio 14252 RTP/AVP 0 8 3 18
(a): rtpmap:0 PCMU/8000
90
5 Základy protokolu SIP
#2 100 TRYING
Status-Line: SIP/2.0 100 Trying
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK7225f861;rport=5060
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: "SJphone" <sip:7002@158.196.192.32>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 102 INVITE
Content-Length: 0
Server: SJphone/1.65.377a (SJ Labs)
#3 180 RINGING
Status-Line: SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK7225f861;rport=5060
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: "SJphone" <sip:7002@158.196.192.32>;tag=4227117d4b8
Contact: <sip:7002@158.196.192.32>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 102 INVITE
Content-Length: 0
Server: SJphone/1.65.377a (SJ Labs)
#4 200 OK
Status-Line: SIP/2.0 200 OK
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK7225f861;rport=5060
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: "SJphone" <sip:7002@158.196.192.32>;tag=4227117d4b8
Contact: <sip:7002@158.196.192.32>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 102 INVITE
Content-Length: 274
Content-Type: application/sdp
Server: SJphone/1.65.377a (SJ Labs)
(v): 0
(o): - 3428314846 3428314846 IN IP4 158.196.192.32
(s): SJphone
(c): IN IP4 158.196.192.32
(t): 0 0
(m): audio 49152 RTP/AVP 0
(a): rtpmap:0 PCMU/8000
#5 ACK
Request-Line: ACK sip:7002@158.196.192.32 SIP/2.0
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK57289016;rport
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: <sip:7002@158.196.192.32>;tag=4227117d4b8
Contact: <sip:5779@158.196.146.12>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
91
5 Základy protokolu SIP
#6 BYE
Request-Line: BYE sip:7002@158.196.192.32 SIP/2.0
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK011c16dd;rport
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: <sip:7002@158.196.192.32>;tag=4227117d4b8
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 103 BYE
User-Agent: Asterisk PBX
Max-Forwards: 70
Content-Length: 0
#7 200 OK
Status-Line: SIP/2.0 200 OK
Via: SIP/2.0/UDP 158.196.146.12:5060;branch=z9hG4bK011c16dd;rport=5060
From: "5779" <sip:5779@158.196.146.12>;tag=as396d4fbf
To: "SJphone" <sip:7002@158.196.192.32>;tag=4227117d4b8
Contact: <sip:7002@158.196.192.32>
Call-ID: 1c068e57440c89084bf549466dddfea0@158.196.146.12
CSeq: 103 BYE
Content-Length: 0
Server: SJphone/1.65.377a (SJ Labs)
Jelikož se v SIP signalizaci používá mnohdy nespolehlivý přenos (UDP), musí být ošetřeny
retransmise žádostí v transakcích.
Retransmise se neuplatňují při použití spolehlivého přenosu (TCP). Přijetí dočasné informativní
odpovědi 1xx zastavuje retransmise žádosti INVITE a UAC musí čekat na přijetí dalších odpovědí.
UAS může opakovat dočasnou odpověď 1xx před zasláním finální odpovědi, pokud se používá
nespolehlivý přenos. Každá finální odpověď na INVITE je potvrzena ACK. Na straně UAC je
dohlížen timeout transakce, žádná transakce by neměla trvat déle než 64*T1 (časovač B). Pokud
vyprší časovač A, tak se provede retransmise a časovač se zvedne na 2*T1, pokud i tento čas
vyprší , tak se zase zdvojnásobí. Níže jsou popsány časovače uvedené v RFC 3261.
92
5 Základy protokolu SIP
Protokol SIP je přenášen jako otevřený text a je snadněji analyzovatelný než H.323, který je
kódován v ASN.1 PER. Pro zachycení a nahlídnutí do SIPové komunikace nepotřebujeme
analyzátory, vystačíme si např. s linuxovým příkazem ngrep. Principy způsobu komunikace v SIPu
jsou podobné HTTP a díky této podobnosti se využívají stejné bezpečnostní mechanismy, které
používá právě Hypertext Transfer Protocol [dor].
93
5 Základy protokolu SIP
heslo vytvoří z náhodně generovaného řetězce, loginu a hesla. Tato metoda ověřuje
autenticitu na základě sdíleného hesla. Obsah zprávy se však nijak nešifruje.
Secure MIME (S/MIME) je, jak z názvu vyplývá, zabezpečení tzv. MIME (Multipurpose
Internet Mail Extension). Konkrétně tato metoda zabezpečí obsah zprávy a zaručí i její
integritu. Existuji dva způsoby šifrování obsahu dat MIME. První application/pkcs7-mime
dokáže digitálně podepsat a zašifrovat data. Druhý způsob multipart/signed je podobný
prvnímu s tím rozdílem, že zpráva obsahuje šifrovaná i nešifrovaná data. K ověření
autentizace se používá architektura veřejných klíčů (PKI). Pro utajení obsahu zprávy jsou
využity symetrické kryptografické primitivy (DES, 3DES, AES).
SIPS URI (TLS) využívá architekturu veřejných klíčů pro ověření autentizace. Při použití této
metody se mění prefix identifikační hlavičky na sips. Aby byla zaručena bezpečná
komunikace, používá tato metoda šifrovaný protokol Transfer Layer Security (TLS). Tento
protokol využívá asymetrické šifrování (RSA), symetrické algoritmy (DES, 3DES, AES) a
hashovací funkci. Při použití této metody je kladena podmínka, že protokol TLS je použit na
celé cestě zprávy a pro SIP musí být použit protokol TCP.
Princip používané metody HTTP digest bude prakticky vysvětlen v následující kapitole
zabývající se registrací, u registrace se neautentizovaná zpráva REGISTER odmítá pomocí 401
Unauthorized, v případě INVITE je to 407 Proxy Authentication Required, následně se pošle
REGISTER nebo INVITE s autentizačním řetězcem, který je ověřen. Pokud je použito TLS, tak další
autentizace pomocí HTTP digest je zbytečná a nepoužívá se, neboť už sestavení TLS obsahuje
jeden z kroků, u kterého se klient prokazuje certifikátem a zabezpečení je na mnohem vyšší úrovni.
Řada aplikací volně dostupných na Internetu se dá použít buď ke generování útoků, odposlechu
hovoru či modifikaci paketů spojení, proto je otázka zabezpečení nejen signalizace, ale i vlastního
hovoru velmi důležitá, což je argument pro použití TLS. Například aplikace SCAPY umožňuje nejen
prolomení základních způsobů zabezpečení, ale i modifikaci obsahu paketů v reálném čase. SIPp je
open-source generátor provozu, pomocí kterého zvládneme připravit DoS (Denial of Service) anebo
DDOS útok (distribuovaný DoS). Aplikace voipbot umí pět různých typů útoků a sipdump se sipcrack
umožňují uhodnutí hesla v autentizací s MD5. Zajímavou aplikací s použitím pro testování výkonnosti
SIP serveru anebo pro útoky je VoIPER.
5.4 Registrace
Při registraci se sváže User URI z pole From s Device URI z pole Contact hlavičky SIP. Pokud
pole Contact hlavička žádosti Registrace neobsahuje, tak se z Registrar serveru ve 200 OK vrátí
seznam platných registrací k SIP URI z pole From. Device URI nese IP adresu a port, na kterém je
uživatel se svou SIP URI k dosažení, např. pro SIP URI sip:voznak@vsb.cz může být device URI
sip:voznak@158.196.81.205:5060 . Doba platnosti registrace je dána parametrem expires v hlavičce,
tento čas je Registrar serverem upravován, pokud UAC v návrhu nezadá čas, který by ležel v
povoleném intervalu mezi minimální a maximální dobou registrace na Registrar serveru. Pokud se
pošle nulová hodnota doby registrace expires=0, tak to znamená zrušení registrace, viz. níže.
94
5 Základy protokolu SIP
Contact: <sip:voznak@195.168.1.10;rinstance=45b13194f4a07bb>;expires=0
To: "voznak"<sip:voznak@cesnet.cz>
From: "voznak"<sip:voznak@cesnet.cz>;tag=9043320d
Call-ID: MjY0YzU5OTdiMDYxNTI4YzgzNTIwYzE2NTUzNzgyZGM.
CSeq: 5 REGISTER
User-Agent: X-Lite release 1100l stamp 47546
Authorization: Digest username="voznak",realm="cesnet.cz", nonce="48ad92308a4f8ee",
uri="sip:cesnet.cz",response="6e6f1ca5803c805ac885f8cb4a8a1df1",algorithm=MD5
Content-Length: 0
Odregistrování všech lokalizací konkrétního URI uživatele se docílí tak, že do pole Contact se
zadá znak * a zároveň s nulovou hodnotu do expirace expires=0.
Na obr. 5.9 je znázorněna výměna při registraci s autentizací. Žádost INVITE je odeslána bez
autentizačních údajů na SIP Proxy, ta odmítá odpovědí 401 Unauthorized, v odpovědi posílá bližší
informace k autentizaci. Klient akceptuje zaslané informace a vypočte hash, kterou zašle ve zprávě
REGISTER, tentokrát je úspěšně autentizován a dostává 200 OK s potvrzením registrace.
Call-ID: Mzg1M2VlZDRkOWQ5NmJlNzA0MTk1OGNhZDE3MjZiNDg.
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm="cesnet.cz", nonce="48ad92c"
Server: Sip EXpress router (0.9.6 (i386/linux))
Content-Length: 0
Na příkladu výše je odpověď 401 Anauthorized, která obsahuje v odmítnutí výzvu k autentizaci
a podává klientovi realm a nonce pro hashovací funkci. Klient posílá žádost REGISTER znovu, ale
tentokrát již s autentizačními údaji, je použit algoritmus MD5, pro hash se použije username, realm,
nonce a password, což je sdílené tajemství. Výsledný hash je v poli response.
5.5 Směrování
Zásadním problémem směrování je, jak z URI adresy určit cíl. SIP v tomto směru může využít
buď DNS anebo statických směrovacích záznamů a dalších údajů lokalizace UA v databázi, do které
se dostaly přes Registrar server. Pokud se cíl určí a spojení je uskutečněno, tak se objevují další
zásadní otázky. Kudy budou směrovány další žádosti, zda by měla SIP Proxy být prostředníkem v
komunikaci a zůstávat v SIP signalizační trase či nikoliv.
Noční můrou každého signalizačního protokolu je vznik nekonečné smyčky (zacyklení), v tomto
ohledu má SIP dva silné nástroje. Prvním je detekce smyček pomocí branch parametru v poli Via,
který si umí zapamatovat ovšem pouze stateful SIP Proxy, pomocí branch zjistí, že zpráva patří do
jedné transakce a může tak limitovat počet zpráv v transakci. Druhým nástrojem je povinné pole
Max- Forwards v SIP hlavičce, které se snižuje o jedničku na každém skoku (výchozí hodnota je
obvykle 70), tzn. s každým průchodem přes SIP Proxy se hodnota sníží, až dosáhne 0, tak SIP Proxy
odešle 483 Too Many Hops a zpráva zanikne.
V obr. 5.10 je znázorněn tok zpráv v rámci jednoho SIP Proxy serveru, ze kterého je čitelná
souslednost konkrétních žádostí a odpovědí. Směrování mezi SIP Proxy servery je obsahem dalších
kapitol.
96
5 Základy protokolu SIP
Žádosti jsou směrovány dle prvního řádku (RURI) SIP metody a odpovědi na žádost dle prvního
záznamu ve Via., viz. obr. 5.11. Alice volá Boba, odesílá se INVITE, původní SIP URI se zapisuje do
pole To , kde je logická adresa příjemce AOR (Address of Record) a neměl by ho po cestě nikdo
změnit. První řádek obsahující RURI (Request URI) může SIP Proxy změnit dle aktuálních
směrovacích informací, INVITE nakonec zastihne Boba na sip:bob@pc42.cs.columbia.edu . Alicin
UA zapisuje do pole Via na první řádek sám sebe (a.example.com nebo svou IP), každá další Proxy
po cestě udělá to samé, opět se vepíše na první řádek, a tak INVITE, který dostane Bob, bude mít
čtyři záznamy ve Via, viz. obr. 5.11. Jelikož odpověď je směrována dle Via, tak prochází stejnou
cestou jako žádost, každý první záznam je z Via odstraněn ihned po přijetí odpovědi SIP Proxy, a tak
je aktuální informace ve Via vždy první. Jakmile si koncové komunikující strany vymění na sebe
kontakty (pole Contact v hlavičce), tak další žádosti mohou být odesílány napřímo. Ovšem i tato
cesta se dá ovlivnit, viz. další kapitola.
97
5 Základy protokolu SIP
98
5 Základy protokolu SIP
Do pole From zapíše odesílatel svou logickou SIP URI (AOR), přičemž text před úhlovými
závorkami se zobrazuje na displeji jako textová identifikace odesílatele. Do pole Contact zapíše
odesílatel svou device SIP URI, na které je k zastižení. Je vytvořeno nové jedinečné Call-ID, pořadí
transakce Cesq a za ním název metody, nakonec je v hlavičce odkaz na tělo SDP (v naší ukázce
odebráno).
INVITE dorazil na SIP Proxy atlanta.com a jelikož je statefull, tak ihned odesílá 100 TRYING.
Odpověď 100 TRYING obsahuje stejné hodnoty To, From, Call-ID, Cseq jako v přijatém INVITE.
Parametr received je přidán do pole Via , kde SIP Proxy doplní stroj , ze kterého byla žádost přijata
pc33.atlanta.com (může být i IP).
99
5 Základy protokolu SIP
SIP Proxy atlanta.com najde SIP Proxy, která obsluhuje doménu biloxi.com, ve které je volaný
Bob. Nejdříve zjistí, zda už nemá destinaci ve své lokalizační databázi a pokud ne, tak provede
vyhledání v DNS (DNS lookup), bude se hledat SRV záznam, ten obsahuje identifikaci stroje, který
poskytuje službu SIP v dané doméně. INVITE teď SIP Proxy přepošle na zjištěnou cílovou SIP Proxy,
přičemž připíše parametr received do prvního záznamu ve Via, následně zapíše sebe jako první
záznam ve Via a sníží hodnotu v položce Max-Forwards. Další položky SIP hlavičky zůstávají
nezměněny.
INVITE byl přijat SIP Proxy biloxi.com, která ihned odesílá 100 TRYING, obdobně jako v
předchozím kroku je přidán parametr received do Via.
SIP Proxy biloxi.com vyhledává ve své lokalizační databázi záznam Boba, který byl vložen při
registraci, v lokalizační databázi je device URI z pole Contact svázána s logickou URI
sip:bob@atlanta.com. Proxy biloxi.com odesílá INVITE Bobovi, přičemž připíše received do prvního
záznamu ve Via, následně zapíše sebe jako první záznam ve Via a sníží hodnotu v položce Max-
Forwards, zbytek hlavičky nemění.
Content-Length: 142
Dále si ukážeme obsah odpovědi 180 RINGING odesílanou z Bobova UA. Bobův UA vyzvání a
odesílá 180 RINGING, do hlavičky připíše received do prvního záznamu ve Via a přidává tag do
pole To. Ačkoliv dialog není ještě sestaven, tak jsou už definovány všechny tři části, dle kterých se
identifikuje (Call-ID, from Tag a to Tag). Do pole Contact zapisuje Bob svou device URI, na které je k
zastižení, přičemž v příchozím INVITE získal kontakt na Alici.
Odpověď 180 RINGING je přeposílána přes SIP Proxy Alici, přičemž každá SIP Proxy po přijetí
smaže první řádek v pořadí ve Via, a přepošle na další stroj v pořadí ve Via, odpověď se tak
postupně dostane až k odesílateli žádosti. Bobův UA vyzvání a na displeji zobrazuje text z pole From
přijatý v INVITE, tzn. vidí na displeji nápis Alice. Po přijetí volání odesílá Bobův UA odpověď 200 OK
s obdobnou konstrukcí jako 180 RINGING, akorát se posílá i SDP, což v ukázce teď není. Jelikož
jde o odpověď finální, tak se ukončuje transakce mezi biloxi.com a Bobem identifikovanou
branch=z9hG4bK4b43c2ff8.1, pořadí ukončené transakce je dané polem CSeq: 314159 INVITE.
SIP/2.0 200 OK
Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1;received=192.0.2.3
Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8;received=192.0.2.1
To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:bob@192.0.2.4>
Content-Type: application/sdp
Content-Length: 131
Přijatá odpověď 200 OK je přeposlána na SIP Proxy atlanta.com a ukončí transakci mezi
biloxi.com a atlanta.com branch=z9hG4bK77ef4c2312983.1 se CSeq: 314159 INVITE. Nakonec je
200 OK přeposlána ze SIP Proxy atlanta.com Alici a ukončí na obou strojích transakci
branch=z9hG4bKnashds8 se CSeq: 314159 INVITE. Alicin UA přestává indikovat vyzvánění a
kontrolní vyzváněcí tón umlkne, Alice může začít mluvit.
Dokud Bobův UA neobdrží žádost ACK, tak nebude mít jistotu, že odpověď 200 OK byla
doručena a bude opakovaně odesílat 200 OK (retransmise). ACK žádost je zaslána přímo na Bobův
UA a obchází obě SIP Proxy, k tomuto dochází, protože obě strany si uložily na sebe kontakty z pole
Contact SIP hlaviček. Jelikož ACK nepatří do předchozí transakce, tak se vytvoří nový
101
5 Základy protokolu SIP
branch=z9hG4bKnashds9, ale nezvedá se Cseq, neboť na žádost ACK není žádná odpověď a
nevytváří tak novou transakci. Jedná se o stejný dialog, a tak se musí zachovat značky From tag, To
tag a Call-ID.
Hovor ukončí Bob, zavěsí a jeho UA odesílá žádost BYE, opět přímo na Alici. Jedná o novou
transakci, takže se zvedne Cseq a zachová se From tag, To tag a Call-ID (patří do dialogu). Po
přijetí finální odpovědi 200 OK na BYE se dialog ukončí.
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10
From: Bob <sip:bob@biloxi.com>;tag=a6c85cf
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314160 BYE
Content-Length: 0
V předchozí kapitole byly další žádosti v dialogu zasílány přímo mezi koncovými účastníky
spojení a signalizace tak obcházela SIP Proxy. Nástrojem, který v SIPu umožní zachovat libovolný
prvek v signalizační trase během celého dialogu, je pole Record-route SIP hlavičky pro uložení
záznamu o cestě a pole Route, dle kterého se žádost směruje .
Do hlavičky žádosti INVITE se vloží pole Record-route obsahující záznam prvku, který chceme
udržet v trase, tzn. že SIP Proxy do INVITE přidá sebe např. p1.atlanta.com a pokud INVITE
prochází další SIP Proxy, která se chce udržet v trase, tak se opět zapíše do hlavičky jako např.
p2.biloxi.com, v INVITE nám tedy přibude:
Record-route: <sip:p2.biloxi.com;lr>
Record-route: <sip:p1.atlanta.com;lr>
102
5 Základy protokolu SIP
INVITE dorazil cílovému příjemci, pokud je detekováno pole Record-route , tak UA si nastaví
cestu odesílání žádostí dle seznamu URI v Record-route seřazeném tak, jak byly zapsány v přijatém
INVITE. Poté UA zkopíruje Record-route položky do odpovědi 180 RINGING a ta putuje původnímu
odesílateli INVITE, v odpovědi nikdo nesmí Record-Route změnit. Příjemce odpovědi si nastaví cestu
odesílání žádostí dle seznamu Record-route v obráceném pořadí. Pro další krok, je nutné vysvětlit
dva přístupy ke směrování SIP žádostí:
Strict routing přepíše RURI (Request-URI, první řádek SIP žádosti) dle údaje v Route poli
hlavičky, přepisuje RURI na každém skoku a prochází jen přes servery uvedené v Route poli
hlavičky;
Loose routing je metoda která se mnohem více užívá a její aplikaci vyjadřuje parametr lr v poli
Record-Route či Route. V tomto případě se nepřepisuje RURI, ale žádost se směruje dle
URI v Route poli hlavičky, na každém skoku se dané URI z Route hlavičky odstraní, až
neexistuje žádné URI v poli Route a potom se odsměruje dle RURI.
Další žádost (např. ACK) odešle UA tak, že sestaví Request-URI standardně z pole Contact v
odpovědi na INVITE, ale vytvoří Route pole v hlavičce ACK, které bude obsahovat:
Údaje byly získány v Record-route a pořadí bylo obráceno (jelikož údaje byly získány z odpovědi).
Žádost je odsměrována dle prvního URI v route hlavičce. ACK tak dorazí na SIP Proxy
p1.atlanta.com, kde je odstraněn první záznam v pořadí z pole Route a na další je ACK odesláno, a
tak dorazí na SIP Proxy p2.biloxi.com, kde je opět odstraněn první záznam v pořadí, a jelikož je
Route pole prázdné, tak se dále směruje dle RURI.
103
5 Základy protokolu SIP
SDP je Session Description Protocol, který obecně slouží k popisu kterékoliv relace a je se SIP
signalizací velmi často používán. Používá se často se SIPem a proto se v souvislosti se SIPem
objevuje označení SIP/SDP. SDP protokol prošel třemi zásadními verzemi:
SDP se skládá z řádků obsahující text ve formě položek typ a hodnota oddělených rovnítkem,
položky, u kterých je symbol *, jsou nepovinné:
<type>=<value>
Následně si projdeme seznam položek SDP dle skupin uvedených RFC 4566. Skupina Session
description obsahuje položky v,o,s,i,u,e,c,b,z,k,a, kde:
a=* (zero or more session attribute lines), rozšiřující atributy ve formátu a=<attribute>:<value>,
např. a=recvonly.
t= (time the session is active), řádek specifikuje v relaci časové značky pro start a stop ve
formátu t=<start-time> <stop-time>, pokud jsou značky nastaveny 0 0, tak jde o permanentní
přehrávání relace,
r=* (zero or more repeat times), časy opakování relace ve tvaru r=<repeat interval> <active
duration> <offsets from start-time>,
m= (media name and transport address), SDP může obsahovat více m řádků, každý je
chápán jako nabídka jednoho toku, který se udává ve formátu m=<media> <port> <proto>
<fmt> , jako média se uvádí audio, video, text, application nebo message, port udává
transportní port a fmt je popis formátu médií,
c=* (connection information - optional if included at session-level),
b=* (bandwidth information) ,
k=* (encryption key) ,
a=* (zero or more media attribute lines).
v=0
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-addr.>
s= název relace
t= 0 0
m=m=<media> <port> <proto> <fmt>
Popis médií v m řádku se obvykle doplňuje nepovinnými atributy, tyto atributy jsou specifikovány
v dalších RFC a jde o tyto atributy:
a=mid:<identification-tags> , [RFC3388]
a=rtcp:<port> , [RFC3605]
a=crypto:<tag> <crypto-suite> <key-params> [<session-param>] , [RFC4568]
a=label:<pointer> , [RFC4574]
a=floorctrl:<role> ,[RFC4583]
a=confid:<conference-id> , [RFC4583]
a=floorid:<token> , [RFC4583]
a=content:<mediacnt-tag> , [RFC4796]
Uvedené atributy jsou použity výhradně pro média, dále existují atributy relace, které neuvádím,
neboť v SIP/SDP se s nimi nepotkáme, ale ještě máme atributy používané na obou úrovních, jak pro
popis médií, tak i relace, a ty si uvedeme:
a=recvonly , [RFC4566]
a=sendrecv , [RFC4566]
a=sendonly , [RFC4566]
a=inactive , RFC3108, RFC4566 (and used in RFC3264)
a=sdplang:<language tag> , [RFC4566]
a=lang:<language tag> , [RFC4566]
a=maxprate:<packet-rate> , [RFC3890]
a=setup:<role> , [RFC4145]
a=connection:<conn-value> , [RFC4145]
a=key-mgmt:<prtcl-id> <keymgmt-data> , [RFC4567]
a=source-filter:<filter-mode> <filter-spec> , [RFC4570]
a=fingerprint:<hash-func> <fingerprint> , [RFC4572]
Níže je uveden příklad obsahu SDP připojeného k SIP žádosti INVITE, ve kterém jsou nabídnuty
dva RTP toky. První je audio s preferencí kodeků PCM µ-law, A-law, GSM, iLBC a G.729, GSM,
očekávaný na portu 13226 a druhý tok je video H.263 na portu 15014, oba toky mají být zakončeny
na IP 158.196.196.146.12.
106
5 Základy protokolu SIP
Odpověď přišla v SDP připojeného k odpovědi 200 OK na INVITE. Druhá strana sděluje, že
naslouchá G.729 na portu 49154 a IP 158.196.192.32 a druhý m řádek s videem H.263 je vrácen s
portem 0, což znamená odmítnutí celého m řádku (toku), video tedy odesílatel SDP neumožňuje.
U SDP řádek s= (subject) nesmí být volný. Jelikož v SIPu relaci vytváříme a ukončujeme pomocí
SIP signalizačních zpráv, tak nepoužíváme start a stop značky v SDP a relaci zde necháváme jako
permanentní pomocí řádku t = 0 0. Pokud odešleme nabídku s SDP, tak dokud není zaslána
odpověď, nesmí se odeslat další SDP nabídka, tzn. probíhá vždy pouze jedno vyjednávání. Jelikož
offer/answer model je řízen protokolem vyšší vrstvy (SIP), tak musí být následující situace ošetřena
na úrovni signalizace SIP:
UA nesmí generovat novou SDP nabídku, jestliže přijal nabídku, kterou dosud nezodpověděl
nebo neodmítnul;
UA nesmí generovat novou nabídku, jestliže předtím odeslal nabídku a dosud neobdržel
odpověď nebo odmítnutí.
Přesto může dojít výjimečně k situaci, kdy jsou zaslány dvě nabídky (např. INVITE a re-INVITE v
rámci offer/answer), tato situace se označuje jako SIP glare. Jestliže UAS obdržel druhý INVITE,
když předtím odeslal v témže dialogu odpověď na první INVITE s nižším Cseq, tak musí vrátit
odpověď 500 Server Internal Error na přijatý druhý INVITE a do hlavičky odpovědi přidat pole Retry-
After s náhodně zvolenou hodnotou v rozsahu 0 až 10. Jestliže UAS dostane INVITE v dialogu, v
107
5 Základy protokolu SIP
rámci kterého má nevyřízený INVITE (před chvíli sám INVITE odeslal a dosud nedostal odpověď),
tak musí na přijatý INVITE vrátit odpověď 491 Request Pending.
Nabídka buď neobsahuje žádný nebo obsahuje jeden anebo více média toků a každý je popsán
v jednotlivém m řádku s přiřazenými atributy. Pokud neobsahuje žádný, tak si strana nabízející SDP
přeje komunikovat později a až získá odpověď na nabídku, tak bude svou nabídku modifikovat (zašle
novou). Pokud obsahuje více m řádků, tak každý musí popisovat jiný typ toku, neboť nelze žádat o
vícenásobný tok stejného typu (paralell stream), typ toku je určen portem, profilem a kodeky, takže
např. můžu si nechat poslat jeden šifrovaný tok a druhý nešifrovaný RTP či poslat jeden tok audio a
druhý video.
Na nabídku jednotlivých toků druhá strana odpovídá tak, že v odpovědi uvede na základě
nabídky své typy toků (port, kodeky), v odpovědi je uveden stejný počet m řádků obsažených v
nabídce a to i ve stejném pořadí. Nabídka toku může být odmítnuta z jakéhokoliv důvodu
(nepodporovaný tok – např. video), odmítá se konkrétní m řádek a to tak, že v odpovědi se v m
řádku nastaví port na hodnotu 0.
108
6 Další metody rozšiřující SIP
Tato metoda je umožňuje potvrzování i dočasných informativních odpovědí. Jak známo, SIP
potvrzuje finální odpověď na INVITE metodou ACK, čímž je zabezpečeno spolehlivé doručení
obvykle odpovědi 200 OK, ve které je SDP s popisem médií. Pokud by bylo SDP připojeno např. k
odpovědi 180 RINGING (častěji 183 Session Progress), tak vznikne potencionální problém na UDP,
důležitá odpověď se může cestou ztratit a druhá strana nemá popis médií. SIP postrádal
mechanizmus spolehlivého doručování dočasných odpovědí, a proto byla definována nová žádost
PRACK (Provisional Response Acknowledgement) v RFC 3262, obr. 6.1. Na žádost PRACK se
posílá odpověď (200).
S metodou PRACK se často používá i časné zasílaní médií EM (Early Media).V roce 2004 bylo
uvolněno RFC 3960 (Early Media and Ringing Tone Generation) v SIP protokolu. EM se vztahují k
médiím (např. audio, video), které jsou vyměněny předtím, než je konkrétní relace akceptována
volaným účastníkem (před přihlášením). EM mohou být jednosměrné, obousměrné a generovány jak
volajícím, tak volaným či oběma stranami. Typickými příklady EM generovanými volaným jsou
vyzváněcí tóny a ohlášení (např. čekání ve frontě Call Centra).
Základní SIP specifikace RFC 3261 podporuje pouze velmi jednoduchý mechanizmus EM. RFC
3262 používá volitelnou značku 100rel a definuje PRACK metodu. UAS musí odesílat každou non-
100 dočasnou odpověď spolehlivě, jestliže původní žádost obsahuje vyžadované pole hlavičky se
značkou 100rel. Jestliže UAS tak nemůže učinit, tak musí odmítnou žádost odpovědí 420 Bad
Extension a zahrnout do ní do pole Unsupported obsahující značku 100rel.
109
6 Další metody rozšiřující SIP
Typickým příkladem použití pro PRACK je volání do PSTN, kdy již během vyzvánění mohou
z PSTN přicházet informace, které se přehrávají volajícímu, např. „volaný účastník právě hovoří,
čekejte prosím.“
110
6 Další metody rozšiřující SIP
SIP na rozdíl od jiných signalizačních protokolů neposkytuje EM indikátor (Early Media Indicator)
a není zde tak informace o výskytu či absenci médií během sestavování spojení (například v ISDN je
to Progress Indicator). Takovýto indikátor v SIPu by mohl být využitý k jasnému deklarování, zda má
být generován lokální kontrolní vyzváněcí tón anebo druhá strana poskytuje in-band kontrolní
vyzváněcí tón nebo nějakou ohlášku.
média jsou přehrávána před 200 OK, aby se zamezilo ořezávání prvních slabik hovoru
označovaných termínem media clipping,
užívá se offer/answer model k vyjednání parametrů relace,
nabídka médií může být odeslána v INVITE žádosti a odpověď může dorazit ve 200 OK
nebo případně, nabídka může být odeslána ve 200 OK v případě INVITE bez SDP a
odpověď může být zaslána v ACK,
pokud se používá PRACK ve spojení s metodou UPDATE, také existuje mnohem více
možností, jak pro média vyměnit nabídku a odpověď,
media clipping se vyskytuje, jestliže účastník spojení věří, že relace je již sestavena, ale
proces sestavení spojení ještě není dokončen, potom prvních několik slabik nebo slov
může být ztraceno,
jestliže výměna v modelu offer/answer proběhne ve 200 OK odpovědi a ACK žádosti, pak
je media clipping nevyhnutelný. Volaný účastník začíná mluvit ve stejný okamžik, kdy je
odeslána odpověď 200 OK, ale tento UA nemůže zaslat žádná média, dokud nedostane
odpověď na nabídku ve zprávě ACK.
dokud odpověď 180 Ringing není přijata, nikdy negenerovat lokální vyzvánění,
jestliže je přijato 180 Ringing, ale nepřicházejí žádné pakety s médii, pak se generuje
lokální vyzváněcí tón,
jestliže je přijato 180 Ringing a přicházejí pakety s médii, pak se negeneruje lokální
vyzváněcí tón, ale přehrávají se přijaté média.
Zajímavostí je pole Alert-Info v hlavičce SIP zprávy. Alert-Info dovoluje specifikovat alternativní
obsah vyzvánění, např. zadáním URL nalinkuji kontrolní vyzváněcí tón umístěný v internetu.
Metoda UPDATE je obsahem RFC 3311 z roku 2002 a dovoluje klientům aktualizovat parametry
relace ale bez vlivu na stav dialogu. V tomto smyslu je metoda UPDATE podobná re-INVITE, ale na
rozdíl od re-INVITE může být UPDATE poslán předtím, než je INVITE dokončen (víme, že na INVITE
přichází finální odpověď, která je potvrzena ACK, tím je INVITE dokončen). UPDATE je tak velmi
užitečný pro aktualizaci parametrů relace v rámci časně sestaveného dialogu (early dialog), tím
pádem může volající či volaný modifikovat parametry relace, ještě než je volání vyzvednuto volaným.
111
6 Další metody rozšiřující SIP
Re-INVITE nemůže být pro tento účel použit, protože re-INVITE má vliv na stav dialogu. Jestliže
odpověď obsahuje v poli Allow hodnotu UPDATE , tak se UA dozví, že druhá strana UPDATE
podporuje a může metodu použít. UPDATE může být použit jak pro early dialog, tak pro sestavené
dialogy (potvrzené), ale po sestavení dialogu je doporučeno použít re-INVITE.
V příkladu, viz. obr. 6.2, je vidět INVITE s nabídkou SDP, která je zodpovězena ve 180. Protože
je použito spolehlivé doručování PRACK s odpovědí 200 a následně jde nová druhá nabídka SDP ve
zprávě UPDATE, dialog ještě není plně sestaven (pouze early dialog), tak nabídka je zodpovězena
odpovědí 200. Dále je odeslána další již třetí nabídka SDP opět zodpovězená odpovědí 200 a jelikož
byla v dalším kroku odeslána odpověď 200 na původní INVITE, tak je potvrzeno doručení přes ACK
a dialog je sestaven. Pro další aktualizaci popisu médií by měl být použit re-INVITE. V případě, že
UPDATE není na straně UA podporován, tak se musí použít re-INVITE, ale je nutné vždy čekat na
sestavení dialogu. Využití UPDATE je v situacích, kdy je nutné změnit vlastnosti médií během
sestavování spojení, např. volám-li přes GW do PSTN na fax, tak GW použije EM a zodpoví nabídku
SDP pomocí odpovědi 180 nebo 183, ale následně se detekuje faxová komunikace (tón CNG na 1,1
kHz vysílaný odesílatelem) a ještě během sestavování se může změnit kodek např. na G.711, čili se
použije UPDATE.
112
6 Další metody rozšiřující SIP
Metoda REFER je obsahem specifikace RFC 3515 z roku 2003 a umožňuje tzv. 3rd party control ,
což je řízení komunikace třetí stranou. Toto rozšíření SIPu umožňuje odeslat žádost REFER příjemci,
aby sestavil spojení s dalším UA a odesílatel žádosti REFER je informován o zpracování jeho
požadavku. Toto rozšíření je využíváno např. pro realizaci služby Call Transfer (předání hovoru) či
Click to dial (CTD, vytočení kliknutím na webu).
Pro metodu REFER byla definována nová položka do SIP hlavičky, a to pole Refer-To indikující,
na které URI má být sestaveno spojení, viz. níže, přičemž konstrukce SIP žádosti REFER je
standardní a do Request-URI se zadává příjemce žádosti REFER.
Refer-To: sip:alice@atlanta.example.com
Jestliže nebyla na REFER generována žádná finální odpověď 4xx-6xx, pak UA musí vrátit
odpověď 202 Accepted předtím, než vyprší REFER transakce. Pro informování odesílatele REFER o
stavu vyřizování žádosti musí být použit mechanizmus NOTIFY.
Příklad v obr. 6.3 ukazuje, že žádost zaslaná agentem A na agenta B je potvrzena pomocí 202
Accepted a agent A je informován v žádosti NOTIFY o stavu vyřizování požadavku. Mezitím agent B
sestavuje spojení dle Refer-To. Postup s obsahem prvních třech zpráv je uveden níže.
113
6 Další metody rozšiřující SIP
Dále se začne sestavovat spojení agentem B tam, kam vedla URI adresa v poli Refer-To žádosti
REFER zaslané agentem A.
Metoda MESSAGE (Extension for Instant Messaging) je rozšířením SIP signalizace, které je
obsaženo v RFC 3428 z roku 2002. IM (Instant Messaging) se vztahuje k přenosu zpráv mezi
uživateli a navozuje se prostředí interaktivní komunikace (chat). Tyto zprávy IM komunikace jsou
obvykle krátké, ale není to podmínkou.
UAS přijímá žádost MESSAGE a okamžitě odpovídá konečnou odpovědí. To, že UAS odpověděl
např. 200 OK (úspěšně přijato), však neznamená, že UAS přijatou zprávu zobrazil a už vůbec ne, že
114
6 Další metody rozšiřující SIP
si ji někdo přečetl, je to pouze informace o doručení. Odpověd 2xx na žádost MESSAGE nesmí
obsahovat tělo (SDP) a UAS nesmí vložit do odpovědi 2xx kontaktní pole SIP hlavičky Contact.
Odpovědi 4xx nebo 5xx oznamují, že zpráva nebyla úspěšně doručena a odpověď typu 6xx znamená,
že zpráva sice byla úspěšně doručena, ale byla příjemcem odmítnuta.
Velikost žádosti MESSAGE nesmí překročit 1300 bajtů, větší obsah se dá přenést jako část
média relace, tzn. např. textová relace s využitím SDP. MESSAGE nesestavuje dialog, jsou zde
pouze transakce, není zde vytvoření a ani ukončení dialogu. Pokud nám druhá strana bude chtít na
námi zaslaný obsah zprávy reagovat, tak rovněž pošle zprávu MESSAGE. Na obr. 6.4 je příklad
odeslání žádosti MESSAGE přes Proxy.
V roce 2002 bylo uvolněno RFC 3265 (Session Initiation Protocol Specific Event Notification),
které přináší možnost požadovat zasílání oznámení při výskytu sledované události, schopnost tohoto
oznamování je označována jako Event/Notification. Příkladem použití může být:
115
6 Další metody rozšiřující SIP
služba zpětné volání, volaný je obsazen a po změně stavu (uvolnění) obdrží volající notifikaci,
že je volaný volný a spojení se automaticky sestaví,
buddy list, seznam kamarádů založený na přítomnosti-přihlášení (Presence),
MWI (Message Waiting Indications), indikace nově zanechaného vzkazu ve schránce (RFC
3842).
Žádost SUBSCRIBE vytváří dialog a UA, který se přihlásil k odběru oznámení na sledovaný stav,
může očekávat přijetí NOTIFY. Dokud nebyla doručena první žádost NOTIFY, tak UA by měl
předpokládat neutrální stav a rovněž musí být připraven na situaci, že již před dokončením transakce
SUBSCRIBE – 200 OK může obdržet NOTIFY. UA zasílající SUBSCRIBE je rovněž odpovědný za
obnovování přihlášení k odběru sledovaného stavu, tzn. před vypršením expirační doby znovu zašle
SUBSCRIBE.
V roce 2004 bylo definováno další rozšíření týkající se Event/Notification RFC 3903 (Session
Initiation Protocol - Extension for Event State Publication), obsahem je definování nového
mechanizmu s využitím metody PUBLISH. V RFC je definován vztah mezi EPA (Event Publication
Agent), což je UA publikující stav a ESC (Event State Compositor), který je zodpovědný za
116
6 Další metody rozšiřující SIP
zpracování stavů odesílaných z EPA. ESC je označován jako PA (Presence Agent). EPA zasílá stav
prezence (publikuje) pomocí PUBLISH. Na obr. 6.6 je znázorněn tok SIP zpráv v mechanizmu
Event/Notification s využitím metody PUBLISH. UA, který si nechává zasílat notifikaci na sledované
stavy se označuje jako watcher a používá již vysvětlené metody SUBSCRIBE a NOTIFY.
CSeq: 1 PUBLISH
Max-Forwards: 70
Expires: 3600
Event: presence
Content-Type: application/pidf+xml
Content-Length: ...
Jelikož PA zjistil, že od EPA obdržel informace, které znamenají změnu presence, tak posílá
pomocí NOTIFY oznámení se stavem nové presence na iniciátora sledování (watcher), což je zpráva
M7, jejíž obsah je následně uveden.
Oblast Presence a IM je velmi zajímavá, ale SIP má zde velmi zdatné konkurenty v podobě
protokolu XMPP (Extensible Messaging and Presence Protocol), který využívá např. Google Talk a
Jabber. Rozšíření SIPu do oblasti IM a Presence nebude tak úspěšné a potenciál uplatnění připadá v
úvahu pouze jako doplňkové služby pro telefonii. Nejpoužívanějším řešením pro IM je dnes Jabber.
vytočení kliknutím (click to dial), služba je typickým příkladem řízení spojení třetí stranou,
takže to je úloha pro 3rd party control a tím pádem žádost REFER,
zpětné volání (Call Back) se řeší pomocí EVENT/Notification.
V případě síťování SIP světa s PSTN se musí zabezpečit přenos kontrolních tónů či hlásek již
během vyzvánění, každý se už jistě setkal s ohlášením „volané číslo je nedostupné, zavolejte
později“ anebo „dovolali jste se do zákaznického centra společnosti ....“
Tyto ohlášení pochopitelně nejsou generovány mobilním telefonem, ale jsou transparentně
přenášeny PSTN sítí a již během vyzvánění je otevřen příslušný B-kanál v ISDN trasách, ve kterém
se in-band přenášejí kontrolní tóny a ohlášení. SIP původně počítal s odlišným přístupem a mezi SIP
účastníky stačí na přijetí 180 RINGING lokálně generovat nastavený kontrolní vyzváněcí tón (např.
opakovat 425 Hz po dobu 1sek./4 sek. pauza). Řešením jsou Early Media a proto se nabídka SDP
potvrdí už ve 183 Session Progress a minimálně směrem z PSTN je přenášen RTP tok, vždyť
nakonec vlastnosti komunikace GW již předem zná, neboť ty jsou dány možnostmi GW (porty,
kodeky) a nikoliv účastníka v PSTN. Komunikace na obr. 6.7 by se dala pochopitelně vylepšit o
PRACK, který byl už rozebrán v předchozích kapitolách.
119
6 Další metody rozšiřující SIP
Předpokládejme, že budeme mít uživatele, který se zaregistruje z několika zařízení pod stejným
user URI (z telefonu z práce, domu či mobilu) a příchozí žádost INVITE rozešle SIP Proxy na
všechny aktivní registrovaná zařízení, viz. obr. 6.8
Tato funkce se označuje jako forking, není ji možné realizovat na stateless SIP Proxy, jelikož je
založena na několika současně probíhajících transakcích a samozřejmě takováto Proxy není
schopna tyto transakce sledovat.
Na obr. 6.8 máme situaci, Bob je registrován pod user URI Bob@proxy na dvou device URI, a to
Bob@home a Bob@work. Alice volá Boba a SIP Proxy odesílá INVITE na obě místa, z obou míst je
odeslána odpověd 180 RINGING, což znamená, že došlo k paralelnímu vyzvánění. Bob přijal hovor
na bob@home, SIP Proxy musí teď vytvořit novou transakci a zrušit sestavované a stále vyzvánějící
120
6 Další metody rozšiřující SIP
volání na bob@work, je tedy odeslána žádost CANCEL. Na CANCEL je odeslána odpověď 200 OK
a původní transakce s INVITE je zodpovězena pomocí 487 Cancelled, což je potvrzeno metodou
ACK. Mezitím SIP Proxy odeslala 200 OK z bob@home, kde je v poli contact uveden bob@home,
díky tomu je další žádost ACK již přímo odeslána na kontaktní adresu a dialog je sestaven.
Máme sestaveno spojení, potřebujeme provést přidržení hovoru a po chvíli se vrátit zpět. Existují
v zásadě dvě možnosti obě pomocí re-INVITE přes modifikaci v SDP, a to buď ukončit RTP tok a
potom jej znovu navázat, tzn. m řádek v SDP anebo pomocí atributu sendonly, což je elegantnější,
jelikož pouze změníme stav toku.
Předpokládejme, že máme sestaveno spojení mezi Alicí a Bobem a Bob aktivuje službu Call
Hold, Bobův UA odešle re-INVITE a v SDP nastaví atribut sendonly.
v=0
o=bob 2890844527 2890844528 IN IP4 u2.biloxi.ex.com
s=-
c=IN IP IP4 u2.biloxi.ex.com
t=0 0
m=audio 3456 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=sendonly
Alice na INVITE odešle odpověď 200 OK, k ní připojí SDP a vloží atribut recvonly.
SIP/2.0 200 OK
From: Bob <sip:bob@biloxi.ex.com>;tag=b-tag
To: Alice <sip:alice@atlanta.ex.com>;tag=a-tag
Call-ID: ab-cid
CSeq: 1 INVITE
Contact: <sip:alice@u1.atlanta.com>
v=0
o=alice 2890844526 2890844527 IN IP4 u1.atlanta.com
s=-
c=IN IP IP4 u1.atlanta.ex.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=recvonly
121
6 Další metody rozšiřující SIP
Relace je teď jednosměrná a Bobův UA neodesílá žádná média, pro obnovení se opět použije
re-INVITE, tentokrát bez atributu, tím pádem se použije výchozí a=sendrecv a komunikace se obnoví.
Hovor je sestaven mezi Alicí a Bobem, Bob aktivuje přidržení spojení s hudbou, Bobův UA posílá
INVITE bez SDP na Music server. Odpověď 200 OK na Bobem zaslaný INVITE obsahuje SDP s
atributem a=sendonly. Bob posílá re-INVITE Alici, kde v SDP použije a=sendonly a do řádku c
uvede Music server jako adresu pro ukončení RTP toku, Alice potvrdí 200 OK a připojí své SDP s
a=recvonly, Bob potvrdí přijetí 200 OK pomocí metody ACK a Alicino SDP připojí k žádosti ACK a
zašle na Music server. Music server zasílá RTP tok na Alici, viz. obr. 6.9. Při vrácení z přidržení s
hudbou k hovoru musí Bob nejdříve pomocí BYE ukončit spojení s Music serverem a potom pomocí
re-INVITE obnovit spojení s Alicí.
Předání hovoru se může realizovat pomocí re-INVITE anebo pomocí REFER, ukážeme si oba
způsoby, první způsob bude s využitím INVITE a jde o starší přístup.
122
6 Další metody rozšiřující SIP
Na obr. 6.10 je první způsob, ve kterém Bob má sestavenou relaci s Veronikou a předává ji Alici.
Jelikož nezná popis médií Alice, tak pošle nejprve INVITE bez SDP a získá nabídku médií Alice v
SDP jako součást odpovědi 200 OK. Tuto nabídku SDP následně připojí k žádosti re-INVITE a pošle
Veronice. Veronika odpoví 200 OK a připojí svou nabídku SDP, kterou Bob použije do žádosti ACK
zasílané Alici jako potvrzení na přijetí 200 OK. Bob ještě zašle ACK Veronice a dialog je sestaven,
přičemž Bob sloužil jako prostředník, přes kterého si vyměnily obě strany své SDP. Pochopitelně, že
Bob do hlaviček v poli Contact uvedl obě nově komunikující strany, takže v tomto dialogu už nemá
žádnou úlohu.
Ve druhém případě na obr. 6.11 je použita metoda REFER, spojení je sestaveno mezi Alicí a
Bobem. Alice pomocí REFER požádá Boba o sestavení spojení s Veronikou, když dostane potvrzení,
tak pomocí BYE ukončí stávající spojení. Bob sestaví nové spojení s Veronikou a potvrdí přes
NOTIFY Alici, že předání zdárně proběhlo. SDP s popisem médií se přenášejí standardně v INVITE
a 200 OK.
123
6 Další metody rozšiřující SIP
Služba přesměrování volání je možná na Stateful SIP Proxy, na které jsou definovány pravidla ke
stavům, které se v transakci při sestavování spojení mohou vyskytnout. Přesměrování můžeme
rozdělit na následující typy:
přesměrování při obsazení CFWB (Call Forwarding Busy), SIP Proxy při obdržení
návratového kódu 486 vytvoří nový INVITE na definovaný cíl přesměrování,
přesměrování při neohlášení (obvykle po čase 15-20 sek.) - CFWNR (Call Forwarding No
Reply), SIP Proxy sleduje dobu vyzvánění signalizované návratovým kódem 180 RINGING a
po překročení hraniční hodnoty vytvoří nový INVITE na definovaný cíl,
přesměrování nepodmíněné CFWU (Call Forwarding Unconditional), SIP Proxy zasílá INVITE
přímo na zvolený cíl,
přesměrování při nedostupnosti CFWNA (Call Forwarding Not Available).
124
6 Další metody rozšiřující SIP
Přesměrování se obvykle označují zkratkou CFW (Call Forwarding), což je uvedeno i v seznamu
výše, ale můžeme se setkat i s označením CD (Call Diversion). Z PSTN sítí je zažitější používání
CFW, a tak nové označení CD se stejným významem může být pro někoho zavádějící. Na obr. 6.12
je situace při CFWB (přesm. při obsazení), jak již bylo zmíněno, tak na návratový kód 486 vytvoří SIP
Proxy nové spojení odesláním INVITE.
Signalizace uložené zprávy je označována jako MWI (Message Waiting Indication) a zpráva
NOTIFY by měla na telefonu Alice aktivovat rozsvícení LED diody tlačítka, po jeho stisknutí by se
125
6 Další metody rozšiřující SIP
měl Alici zobrazit na displeji text upozorňující na nový vzkaz a ihned nabídnuto jeho vyzvednutí.
Způsob ovládání telefonu už pochopitelně záleží na jeho výrobci, každopádně by měla být
implementace jednoduchá, nejlépe rolovací menu nabízející položky dle pravděpodobnosti či četnosti
použití a jednoduchý pohyb v něm pomocí tlačítek Vpřed/Vzad anebo dotekovým jezdcem (Touch
Slider, kruhový pohyb/např. iPod anebo vertikální nahoru/dolů).
Hlasová pošta může být propojena s e-mailovou schránkou uživatele (odešle uložený vzkaz
pomocí SMTP na daný e-mail) , který tak může dostávat vzkazy např. v mp3 formátu na svůj e-mail,
případně naopak z emailu odesílat krátké vzkazy na telefon. Komunikace umožňující propojení
různých systémů zpracování zpráv se označuje jako Unified Messaging.
Další služba je založena na zprávě REFER, jelikož se jedná o sestavení řízení spojení stranou
rd
( 3 party control). Webová aplikace bude obsahovat např. korporátní adresář, soukromé kontakty
Alice anebo jen pole pro vložení jmenného identifikátoru (URI) či telefonního čísla, spojení je
inicializováno z webu. Kliknutím na položku (CTD – Click to Dial) jsou pomocí některé z metod (GET,
POST) přes HTTP odeslána data k provedení volby na webový server, Alice volá Boba. Web server
odesláním INVITE inicializuje spojení s telefonem Alice, Alice přijme volání, čímž odešle 200 OK a
webový server na tento návratový kód odešle žádost REFER, kde do Refer-To vloží URI Boba.
Žádost REFER je doručena Alici, jejíž telefon odpoví návratovým kódem 202 a zobrazí Alici na
126
6 Další metody rozšiřující SIP
displeji informaci o zahájení spojení s Bobem, webová aplikace ukončí sestavené spojení s Alicí
žádostí BYE a telefon Alice odesílá INVITE na Boba, obr. 6.14.
127
6 Další metody rozšiřující SIP
Při implementaci této funkce je vhodné nastavit zpoždění cca 2-3 sek. mezi zobrazením
informace na displeji Alice o sestavování spojení s Bobem a skutečným odesláním INVITE, Alice tak
má možnost zavěsit. Pomocí REFER je realizována většina služeb CTI (podpora telefonování z PC),
druhá možnost je použití INVITE a re-INVITE, ale tento přístup je zastaralý.
Řada SIP telefonů podporuje XML, přes HTTP může přímo komunikovat s webovým serverem a
integrovat do telefonie řadu zajímavých aplikací, které mohou být postaveny nad XML. Dokumenty
XML mohou být zasílány i přes SIP žádosti NOTIFY a PUBLISH, avšak využití HTTP se zde jeví jako
vhodnější. Dalším příkladem využití spolupráce SIP telefonu a webového serveru může být CRM
(Customer Relationship Management), při příchozím volání se na základě identifikace volajícího
vyhledají v databázi informace o volajícím a volanému se zobrazí webová stránka s informacemi o
volajícím. Výsledkem je, že volaný má už během vyzvánění o volajícím informace, které může použít,
položit mu otázky k autentizaci, atd ... Informace o volajícím jsou využívány i ke směrování, ale to se
týká jiné oblasti (call processing) a patří do problematiky Call center. Na základě identifikace lze
například volajícího přepojit přímo na jeho osobního asistenta, na maďarsky hovořící operátorku
anebo zařadit do fronty, kde bude čekat na obsloužení.
Zpětné volání je typickou službou pro použití EVENT/Notification. Jak jsme si již vysvětlili v
předchozích kapitolách, tak pomocí žádostí SUBSCRIBE a NOTIFY docílíme, že zájemci je zasláno
oznámení při výskytu hlídané události (změna stavu). Na obr. 6.15 je zaslán INVITE, ale Bob je
obsazen, odpověď je potvrzena přes ACK, ale telefon Alice podporuje zpětné volání a tuto funkci
nabídne. Alice potvrdí, čímž se odešle SUBSCRIBE a jako sledovaná událost se uvádí event: call
completion (dokončení volání), položka by měla být součástí nového návrhu RFC - Call Completion
for Session Initiation Protocol (SIP), který se připravuje. Bob zavěsí a jeho UA ihned odešle NOTIFY,
telefon Alice začne vyzvánět a po vyzvednutí odešle INVITE na Boba a dává Alici kontrolní
vyzváněcí tón.
Volání může být dokončeno ve stavu volno (CCNR – Call Completion on No Reply) i obsazeno
CCBS (Call Completion on Busy). Níže je obsah žádosti SUBSCRIBE.
128
6 Další metody rozšiřující SIP
Metoda INFO typicky obsahuje tělo zprávy, kde můžou být signalizační informace či události
během relace. Metoda byla původně navržena s cílem přenášet z PSTN signalizační informace
během sestaveného spojení jako ISUP (ISDN User Part) zprávy. Metoda INFO vždy inkrementuje
CSeq.
Content-Length: ...
Původní specifikace INFO v RFC 2976 nemá žádné mechanizmy vyjednávání, jaký obsah v těle
zprávy je akceptovatelný. V roce 2011 původní RFC 2976 bylo nahrazeno novějším RFC 6086, které
je jednak zpětně kompatibilní se starším, ale hlavně obsahuje rozšíření chybějící vlastnosti pomocí
pole Recv-Info v hlavičce deklarující, jaký obsah v INFO konkrétní UA podporuje.
130
7 Využití DNS pro IP telefonii
DNS obsahuje specifické informace o dostupných službách ve formátu dle RFC 2782 z roku
2000. SRV záznamy umožňují pro jednu doménu použít několik serverů pro konkrétní službu. SRV
obsahuje informace o specifické službě pro doménu a umožňuje nastavit i prioritu. SRV záznam
poskytuje následující informace:
Výše uvedený příklad záznamu dostaneme, pokud se dotážeme na stroj, který poskytuje službu
SIP na UDP v doméně cesnet.cz, v Linuxu zadáme příkaz:
131
7 Využití DNS pro IP telefonii
NAPTR (Naming Authority Pointer Record) je poměrně novým typem záznamu. Původní RFC
2915 (The Naming Authority Pointer DNS Resource Record) je z roku 2000 a novější RFC je 3404
(The Uniform Resource Identifiers Resolution Application) z roku 2002. NAPTR je typ DNS záznamu,
který podporuje regulární výrazy, mohou být tak použity sofistikované přepisovací pravidla.
Odpovídající záznam v DNS pro ENUMU je předepsán ve tvaru:
Tvar obsahuje pořadí (order), upřednostnění (pref), označení „u“ (flag) znamená, že výstupem
bude URI požadované služby a nakonec aplikující se regulární výraz (regexp) a nahrazení
(replacement). Výsledkem aplikace regulárního výrazu je URI adresa pro konkrétní službu.
NAPTR mohou být použity i pro směrování servisních záznamů SRV, viz. RFC 3263 (Locating
SIP Servers). NAPTR záznamy nasměrují SIP požadavek pro doménu iptel.biloxi.com na záznamy
SRV, kde protokol TCP má vyšší prioritu (menší číslo znamená vyšší prioritu).
SRV nám vyřeší lokalizaci služby v doméně, ale problém máme s telefonními čísly, protože SIP
URI je vázáno na doménu a pokud bychom nahradili položku username telefonním číslem, tak stále
řešíme, jak se dovolat mimo svou doménu anebo přesněji, jak zjistit, která SIP Proxy obslouží volání
na žádané číslo. S tímto úkolem si výtečně poradil mechanizmus ENUM (tElephone NUmber
132
7 Využití DNS pro IP telefonii
Mapping) . Standard ENUM přináší mapování telefonních čísel E.164 na jmenné identifikátory URI. V
jmenném serveru může záznam vypadá následovně:
$ORIGIN 5.3.4.2.2.0.2.4.e164.arpa.
IN NAPTR 100 50 "u" "E2U+h323" "!^\\+420(.*)$!h323:\\1@cesnet.cz!" .
IN NAPTR 200 50 "u" "E2U+sip" "!^\\+420(.*)$!sip:\\1@cesnet.cz!" .
IN NAPTR 300 50 "u" "E2U+smtp" "!^(.*)$!mailto:info@cesnet.cz!“ .
Regulární výraz. který je odstartován symbolem ^ a ukončen $, výraz v prvním poli mezi
dvěma vykřičníky \\+420(.*) představuje všechna čísla nacházející se za +420
nahrazení (replacement) je v druhém poli vyjádřen dosazením získaného výrazu z prvního
pole \\1 do URL, v případě třetího záznamu se vždy vrátí mailto:info@cesnet.cz
Posledním krokem v DNS by bylo dohledání A nebo AAAA záznamu odpovídající danému
doménovému jménu. Vidíme, že pro SIP běžně využijeme v DNS následující záznamy : NAPTR,
SRV, A a AAA.
ENUM je most mezi číselnými identifikátory telefonních sítí definovaných v ITU-T E.164 a
jmennými identifikátory URI uloženými v záznamech DNS a užívanými v Internetu. V roce 2000 byl
ENUM poprvé popsán v RFC 2916, jeho autorem byl švédský inženýr Patrik Fältström, novější verze
je v RFC 3761 z dubna roku 2004. Pro ENUM se užívá TLD doména e164.arpa a ta je delegována
se souhlasem zástupce státu v ITU-T na organizaci, která se stává správcem národní domény. V
případě ČR je to doména 0.2.4.e164.arpa a správcem této domény je od roku 2003 sdružení CZ.NIC.
První část služby ENUM tvoří čísla ITU-T doporučení E.164, za tímto účelem byla v ITU-T založena
133
7 Využití DNS pro IP telefonii
studijní skupina (SG2), která pracuje na administrativních postupech týkajících se služby ENUM.
Druhou část vytváří organizace IETF, kde tato služba vznikla a spočívá v začlenění tohoto standardu
do struktury systému doménových jmen DNS. V souvislosti s IP telefonní je hlavním cílem ENUM
zprostředkovat identifikaci a adresovat klienta služby přes internet na základě univerzálního
identifikátoru, kterým je telefonní číslo.
Pro tento účel se v DNS používají záznamy NAPTR (Naming Authority Pointer) a dotaz do DNS
musí přijít ve vhodném formátu
$ORIGIN 9.9.6.1.9.9.6.9.5.0.2.4.e164.arpa.
IN NAPTR 100 50 "u" "E2U+sip" "!^\\+(.*)$!sip:\\1@cesnet.cz!" .
IN NAPTR 200 50 "u" "E2U+h323" "!^\\+(.*)$!h323:\\1@cesnet.cz!" .
Pokud bychom výše uvedený záznam nezapsali do zóny e164.arpa našeho DNS serveru, ale
vytvořili si svou privátní zónu , do které bychom se dotazovali, tak by se jednalo o privátní strom,
příkladem může být například e164.org, e164.info anebo akademickou komunitou používaný
134
7 Využití DNS pro IP telefonii
nrenum.net. Tyto stromy většinou zakládají skupiny s určitým cílem a stanovují individuální pravidla.
Veřejný strom e164.arpa má jasně daná pravidla, viz. obr. 7.1, používají se veřejná čísla dle ITU-T
E.164, je zde role ITU-T udělující souhlas s delegací na úrovni domény identifikující konkrétní stát,
např. delegace 0.2.4.e164.arpa na sdružení CZ.NIC na základě požadavku zastoupení ČR v ITU-T.
ENUM je v ČR v ostrém provozu od ledna 2007, registraci telefonních čísel zajišťuje zhruba
dvacet registrátorů, jejich seznam je uveden na stránkách http://enum.nic.cz. Koncem roku 2008
bude spuštěn DNSSEC pro domény 0.2.4.e164.arpa a cz, což je rozšíření umožňující ověřit pravost
informací získaných z DNS, ty budou podepsány, zabezpečené DNS bude tak sloužit pro uvedené
stromy jako úložiště certifikátů [v131].
Základní myšlenka, na které ENUM vznikl, byla dovolit uživatelům čísel vkládat za vymezených
podmínek stávající telefonní čísla do DNS a umožnit vyhledávání těchto čísel. Tento ENUM se
nazývá uživatelský ENUM, ale tento přístup nemusí vyhovovat všem, například operátorům určitě
nesedí, že o vložení čísla do DNS rozhoduje jeho uživatel. ISP většinou preferují federace
135
7 Využití DNS pro IP telefonii
postavených na bilaterálních či uliterálních dohodách, a tak vzniká ENUM s přívlastky User, Private,
Operator, Enterprise, Federation, Carrier, Infrastructure a snad někoho napadne ještě další.
Příklady ENUM stromů se zařazením typu jsou v tabulce níže. Aktuálně se diskutuje veřejný
operátorský strom, který operátorům chybí a jako nejreálnější se jeví paralelní veřejný strom ke
stávajícímu uživatelskému, tlak ovšem není dostatečně silný a tak se dosud tento návrh nepodařilo v
IETF prosadit.
Aplikací regulárního výrazu je získána adresa SIP URI, která identifikuje uživatele v doméně
cesnet.cz. V dalším kroku je pomocí SRV v cílové doméně zjištěno, že službu SIP poskytuje
cyrus.cesnet.cz. Domácí SIP Proxy tak získává SIP URI volaného a adresu stroje, na který může
odeslat INVITE, čili žádost o inicializaci spojení.
Nejdříve nastavíme SIP server, aby se dotazoval do name serveru, který budeme konfigurovat.
Změnu provedeme v souboru /etc/resolv.conf , kde nastavíme jako nameserver 195.113.113.147
[v68],[vil].
;soubor /etc/resolv.conf
nameserver 195.113.113.147
Nyní upravíme konfiguraci DNS serveru. K implementaci DNS použijeme BIND, který je součástí
většiny linuxových distribucí. V souboru named.conf vytvoříme novou zónu e164.arpa odkazující se
na db.arpa. Zónu přidáme do souboru /etc/bind/named.conf.
;soubor /etc/bind/db.arpa
$TTL 86400
@ IN SOA 195.113.113.147. root.195.113.113.147. (
2006112801 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS 195.113.113.147.
NAPTR záznam říká, že pro dotazu na číslo +420950030009 dostaneme SIP URI
sip:950030009@195.113.113.145. Po dokončení konfigurace musíme BIND restartovat.
/etc/init.d/bind restart
137
7 Využití DNS pro IP telefonii
Než nakonfigurujeme SIP server pro volání přes ENUM je vhodné si funkčnost NAPTR záznamu
otestovat a nesmíme zapomenout, jaký nameserver máme nastavený pro DNS.
Řada publikací popisující ENUM tvrdí, že se jedná o technologii pro telefonování zadarmo, ale s
tím není možné souhlasit. Model zpoplatňování hovorů závisí na poskytovateli hlasové služby, nikoliv
na tom, zda číslo uživatele je v DNS. Konkrétní tel.č. může být v DNS propagováno, ale není nikde
zaručeno, že příchozí SIP Proxy volání přijme. Každopádně lze očekávat, že používání ENUMu by
mělo příznivý dopad na cenu hovorů, což nevylučuje, že hovor může být i zdarma. Pravděpodobně
lze očekávat model, že náklady poskytovatele služby budou ukryty v paušálním poplatku a jednotlivé
hovory nebudou zpoplatňovány. Pro tento princip se užívá názvu flat rate a tento koncept se bude v
tarifech poskytovatelů používat nejčastěji.
138
8 SIPp a jeho použití k emulaci SIP relací
SIPp může být využit k testování reálných SIP zařízení jako SIP Proxy (např. Kamailio), B2BUA
(např. Asterisk), SIP media servery, SIP brány and SIP PBX. Nástroj může být využit k emulování
tisíců UA generujících relace do cílového zařízení. Kromě těchto výkonnostních testů lze využít SIPp
využít i k testování interoperability, čili k ověření chování neznámého zařízení.
139
8 SIPp a jeho použití k emulaci SIP relací
8.1 Instalace
SIPp lze přímo instalovat z repozitářů většiny linuxových aplikací, např. pro Debian či Ubuntu lze
najít SIPp pod balíčkem s označením sip tester. Nakonec SIPp je dostupný i pro MS Windows na
URL http://sourceforge.net/projects/sipp/files/sipp/3.2/sipp-win32-3.2-setup.exe/download.
Instalace je tedy záležitostí několik desítek vteřin, doporučuji předtím provést update pro získání
aktuálních seznamů balíčků a můžeme instalovat apt-get install sip-tester. Po nainstalování se SIPp
může okamžitě používat, ale ověříme si ještě verzi pomocí sipp-v.
# apt-get update
# apt-get install sip-tester
# sipp -v
SIPp v3.2-PCAP, version unknown, built Nov 3 2011, 11:30:21.
Zjistili jsme, že máme verzi 3.2, která podporuje PCAP a tím pádem můžeme relace emulovat
s reálnými médii (PCAP je podporovaný ve Wireshark, tzn. můžeme si takováto média extrahovat
s reálného provozu a uložit RTP jako pcap soubor). Pokud bychom přece jen chtěli vyšší verzi (v
roce 2013 byla dostupná v3.4), tak zkompilujeme. Pro v3.4 musíme před vlastní kompilací
doinstalovat tyto balíčky:
C++ Compiler
curses nebo ncurses library
pro TLS OpenSSL >= 0.9.8
pro pcap play: libpcap and libnet
Stáhneme si aktuální balíček, rozbalíme a zkompilujeme s parametry pro podporu TLS --with-
openssl a PCAP --with-pcap.
140
8 SIPp a jeho použití k emulaci SIP relací
SIPp umožňuje generovat jeden či více SIP relací na vzdálený systém. Nástroj je spuštěn
z příkazové řádky. SIPp je možné ihned využívat s výchozím scénářem UAC a UAS např. pro zjištění,
zda přes danu síť je možné realizovat SIP relace, nejdříve spustíme UAS [rez1]:
a poté UAC s výchozím XML schématem, což můžeme provést i na lokální rozhraní 127.0.0.1,
port UAS je 5060 a UAC používá 5061 na stejné IP.
Tento výchozí scénář obsahuje následující schéma, viz, obr 8.1, vzhledem k použití stejné
adresy 127.0.0.1 nám Wireshark nezobrazil správně orientaci odesílaných žádostí a přijatých
odpovědí, ale pro prvotní odzkoušení funkčnosti SIPp nám můžou nakonec i postačit statistiky, kdy
uvidíme, že nějaké žádosti byly odeslány a na ně přijaty odpovědi. V dalších příkladech s reálným
nasazením mezi různými IP již bude výpis z Wireshark v pořádku, viz. obr. 8.2.
Spuštění SIPp se provádí zavoláním aplikace sipp a přepínači s parametry. Mezi nejpoužívanější
patří:
141
8 SIPp a jeho použití k emulaci SIP relací
Pomocí -sn uac vyvoláme výchozí scénář pro UAC, ve kterém bude generováno deset relací za
periodu -r 10 a perioda potrvá 1000 ms -rp 1000. Username volaného uživatele se nastaví pomocí -s
[login] a cílový server relace, kam budou zprávy zasílány je v [server]. Další příklad je s vlastním
vytvořeným scénářem v XML souboru.
Zavolání XML souboru uac_sipuri.xml, který si předem vytvoříme v adresáři, kde spouštíme sipp,
následně provedeme pomocí -sf uac_sipuri.xml . Kde -r 500 -rp 1000 určuje násobnost 500 relací za
periodu 1000 ms a voláme uživatele 6543 –s 6543 na cílovém serveru iptel.org.
Vytváření XML schémat á svá pravidla. Každé XML schéma začíná a končí značkou scenario.
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>
Žádost INVITE je zaslána vzdálené straně a klient čeká na odpověď pomocí zpráv recv, přičemž
přijetí zpráv 100 a 180 je volitelné, zatímco 200 je povinná a čeká se do expirace časovače (výchozí
hodnota je 3000 ms):
<recv response="100"
optional="true">
</recv>
<![CDATA[
Nyní se pošle žádost ACK signalizující potvrzení doručení finální odpovědi na žádost INVITE.
]]>
</send>
V dalším kroku scénáře vložíme pauzu, která simuluje probíhající hovor, případně se může vložit
akce pro přehrání skutečného audio souboru.
<nop>
<action>
<exec play_pcap_audio="pcap/g711u.pcap"/>
</action>
</nop>
Poté následuje ukončení hovoru pomocí zprávy BYE a očekávání odpovědi, scénář nesmíme
zapomenout zavřít pomocí </scenario>.
<send retrans="500">
<![CDATA[
]]>
</send>
</scenario>
Serverový scénář můžeme ponechat výchozí, čili spustíme pouze sipp -sn uas. Na straně
generující relaci se přepneme do adresáře s vytvořeným scénářem, který jsem si nazval
uac_basic.xml a spustíme jej na cílovou adresu, kde nám běží SIPp UAS. Namísto SIPp UAS se
může jednat o skutečný server.
Zachytíme relaci např. pomocí tcpdump anebo ngrep a zachycenou SIP relaci můžeme
analyzovat Wiresharkem.
# tcpdump -w /home/voz29/trace8.pcap
Nyní se podíváme ještě na obsah žádosti INVITE, viz. obr. 8.4, kde vidíme, že je v souladu
s očekáváním a její obsah je validní z pohledu RFC 3261 (jádra SIPu).
Pokud bychom přece jen chtěli sestavit vlastní UAS scénář, tak proměnné jsou podobné jako u
klientského scénáře, podstatně ovšem jednodušší co do obsahu, jelikož se používá proměnná
145
8 SIPp a jeho použití k emulaci SIP relací
[last_*], která přebírá hodnoty polí z přijaté žádosti. Scénář začneme standardní hlavičkou, odpověď
100 vytvářet nemusíme a první zprávou tedy bude 180 Ringing, ve které otočíme přijaté hodnoty
v jednotlivých polích, přidáme tag do pole To a vytvoříme obsah pole Contact, které obsahuje údaje o
našem UAS.
]]>
</send>
Obdobně pokračujeme s 200 OK, kde přidáme SDP a použijeme kodek G711ulaw.
<send retrans="500">
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:];tag=[call_number]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>
Následně ve scénáři UAS ošetříme přijetí potvrzení ACK, na tuto zprávu nereagujeme.
146
8 SIPp a jeho použití k emulaci SIP relací
<recv request="ACK"
optional="true"
rtd="true"
crlf="true">
</recv>
Nakonec vytvoříme odpověď na přijetí žádosti BYE a opět nezapomene scénář ukončit pomocí
značky </scenario>.
<recv request="BYE">
</recv>
<send>
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
</scenario>
Do XML scénářů lze vkládat dynamicky hodnoty z externích souborů, tato funkcionalita se vyvolá
pomocí příkazu –inf název_souboru při spuštění SIPp. Například budu potřebovat volat různá tel.
čísla s každým hovorem bez nutnosti parsovat XML scénář anebo měnit volajícího.
V následujícím příkladu si ukážeme, jak lze měnit volajícího s každým hovorem. Vytvoříme si
soubor .csv, kde první řádek značí, jak má SIPp soubor procházet
SEQUENTIAL – postupně,
RANDOM – náhodně,
USER – definováno uživatelem.
Každý další řádek reprezentuje jeden hovor a může být rozdělen na několik proměnných
pomocí ; . V našem příkladu jsou dvě proměnné [field0]; [field1].
SEQUENTIAL
#This line will be ignored
Sarah;sipphone32
Bob;sipphone12
#This line too
147
8 SIPp a jeho použití k emulaci SIP relací
Fred;sipphone94
Obr. 8.5 Vazba klíčového slova v argumentu konkrétního pole SIP hlavičky na řádek v CSV souboru
V případě, že chceme použít autentizaci s různými username/password pro každé volání, tak
vytvoříme CSV soubor dle vzoru níže.
SEQUENTIAL
User0001;[authentication username=joe password=schmo]
User0002;[authentication username=john password=smith]
User0003;[authentication username=betty password=boop]
Ve scénáři vytvoříme zprávu REGISTER, při provedení XML scénáře bude [field1] nahrazeno
autentizačním řetězcem, který bude vytvořen jako nové klíčové slovo (hashovací funkcí MD5).
<send retrans="500">
148
8 SIPp a jeho použití k emulaci SIP relací
<![CDATA[
]]>
</send>
Aplikace SIPp může být interaktivně ovládána přes klávesnici nebo přes UDP sokety. Tzv. “hot
keys“ můžou být vyvolány kdykoliv a umožňují vyvolat i jednoduchý příkazový režim.
Key Action
+ Increase the call rate by 1 * rate_scale
* Increase the call rate by 10 * rate_scale
- Decrease the call rate by 1 * rate_scale
/ Decrease the call rate by 10 * rate_scale
c Enter command mode
q Quit SIPp (after all calls complete, enter a second time to quit immediately)
Q Quit SIPp immediately
s Dump screens to the log file (if -trace_screen is passed)
p Pause traffic
1 Display the scenario screen
2 Display the statistics screen
3 Display the repartition screen
4 Display the variable screen
5 Display the TDM screen
6-9 Display the second through fifth repartition screen.
V příkazovém módu se mohou zadávat pouze následující příkazy, jejichž popis a příklad užití je
uveden níže.
149
8 SIPp a jeho použití k emulaci SIP relací
SIPp obsahuje podporu IPv6, k použití stačí specifikovat IP adresu pomocí přepínače –i.
V následujícím příkladu bude UAS naslouchající na portu 5063 a UAC bude na tento port generovat
provoz.
SIPp je původně generátor na signalizační úrovni a proto má omezenou podporu médií (RTP).
Přece jen má jednu zajímavou funkcionalitu, a to "RTP echo", která umožňuje SIPp naslouchat na
lokální IP a portu (specifikováno užitím přepínače -mi a -mp) RTP média. Cokoliv je přijato na této
adrese/portu je také vráceno odesílateli (použitelné pro echo audia i videa).
-mi : Set the local media IP address (default: local primary host IP address)
-rtp_echo : RTP/UDP packets received on port defined by -mp are echoed to their
sender.
-mb : Set the RTP echo buffer size (default: 2048).
-mp : Set the local RTP echo port number. Default is 6000.
-min_rtp_port : Minimum port number for RTP socket range.
-max_rtp_port : Maximum port number for RTP socket range.
-rtp_payload : RTP default payload type.
-rtp_threadtasks : RTP number of playback tasks per thread.
-rtp_buffsize : Set the rtp socket send/receive buffer size.echoed back to the sender.
150
8 SIPp a jeho použití k emulaci SIP relací
RTP streaming v SIPp "rtp_stream" podporuje strwming audia z kodeků PCMA, PCMU nebo
G729, podporované akce jsou následující:
151
9 NAT vs. IP telefonie
• omezit potřebný počet veřejných IP adres, s rozšiřováním IPv6 ztrácí tento důvod své
opodstatnění, přesto ještě dnes dominuje IPv4, kde je obvyklé dokonce poskytovateli za přidělení
veřejné adresy zaplatit,
• zvýšit bezpečnost podnikové či domácí sítě, skrytím vnitřních adres a jejich oddělením NAT
prvkem je nejjednodušší způsob ochrany proti neoprávněnému vniknutí z vnější sítě). Zařazením
NATu mezi vnitřní a vnější síť se automaticky vytvoří jednoduchý firewall a žádný počítač z vnější
sítě nemůže kontaktovat počítač na vnitřní síti, dokud to neudělá tento počítač sám.
Připojení vnitřní sítě LAN k internetu pak zajišťuje pouze jediná veřejná IP adresa. Ta je
přidělena na externí WAN rozhraní směrovače. U odchozího spojení dochází k nahrazení zdrojové
adresy z privátního rozsahu veřejnou IP adresou směrovače. Při příchozích spojeních zase dochází
ke změně cílové adresy z veřejné na privátní. Těmito privátními adresami jsou rozsahy
9.1 Terminologie
Pod funkcí NAT rozumíme překlad adres mezi veřejným a privátním (neveřejným rozsahem).
NAT pracuje v několika režimech [sin3]:
Dynamický NAT – mapuje vnitřní IP adresu na vnější IP adresu z nějaké skupiny IP adres
(address pool). NAT Pool je seznam globálních adres na externím rozhraní, je to množina
veřejných adres, které máme k dispozici při přístupu do vnější sítě WAN. Pokud se nějaké
152
9 NAT vs. IP telefonie
zařízení z vnitřní sítě pokusí odeslat paket na IP adresu ve veřejné síti, tak NAT přidělí první
dostupnou IP adresu z NAT poolu a vytvoří se příslušný záznam v překladové tabulce, když
přijde odpověď z veřejné IP zpět, tak NAT zkontroluje cílovou adresu, podívá se do překladové
tabulky a zjistí, na které zařízení z vnitřní sítě má paket přeposlat. NAT rovněž vyměňuje IP
adresy v IP hlavičce, pracuje na L3. Existuje doba životnosti (timeout), po kterém se záznam v
překladové tabulce vymaže, díky timeoutu je umožněno obměňování IP adres.
Statický NAT – mapuje vnitřní IP adresu na vnější IP adresu. Statický NAT je používán pokud je
zapotřebí přistupovat z vnější sítě do vnitřní. NAT, provádí se statický překlad jedné IP adresy
vždy na tutéž IP adresu. Každá vnitřní IP adresa má pevnou externí veřejnou IP adresu, která je
nastavena v NAT prvku. Překladová tabulka je tedy statická a v případě nějaké změny je potřeba
ji upravit manuálně.
Overloading (PAT) – přetěžování, mapuje vnitřní IP adresy na jednu vnější IP adresu; bývá
označován jako PAT; jedná se o formu dynamického NATu. V případě PAT dochází k překladu
jak adres tak i příslušných portů, výhodou je, že za jednu externí IP adresu můžeme schovat
celou řadu služeb, které jsou hostovány na různých serverech. Překladová tabulka je rozšířena o
dvě položky: interní port, ze kterého byl paket odeslán a externí port, na který je paket odeslaný
ze zdrojového portu mapován. NAT prvek v tomto případě pracuje na L3/L4 a vymění IP adresu i
port v IP hlavičce paketu tak, jak to určuje překladová tabulka. Tento režim nejpoužívanější a
prakticky se takřka vždy setkáme u NAT se změnou IP a portů.
Mezi “ajťáky“ se běžně používá i sloveso “natovat“, což zahrnuje právě překlad IP adres a portů
mezi vnitřní a vnější sítí, kterou NAT odděluje.
Jak jsem si vysvětlili v předchozí kapitole, tak NAT pracuje s IP adresami a porty, v hlavičkách IP
a TCP či UDP mění jejich hodnoty, ale SIP je aplikační protokol, který uvádí IP adresy a porty přímo
v polích SIP hlavičky. Co se stane, když tyto hodnoty z interní sítě za NATem nebudou odpovídat
hodnotám IP adres a portů ve veřejné síti před NATem? Situaci ilustruje obr. 9.1.
Ačkoliv bylo NATem vytvořeno mapování mezi vnitřní privátní adresou 10.0.0.1 s portem 42723 a
vnější veřejnou adresou 172.34.5.1 s portem 34123 a adresy i porty přepsány v hlavičkách IP a UDP,
tak odpověď na SIP žádost zpět nedorazí, protože ze znalosti fungování SIPu víme, že odpověď
putuje stejnou cestou jako žádost, a tato cesta je v polích Via, do kterých se zapíše nejdříve
odesílající UAC a následně další SIP Proxy, které žádost přeposílají, jenže ve Via je neveřejná
adresa 10.0.0.1, která ve veřejném prostoru IP adres neexistuje. Problémů je ovšem více, další
neveřejnou IP nalezneme v SDP v řádku o (původce), c (IP, na kterou bude terminován RTP stream)
a nakonec i port v m řádku bude jiný. Při registraci bude UA na REGISTRAR serveru zapsán na IP
10.0.0.1 a REGISTRAR sever se na UDP ani nedozví, že jeho odpověď 200 OK nebyla doručena
příjemci. Bez pomoci na straně klienta, serveru anebo přímo směrovači s NAT nebude možné SIP
provozovat.
153
9 NAT vs. IP telefonie
Obr. 9.2. znázorňuje situaci, kdy host X za NAT komunikuje s dvěma různými zařízeními host 1 a
host 2. Pakety zasílané z X mají zdrojovou adresu a port X:x a cílová adresa a port Y:y, přičemž
NAT má k dispozici IP adresy pro mapování X1, X2, ... (nebo může mít pouze jedinou IP adresu
X1=X2). Existuje několik variant překladu adres a portů:
- Symmetric NAT.
Full Cone NAT (jedna k jedné) se chová tak, že všechny požadavky ze stejné vnitřní IP a portu
jsou mapovány na stejnou vnější IP a port. Jedná se v podstatě o statické mapování.
154
9 NAT vs. IP telefonie
Restricted Cone NAT oproti předchozímu vyžaduje, aby nejprve vnitřní zařízení zaslalo paket
externímu. Poté všechny pakety z tohoto vnějšího zařízení (i s odlišnými porty) jsou poslány na toto
vnitřní zařízení.
Port Restricted Cone NAT dovoluje na vnitřní zařízení doručit paket jen tehdy, pokud byl
vnějšímu zařízení poslán paket z daného IP vnitřního zařízení a portu.
Symmetric NAT funguje tak, že požadavky ze stejné vnitřní IP a stejného portu jsou mapovány
na vnější IP a port pro danou komunikaci s externím zařízením. Pří komunikaci s dalším zařízením
ze stejné vnitřní IP a stejného portu je vytvořeno odlišné mapování, přičemž původní je odstraněno.
Naštěstí existuje několik způsobů, jak zajisti podporu provozování IP telefonie přes NAT, ty lze
roztřídit následovně:
- pomocí STUN (Session Traversal Utilities for NAT) dle RFC5389, bohužel nevyřeší problém
NATu v případě Symmetric NAT
- pomocí TURN (Traversal Using Relays around NAT) dle RFC 5766,
- s pomocí překonání NATu na straně SIP serveru, kde je SIP Proxy doplněna RTP Proxy,
Media Proxy anebo NAT helperem,
- podporou na routeru pomocí UPnP (Universal Plug and Play) anebo ALG (Application
Layer Gateway).
- pomocí SBC (Session Border Controler), který se chová jako B2BUA (BAck to Back User
Agent) s podporou SIP ALG.
STUN byl poprvé publikován jako RFC 3489 (Simple Traversal of UDP through NAT), výrazně
byl rozšířen v RFC 5389 (Session Traversal Utilities for NAT). Základní myšlenka je znázorněna na
obr. 9.3. , STUN klient, který nezná použitou veřejnou adresu a port, odesílá žádost na STUN server
umístěného ve veřejném IP prostoru a v odpovědi dostává požadovanou informaci, tu použije do SIP
hlavičky a SDP těla odesílaných zpráv. Výhodou je podpora vícenásobných NATů, kdy STUN paket
odeslaný klientem může projít několika NAT servery, než dosáhne STUN server a nakonec se
dozvídá veřejnou IP adresu, se kterou byl požadavek na STUN server doručen. Právě tuto adresu
SIP klient potřebuje znát k správnému vyplnění polí SIP zprávy (o výměnu IP adres na L3 a portů na
L4 se postará NAT), čili prakticky všichni SIP klienti mají dnes v sobě integrovaného STUN klienta.
Problémem STUN protokolu v SIP klientech pro překonání NATu je ovšem Symetric NAT, kde
vnější přidělený port pro komunikaci se STUN serverem bude odlišný od mapování pro komunikaci s
jiným zařízením (SIP serverem).
156
9 NAT vs. IP telefonie
TURN (Traversal Using Relays around NAT) RFC 5766 je protokol, který umožňuje s využitím
TURN serveru ve veřejné síti přijímat data zařízení za NATem, včetně symetrickým NATem. Využití
je možné i pro IPv4 - IPv6 relay [sim], [sil2].
TURN relay server využívá významné zdroje stroje, na kterém běží, protože média jsou
přenášeny přes TURN relay a tím pádem serverem prochází up a down stream (incoming +
outgoing), oproti SIP klientovi dvojnásobné požadavky toku na pásmo. TURN server je vytěžován
v závislosti na počtu současně probíhajících hovorů. Tím, že musí zpracovat a přeposlat každý paket,
media relay rovněž zanáší zpoždění a vkládají další “hop“ do trasy paketu, čímž zvyšují
pravděpodobnost ztráty.
Myšlenka je postavena na alokaci portu pro média na TURN serveru, viz. obr. 9.4, tím pádem
SIP klient za NATem otevře trasu k TURN serveru pomocí TURN Allocate, poté komunikuje se SIP
serverem, kde v SDP uvádí pro terminaci médií adresu TURN serveru, kterou dostal jako Relay
address. Média přeposílá TURN relay na NAT, který ví, kam média přeposlat, jelikož SIP klient (resp.
TURN client) již záznam pro překlad v NAT vytvořil. Tím je dosaženo průchodu i symetrickým
NATem. Základní rysy TURN protokolu jsou následující:
157
9 NAT vs. IP telefonie
Adresa alokovaná TURN serverem se nazývá Relayed address, viz. obr 9.4 a je použita pro RTP.
TURN garantuje komunikaci ve všech případech použití NATu, pokud není cíleně zakázán politikou
na firewallu. Nevýhodou ovšem je, že je v trase komunikace, má vysoké nároky na zdroje, pásmo a
přináší další zpoždění. Co se týče posledně zmíněného, tento efekt se dá zmírnit tím, že TURN
server bude co nejblíže NAT zařízení, tzn. provozován jako služba ISP poskytovatele.
TURN relay server najdeme v balíčku rfc5766-turn-server , po instalaci okamžitě TURN běží jako
služba, můžeme jej ovšem spustit i s volbou –L naslouchající na konkrétní IP adrese.
# turnserver stop
1388512160: RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server
1388512160: version Citrix-2.6.5.2 'Harding Grim'
# less /etc/default/rfc5766-turn-server
TURNSERVER_ENABLED=0
# turnserver –L 195.113.113.141
158
9 NAT vs. IP telefonie
IEC (Interactive Connectivity Establishment) RFC 5245 je protokol vhodně využívající STUN
a TURN. Koncepčně je poměrně jednoduchý, na základě analýzy sítě určí jednotlivé možnosti a
vypočte priority jednotlivých „kandidátů“.
# nano /etc/reTurnServer.config
TurnAddress = 195.113.113.142
AltStunAddress = 195.113.113.155
AuthenticationRealm = osanet.cz
LongTermAuthPassword = hesloJEveslo
V RFC 3581 je definován nový parametr rport do pole Via hlavičky SIP, který umožňuje klientům
zažádat SIP server o vložení zdrojové IP adresy a portu, ze které byla žádost obdržena, do Via.
Následující INVITE byl poslán z IP adresy 10.1.1.1 a zdrojového portu 4540. SIP Proxy je na IP
192.0.2.2 (proxy.example.com) a poslouchá na standardním UDP 5060.
UA posílá žádost INVITE přes NAT, která po průchodu NAT odchází z veřejné IP 192.0.2.1 a
zdrojového portu 9988. SIP Proxy přidává tyto informace do Via, tím pádem je možné doručit
odpověď pomocí informací received a rport, pokud tedy Via obsahuje tyto hodnoty, tak odpověď je
směrována na danou IP adresu a port.
159
9 NAT vs. IP telefonie
Podstatnou výhodu má B2BUA, který má plnou kontrolu nad spojením včetně médií. V případ
Asterisku (B2BUA) je nutné v jednotlivých konfiguračním souboru /etc.asterisk/sip.conf nastavit
následující:
nat = yes /* Asterisk ignoruje IP adresu (i port), kterou mu zasílá klient ve zprávě
SIP INVITE v poli Contact a odpověď zasílá na stejnou IP adresu a port,
odkud mu byla zpráva zaslána.
qualify = yes /* dále je nutno udržet NAT mapování „otevřené“, Asterisk pravidelně
každou minutu zasílá zprávu SIP OPTION. Od verze Asterisku 1.6.0 lze
změnit frekvenci opakování parametrem qualifyfreq.
directmedia = nonat /* rovněž je nutné (není li použit STUN) zakázat pro klienty za NATem
možnost re-invite. V IAX pak nastavit transfer = no (mediaonly).
160
10 MGCP a IAX protokol
MGCP (Media Gateway Control Protocol) je master/slave protokol pro řízení brány (slave). Tento
IETF protocol, který byl vydán v roce 1999 jako informativní RFC 2705 a dotažen do finální podoby
standardního doporučení byl až v roce 2003 v RFC 3435. Z MGCP vychází protokol Megaco/H.248,
přičemž Megaco je označení IETF a H.248 je značení ITU-T pro stejný standard. První verze H.248
byla uvolněna v roce 2000, nyní je třetí verze z roku 2005.
Každý příkaz musí být zodpovězen, odpověď vrací návratový kód indikující stav vyřízení příkazu.
Tyto kódy jsou součástí RFC 3661 a mají rozsah 000-999:
162
10 MGCP a IAX protokol
900-999 Reason codes, jedná se o důvody chyb např. 901 – endpoint taken out of
service oznamující, že koncový terminál je mimo provoz anebo 903 – QoS resource
reservation was lost indikuje nemožnost garantovat kvalitu.
Na obr. 10.1 je zachycena výměna zpráv mezi CA a MGW [sil2]. První zprávou je obsazení
CRCX (SDP) s popisem médií v SDP, následuje odpověď 100 potvrzující doručení CRCX a následně
200 (SDP) jako finální odpověď na CRCX včetně popisu médií přicházející při vyzvednutí volaným a
sestavení hovoru, média jsou přenášeny standardně v RTP (G711Alaw), následuje zavěšení
volaným DLCX a jeho potvrzení 250.
MGCP protokol je podporován řadou výrobců jako je např. Cisco, Nortel, Ericsson a rovněž je
podporován v Asterisku. V PBX Asterisk je implementován pouze Call Agent (CA). Gateway je
implementována zpravidla hardwarově, ale najdeme ji např. v PBX YATE.
# less /etc/asterisk/mgcp.conf:
[general]
port = 2727 ; IP adresa (0.0.0.0 - všechny rozhranní)
bindaddr = 0.0.0.0 ; IP adresa (0.0.0.0 - všechny rozhranní)
[192.168.10.2]
163
10 MGCP a IAX protokol
v /etc/asterisk/extensions.conf
V případě mapování SIP a MGCP, kdy volání je iniciováno ze strany MGCP s terminací do SIP,
se využívá modifikace spojení MDCX (SDP), když jsou média vyjednána a doručen ve 200 OK., viz.
obr. 10.2.
ústředen Asterisk, i když jeho použití je ovšem i pro koncové klienty, ale vzhledem k široké podpoře
SIPu v koncových zařízeních je portfolio IAX SW klientů a zařízení o poznání menšího rozsahu než
SIP. Asterisku bude věnována následující kapitola.
IAX je zaveden do ústředny Asterisk od samého počátku vývoje [mol1]. Od Asterisk 0.5 začala
být podporována vylepšená verze protokolu, nazývaná IAX2, ta je využívána v současnosti a je
specifikována v IETF RFC 5456 (IAX: Inter-Asterisk eXchange Version 2) z roku 2010.. IAX je
orientován na přenos peer-to-peer a je určen jak pro přenos signalizace, tak i médií. U protokolů SIP
a H.323 je přenos médií zabezpečen pomocí RTP. Protokol IAX2 využívá jeden kanál pro přenos
signalizace i samotných multimediálních dat a navíc umožňuje i multiplex více hovorových i
signalizačních dat do jednotného datového toku, tzn. že snižuje overhead hlaviček a na rozdíl od SIP
či H.323 s RTP, kde při dvaceti současných hovorech se stejným kodekem je celkový tok dán
násobkem dvaceti jednotlivých toků, tak u IAX2 to nebude jednoduchým násobkem, ale méně
vzhledem k multiplexování.
Pro přenos je využíván pouze jeden UDP port, obvykle port 4569, základní komunikační
jednotkou protokolu IAX je IAX rámec, viz. obr 10.3. Základní rámec nesoucí hovorová i signalizační
data se nazývá „Full Frame“ a pro přenos multimediálních dat bez signalizace je využit tzv. „Mini
Frame“, jehož hlavička má pouhé 4B.
MiniFrame hlavička obsahuje posledních 16 bitů časové značky, zdrojové číslo volajícího
(Source call number) a bit F, který rozlišuje typ rámce. Full Frame má hlavičku 12B bajtovou stejně
jako RTP. Obsahuje identické informace jako MiniFrame, včetně plné časové značky TimeStamp a
navíc obsahuje číslo volaného (Destination Call Numer), OSeqno (OutBound stream sequence
number), které udává číslo odchozích rámců a ISeqno (InBound stream sequence number)
obsahující stejnou informaci pro příchozí rámce. Frame Type určuje typ rámce (DTMF signalizace,
165
10 MGCP a IAX protokol
Hlasová data, Video, řídící rámec, IAX řízení, atd...). Pole C určuje jak bude interpretováno pole
nazývané Subclass. Pokud je C rovno nule, potom Subclass je interpretován jako mocnina dvou,
když je C jedna, Subclass je interpretován jako 7bitová hodnota. Pokud je pro přenos DTMF použit
úplný rámec, Subclass obsahuje aktuální přenesenou číslici. Pokud je přenášeno video, hlas nebo
obraz, pole Subclass udává typ komprese [mol1].
Protokol IAX využívá pro adresaci standardních formátů typu URI (Uniform Resource Identifiers).
Základní schéma URI protokolu IAX je následující:
iax2:alice@192.168.1.115:4569/200?vlastni
Zprávy protokolu IAX2 se dělí na dvě základní skupiny: spolehlivé (reliable) a negarantované
(non-guaranteed). Mezi spolehlivé se řadí všechny ty, které využívají Full Frame [mol1].
Negarantované zprávy jsou označovány všechny informace, které jsou zaslány pomocí Mini Frame.
IAX2 obsahuje následující zprávy:
Pomocí LAGRQ se zjišťuje zpoždění mezi komunikujícími stranami, žádost LAQRQ obsahuje
timestamp, který musí být vrácen (identický) v odpovědi LAQRP, tím pádem je zjištěn RTT. Zpráva
Voice obsahuje typ kodeku a obsah přenášeného vzorku pomocí FULL Frame a tedy je potvrzena a
jinak se přenáší obsah hovoru v Mini Frame rámcích. Ze znalosti protokolu SIP je debug IAX2
intuitivní a ukážeme si registraci, sestavení hovoru a ukončení.
167
10 MGCP a IAX protokol
IAX2 klient odpoví opět zprávou REGREQ, přičemž tentokrát již zpráva obsahuje i autentizační
údaje v potřebném formátu. Jestliže nelze registraci akceptovat, stav vzdáleného sytému bude
„neautorizovaný“ a žádné další akce nejsou nutné. Pokud je registrace akceptována, Asterisk odpoví
zprávou REGACK (Registration Acknowledgment Message), která musí obsahovat IP adresu
Asterisku a dobu vypršení registrace. Pokud tomu tak není, obě strany musí nastavit shodnou dobu
vypršení registrace na 60 vteřin. Pokud je registrace odmítnuta, je zaslána zpráva REGREJ
(Registration Reject Message). Každá registrace je platná jen po omezenou časovou periodu
(standardně 60 sekund, jak již bylo uvedeno výše). IAX2 klient může tuto dobu prodloužit pomocí
opakování registračního procesu nebo naopak zkrátit pomocí zprávy REGREL (Registration Release
Request Message).
Inicializace hovoru začíná zasláním zprávy NEW klientem na Asterisk, viz. obr. 10.6. a Asterisk
odpoví pomocí zpráv AUTOREK, pokud vyžaduje autorizaci, respektive ACCEPT nebo REJECT pro
schválení nebo zamítnutí požadavku na sestavení hovoru.
168
10 MGCP a IAX protokol
Následuje vyzvánění indikované zprávou RINGING a protože je přenášená pomocí FULL Frame,
tak zpráva je potvrzena pomocí ACK. Pokud je volaným IAX2 klientem hovor vyzvednut, tak je
odeslána zpráva ANSWER, viz obr. 10.7.
Obr. 10.8 zobrazuje obsah NEW včetně seznamu podporovaných i nepodporovaných kodeků.
169
10 MGCP a IAX protokol
Během hovoru se v IAX2 může vyskytnout požadavek na vyvolání služby pomocí zprávy FLASH
(FLASH Request Message) anebo přidržení spojení HOLD (HOLD Request Message), předání
spojení TRANSFER (TRANSFER Request Message) a požadavek na pokračování po přidržení
UNHOLD Request Message).
Rozpad spojení se uskutečňuje odesláním zprávy HANGUP, viz. obr. 10.9, který nepotřebuje
další komentář.
170
11 Asterisk
11 Asterisk
Asterisk je fenomén posledních let, to co představuje Apache v oblasti webových serverů, tak
obdobné postavení má Asterisk v IP telefonii. Trend nasazování IP telefonie je dlouhodobý a
telefonie se ocitá v roli aplikace na IP sítích. Alfou a omegou IP telefonie ve firemním prostředí je
pobočková ústředna (PBX), v operátorském je to softswitch. V případě pobočkové ústředny se častěji
mluví o komunikačním serveru, protože většina nasazovaných řešení PBX může sloužit jako
aplikační server, překladová média brána či poskytovat podporu dalších služeb. V současné době
nejrozšířenější volně dostupnou softwarovou realizací takové ústředny představuje produkt Asterisk
od firmy Digium ™. V následujících kapitolách provedeme čtenáře jednotlivými konfiguracemi služeb,
tak aby byl po přečtení textu schopen vytvořit fungující systém a infrastrukturu umožňující efektivní
používání VoIP telefonie v praxi. Nejdříve ovšem pár vět k původu Asterisku. Při vzniku Asterisku byl
Mark Spencer, čerstvý absolvent Auburn University v Alabamě, který se v roce 1999 rozhodl napsat
pro linux svůj vlastní softvér realizující pobočkovou ústřednu s hlasovou poštou (voice-mail) namísto
zakoupení komerčního produktu, údajně nebylo na PBX dost prostředků. Výstup své práce zveřejnil
jako open-source a nabídl tím široké komunitě uživatelů, testerů i vývojářů.
“I was so excited the first time I got a phone call delivered through my PC using my
own software.”
Mark Spencer
Nevíme, nakolik je historka pravdivá, ale každopádně v roce 1999 vznikl jeden
z nejvýznamnějších open-source projektů. Mark Spencer založil o tři roky později firmu Digium, která
dlouhodobě stojí za vývojem Asterisku a protože SW Asterisk se prodávat nedá, tak její profit je z
především z technické podpory a z prodeje HW, který je plně kompatibilní s Asteriskem, jedná se o
Digium Cards jako je T1/E1/FXO/FXS.
Dnes je vývoj Asterisku z větší části záležitostí open-source komunity, na jeho kódu se podílí
stovky vývojářů z různých částí světa, rychle se vyvíjí a pro řadu komerčních firem je velmi obtížné
Asterisku konkurovat, většinou se nové funkcionality (jako např. webRTC) objeví nejdříve v Asterisku
171
11 Asterisk
a až poté u komerčních produktů, pro něž je Asterisk velkou inspirací. Pro ilustraci vývoje si ukážeme
aktuální roadmapu a podporu jednotlivých verzí Asterisku, viz. obr. 8.1. První použitelná verze
s dlouhodobou podporou byla 1.2 uvolněná v roce 2005 následovaná verzí 1.4 z roku 2006, 1.6
z roku 2008 a 1.8 z roku 2010. Další vývoj již vidíme na obr. 11.1, došlo ke změně číslování ve
verzích, verze Asterisk 10 byla uvolněna v roce 2011 a prakticky každý rok přichází další verze.
Rovněž vidíme, že některé verze mají delší podporu (LTS – Long Term Support). Během této
podpory jsou zajišťovány opravy, jednak se korektury (patche) nabízejí přímo ke stažení a jednak se
v rámci hlavní řady uvolňují další podverze (subversioning) a velmi snadno se dá provést upgrade,
protože daná verze zachovává stejnou architekturu, strukturu souborů , notaci v konfiguracích a ve
prakticky zapracovává patche, které vznikají v rámci dané řady, např. verze 1.8.0 je z října 2010 a
verze 1.8.25 z prosince 2013 s řadou oprav. U nové verze jsou změny v architektuře, používají se
jiné knihovny, zásadní změny v kódu již neumožňují záměnu konfiguračních souborů, např. ve verzi
Asterisk 12 je zcela přepracován SIP stack (mimochodem je postaven na knihovně PJSIP) a změnila
se i notace v konfiguračním souboru sip.conf pro SIP kanál. U LTS verzí je podpora ve formě
vydávání dalších podverzí a patchů garantována po dobu alespoň čtyř let a repozitáře verze jsou
udržovány ještě déle [md2].
Digium ™. Systém je navržen tak, aby vytvořil rozhraní mezi telefonním hardwarem či softwarem a
libovolnou telefonní aplikací. S jednotlivými protokoly SIP, IAX, H.323 pracuje Asterisk jako s kanály
navázanými na jádro, DAHDI (Digium Hardware Device Interface) představuje rozhraní směrem k
PSTN, může se jednat o ISDN BRI či PRI karty, FXS, FXO, apod, viz. obr 11.2. Příkazový řádek CLI
je silným nástrojem Asterisku, stejně jako Manager Interface. Srdcem Asterisku je Dialplan, kde je
definováno chování v případě obsluhy požadavku, ať už odchozího či příchozího volání anebo
požadavku na vyvolání služby, viz. obr. architektury Asterisku.
Jak již bylo naznačeno v úvodu, Asterisk může mimo jiné sloužit jako:
Konferenční server.
Packet voice server.
Šifrovací médium telefonních nebo faxových volání.
Překladač čísel.
Aplikace Calling card,
Prediktivní volič,
Vzdálená „kancelář“ pro existující PBX.
A další...
Asterisk také podporuje služby, které byly dříve součástí pouze pokročilých firemních řešení:
Hudba pro zákazníky v pořadí čekající ve frontě na hovor, podpora streamování médií a
MP3 souborů.
Fronty volajících, kdy tým agentů může odpovědět na volání a může sledovat fronty
(vhodné pro Call Centra).
Integrace Text-to-speech modulů a rozpoznávání hlasu.
Podrobné záznamy o hovorech jsou převáděny do textových souborů a SQL databází.
Propojení s PSTN sítí skrze digitální a analogové linky.
Obvykle je snaha, aby bylo možné v dané datové sítí realizovat co nejvíce hlasových spojení.
Kodeky poskytují nové možnosti pro digitální přenos hlasu, včetně komprese, která je jednou z
nejdůležitějších vlastností, mezi další vlastnosti patří detekce hlasové aktivity, vyrovnání paketové
ztráty, a generování výplňového šumu. V Asterisku jsou podporovány následující kodeky s uvedenou
šířkou pásma. Ty mohou být samozřejmě transparentně překládány z jednoho na druhý [md2].
Kromě těchto audio kodeků je zde podpora videa h.263 a h.264. Odesílání dat z jednoho
telefonu do druhého by mělo být snadné za předpokladu, že si data samy najdou cestu skrze síť.
V praxi je nutné pro toto směrování využívat signalizační protokoly, dominantním a nejpoužívanějším
signalizačním protokolem je SIP. Přesto existuje stále spousta systémů, které pro signalizaci ve
VoIP síti využívají starších protokolů jako jsou např. H.323. Jiný protokol IAX je zase nativním
174
11 Asterisk
SIP
H323
IAX2
MGCP
SCCP (Cisco Skinny)
Nortel unistim
Jingle
Asterisk nabízí množství doplňkových služeb, jak klasických, tak i pokročilých, které jsou obvykle
poskytovány pouze špičkovými firemními PBX. Jako doplňkové služby a funkce si uvedeme
následující příklady, výčet nemusí být úplný, ale i tak je docela obsáhlý:
ACCOUNT CODE, používá se pro účely tarifování. Volající před volbou čísla vloží svůj kód.
Do CDR (Call Detail Recording) se zaznamenávají údaje o délce hovoru, volaném čísle, ceně,
atd...
AUTOMATED ATTENDANT, volající je přepojen na požadovanou pobočku bez účasti
spojovatelky.
AUTOMATIC HOLD, pokud chceme provést hovor druhý hovor, tak můžeme inicializovat bez
zavěšení předchozího a Asterisk první hovor automaticky podrží, přičemž se k němu můžeme
zpětně vrátit.
CALL TRANSFER, jedná se o předání hovoru.
BLACKLIST, seznam nežádoucích čísel, které jsou jako příchozí hovory odmítnuty.
BLIND TRANSFER, je předání hovoru na jinou pobočku bez sledování toho, zda hovor někdo
přijme, hovor je předán i s vyzváněním.
CALL DETAIL RECORD, záznam hovorů uskutečněných v PBX, který obsahuje volající číslo,
volané číslo, datum, délku hovoru a případně další informace.
CALL FORWARDING ON BUSY, příchozí hovor je automaticky přesměrován za podmínky,
že je volané číslo obsazeno.
CALL FORWARDING ON NO ANSWER, příchozí hovor je automaticky přesměrován jen
tehdy, pokud volané číslo neodpovídá, tzn. po určitém čase.
CALL FORWARDING UNCONDITIONALLY, jedná se o okamžité přesměrování bez
podmínek. CALL MONITORING, evidence příchozích, odchozích a zmeškaných volání,
přístup přes web, uživatel po autentizaci vidí seznam volání, které se týkají jeho účtu.
CALL PARKING, odložení hovoru do virtuálního úložiště s možností jeho vyzvednutí stejnou
nebo jinou pobočkou.
CALL QUEUING, umožňuje řadit příchozí hovory do fronty a vyzvedávat je dalším volným
účastníkem konkrétní skupiny.
CALL RECORDING, umožňuje zaznamenávat hovory, zaznamenané hovory jsou uloženy v
požadovaném formátu (např. PCM či GSM) a nabídnuty k přehrání oprávněnému uživateli,
přihlášení probíhá přes https a po zadání hesla jsou nabídnuty pouze hovory týkající se
konkrétní pobočky autentizovaného uživatele.
175
11 Asterisk
176
11 Asterisk
ROUTE BY CALLER ID, hovor je směrován na základě čísla volajícího na pobočku, do fronty
nebo do skupiny účastníků (Ring Group). SMS MESSAGING, Asterisk umožňuje pomocí
SMS upozorňovat např. zmeškaná volání a zanechané vzkazy, SMS se posílají přes SMS
bránu (může to být GSM modem lokálně připojený k Asterisku).
SPELL/SAY, funkce umožňuje přečíst text, např. email.
SUPERVISED TRANSFER, je předání volání řízené automatickým zařízením (např. Voice
Response Unit), které vyhodnotí výsledek předání – přijato, obsazeno, nevyzvednuto.
TALK DETECTION, funkce umí detekovat hovor (rozezná záznamník od osoby).
THREE-WAY CALLING, je konference tří účastníků, je možné ovšem dělat i konference o
několika desítkách účastníků (na Asterisku otestováno do 30-ti) s využitím konferenční
místnosti (Meet-Me).
TIME AND DATE, funkce čte čas a datum volajícímu.
TRANSCODING, Asterisk umožňuje konverzi mezi různými kodeky.
TRUNKING, je funkce připojení do klasické telefonní sítě pomocí interní karty v Asterisku.
VOICEMAIL, umožňuje nahrát vzkaz pro volaného, zpřístupnit nahrané vzkazy z telefonu,
přes web anebo odeslat vzkaz do poštovní schránky uživatele jako email.
11.3 Instalace
instalace je možná přímo z repozitáře, ověříme si, zda nám vyhovuje verze a nainstalujeme.
Asterisk ihned běží, samozřejmě můžeme zkompilovat určitou verzi, potom je užitečné se
podívat na požadavky dané verze na https://wiki.asterisk.org/wiki , např. pro Asterisk 11 na Ubuntu je
postup následující.
Můžeme ověřit status asterisku, zastavit je, spustit, restartovat a připojit se na konzoli a ovládat
jej z příkazového řádku. Pokud Asterisk běží, tak se připojíme s přepínačem -r pomocí asterisk –rvvv,
pokud nám neběží, tak přepínačem –c rovnou aplikaci spustíme asterisk –cvvv.
# /etc/init.d/asterisk status
# /etc/init.d/asterisk {start|stop|restart|reload|force-reload}
177
11 Asterisk
# asterisk –C /home/voz29/asterisk.conf
178
11 Asterisk
Další sekcí jsou volby [options]. V této sekci jsou nastaveny globální proměnné pro běh
programu. V tabulce jsou uvedeny nejvýznamnější z nich.
dumpcore yes Nařídí Asterisku vytvořit dump jádra při spadnutí programu
Ostatní volby již nejsou tak významné a nemá cenu se jimi v téhle fázi seznamování zabývat.
Nyní si ukážeme, jak je možné v Asterisku pracovat s přídavnými moduly.
Soubor modules.conf není v Asterisk instalaci striktně vyžadován, avšak bez modulů by Asterisk
nebyl schopen dělat téměř nic. Pokud v konfiguračním souboru /etc/asterisk/modules.conf zvolíme
autoload=yes, Asterisk vyhledá všechny moduly v /usr/lib/asterisk/modules složce a načte je při
startu. Ačkoliv většina modulů nevyžaduje příliš systémových prostředků a jsou načteny velmi rychle,
je vhodné načíst pouze ty moduly, které máme v plánu využívat. Moduly, které navíc využívají
síťových prostředků, mohou být z bezpečnostního hlediska zneužity.
Rovněž je možné nechat ze složky načíst všechny moduly, které najde a explicitně říct, které
moduly nechceme načíst použitím noload direktivy. Jedna z možností, jak kontrolovat, které moduly
jsou načteny je jednoduše nekompilovat a neinstalovat je během instalačního procesu. Během něj
provádíme příkaz make menuselect, který zobrazí v prostředí menu dostupné moduly ke kompilaci.
Moduly, které mají před sebou XXX, jsou moduly, které nemohou být zkompilovány protože configure
skript nebyl schopný najít požadované závislosti. Přehled direktiv pro modules .conf je v následující
tabulce
preload res_odbc.so Indikuje, že zmíněný modul by měl být načten první v pořadí
require chan_sip.so Stejně jako load, ale Asterisk skončí, pokud dojde k chybě při
načtení modulu
V této části se seznámíme s konfigurací SIP a IAX kanálu. Konfigurace SIP a IAX je uložena
v sip.conf a iax.conf. Volání je směrován na pobočku (extension), která je prezentována řetězcem
alfanumerických znaků, čili můžeme např. volat jménem Alice anebo číslem 200.
180
11 Asterisk
V následující ukázce je znázorněn příklad rychlé konfigurace SIP účtu. Konfigurační soubor
sip.conf obsahuje jednak obecné nastavení v sekci [general], které je platné, pokud specifická sekce
neobsahuje jinou volbu parametrů ze sekce [general], některé z obecných parametrů můžou být
specifikovány i v sekci uživatele, např. kodeky či kontext. Na konec souboru sip.conf přidáme
následující.
[bob]
type=friend
context=Asterisk1
language=cz
host=dynamic
username=400
secret=heslo
callerid=Bob <400>
Definice IAX účtů používá téměř stejnou syntaxi, jako definice SIP účtů, s jediným rozdílem, že
se provádí v souboru iax.conf, opět umístěném v hlavním adresáři s aplikací /etc/asterisk, níže
uvedené přidáme na konec souboru.
[general]
calltokenoptional=0.0.0.0/0.0.0.0
181
11 Asterisk
Po uložení konfigurace provedeme reload systému anebo pouze SIP či IAX2 modulu a
přesvědčíme se o existenci uživatelů.
# asterisk –rvvv
*CLI> reload
*CLI> sip show peers
*CLI> sip show users
Následující tabulka obsahuje možnosti nastavení parametrů uživatele jak v sip.conf, tak
v iax.conf.
;registrace asterisku jako klienta, rovněž musí být definován i účet viz níže
register => user[:secret[:authuser]]@host[:port][/extension]
; „deklarace” účtů
[my_provider] ;učet k poskytovateli - název
name= my_provider ;registrační jméno
secret=heslo_1 ;heslo
type=peer ;ovlivňuje autentizaci, peer – servery, user – klient, friend – oba
fromuser=XXXX ;položka fromuser v SIP protokolu (pokud poskytovatel vyžaduje)
fromdomain=YY.com ;položka fromdomain v SIP protokolu (pokud poskytovatel vyžaduje)
host=provider.cz ;IP adresa, DNS název (, dynamic - dynamicky přidělená registrací)
canreinvite=no ;určuje zda mohou RTP pakety „obcházet” Asterisk
context = verejny ;určuje kontext, „skupinu” do které uživatel patří
[general]
port = 2727 ; IP adresa (0.0.0.0 - všechny rozhranní)
bindaddr = 0.0.0.0 ; IP adresa (0.0.0.0 - všechny rozhranní)
[192.168.10.2]
host = 192.168.10.2 ; IP brány
line => aaln/1 ; jednotlivé linky brány
line => aaln/2
line => aaln/3
line => aaln/4
dtmfmode=rfc2833 ; DTMF mód
context = mgcp_kon ; kontext
directmedia = yes ; může provést re-invite (stejné jako sip)
; ... a řada dalších parametrů
183
11 Asterisk
; „deklarace” účtů
[120]
username=120
secret=asdf
auth=md5
type=friend
host=dynamic
context=kontext1
[IAX2_TRN]
username=IAX2_TRN
secret=trnk
auth=md5
type=friend
host=147.229.151.125
context=kontext1
trunk=yes ;trunk mod asterisku, je zapotřebí hw časovač (např. digium hw)
Pro zajištění přenosu videa je nutné toto nastavení povolit přidáním příkazu videosupport do
obecného nastavení ([general]) v souboru sip.conf a také povolit podporu kodeků sloužících pro
přenos videa, jako H.261, H.263, H.263+ nebo H.264 nebo jen některé z nich.
[general]
videosupport=yes
allow=h261
allow=h263
allow=h263p
allow=h264
184
11 Asterisk
Dialplan určuje, jak se zachází s relacemi, které vznikají v Asterisku anebo přicházejí do
Asterisku zvenčí, je srdcem Asterisku a rozhoduje se v něm, jaké činnosti budou vykonány při
odchozím či příchozím volání. Dialplan se vytváří se pomocí skriptovacího jazyka, kterým definujeme
instrukce, které Asterisk provádí při splnění podmínek pro danou sadu instrukcí. Na rozdíl od
tradičních telefonních systémů je dialplan plně přizpůsobitelný. Jeho syntaxe je specifikována
v konfiguračním souboru extensions.conf. Dialplan se dělí do 4 základních koncepcí: na kontexty,
pobočky, priority a aplikace.
11.6.1 Kontexty
Dialplan je rozdělen na sekce zvané kontexty (context). Kontexty oddělují různé části dialplanu
od vzájemné interakce. Pobočka definovaná v jednom kontextu je naprosto izolovaná od pobočky
z jiného kontextu, pokud tak není výslovně povoleno. Všechny instrukce zapsané pod názvem
kontextu jsou jeho součástí, dokud není definován nový kontext. Za začátku dialplanu existují dva
speciální kontexty s názvy [general] a [globals]. První sekce obsahuje seznam obecných nastavení
dialplanu a druhý obsahuje globální proměnné. Kromě těchto dvou kontextů je třeba vyvarovat se
používání kontextu [default]. Pokud v sip.conf definujeme pobočku, určujeme také, k jakému kontextu
se váže.
sip.conf extensions.conf
[alice] [general]
context=vlastni [globals]
[vlastni]
exten => alice,1,Dial(SIP/alice)
11.6.2 Pobočky
Ve světě telekomunikací pojem pobočka obvykle značí číselný identifikátor, který, pokud je volán,
rozezvoní telefon (hlasovou schránku, frontu). V Asterisku pobočka pod určitým názvem definuje
jedinečnou posloupnost kroků, přes které Asterisk hovor povede. Uvnitř každého kontextu můžeme
definovat neomezený počet poboček. Syntaxe pro telefonní pobočku je tvořena slovem exten => ,
následuje název (nebo číslo) pobočky (nebo kombinace).
185
11 Asterisk
11.6.3 Priority
Každá pobočka má několik kroků nazývané priority. Priority jsou číslovány postupně od čísla 1 a
každý krok spustí specifickou aplikaci. Příkladem může být pobočka, která vyzvedne hovor a vzápětí
jej zavěsí. Mezi těmito kroky bývá samozřejmě obvykle sekvence dalších kroků [md1].
Číslování nemusí být striktní ve všech krocích, pro automatické doplnění čísla s prioritou o 1
vyšší je možné uvést v dalším kroku prioritu n. První priorita však musí začínat číslem 1.
Z důvodu zjednodušení syntaxe došlo k zavedení nové proměnné same => Ta doplní slovo
exten => a název pobočky za klíčové slovo same => . Zlepšuje čitelnost a přenositelnost kódu
z jedné pobočky na druhou.
Návěští priorit
Umožňují přiřadit název prioritě uvnitř pobočky. Zaručuje to, že můžeme konkrétně odkazovat na
priority něčím jiným než jejím číslem, které obvykle nemusí být ani známé. Jako syntaxe se používá
exten => 123,n(návěští),aplikace()
11.6.4 Aplikace
Každá aplikace provádí specifickou akci s daným kanálem jako přehrání zvuku, čtení DTMF
volby, prohledávání databáze, volání kanálu, zavěšení hovoru atd. Příklady aplikací jsou:
Answer()
Answer() aplikace je používána k vyzvednutí kanálu, který zvoní. Nemá žádné argumenty.
186
11 Asterisk
Progress()
Progress() poskytuje informaci o probíhajícím hovoru původnímu kanálu. Někteří poskytovatelé
mají signalizační problémy, pokud tato aplikace není použita.
Playback()
Slouží k přehrání předem uložené nahrávky. Typickým způsobem využití je hlasový automat.
Jako parametr vyžaduje cestu k přehrávanému souboru. Buďto absolutní nebo relativní.
Playback(/home/john/sounds/filename)
Playback(custom/filename)
Asterisk vybírá nejlepší soubory k přehrání na základě hodnoty překladu – tzn., vybere soubor ve
formátu, který je nejméně náročný na CPU při převodu na nativní audio formát. Pokud chceme zjistit,
jak dlouho zabere převod mezi formáty, můžeme to zjistit příkazem v CLI show translation
Hangup()
Slouží k zavěšení hovoru a nevyžaduje žádný parametr, popř. můžeme použít ISDN cause code
Hangup(16)
Background()
Slouží k přehrávání hovorů a zároveň reaguje na DTMF volbu uživatele
Nyní si vytvoříme ukázkový diaplpan, definujeme vlastní kontext [vlastni] a do něj vložíme
pobočku 200. Pokud tuto pobočku vytočíme z klienta, přehraje se nám uložený audio soubor hello-
world a po přehrání dojde k zavěšení hovoru. Na konec souboru /etc/asterisk/extensions.conf tento
kontext s obsahem doplníme
[vlastni]
exten => 200,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
Kontext s názvem [vlastni] již máme svázaný s uživateli Alice a Bob v konfiguračním souboru
/etc/asterisk/sip.conf, takže nyní stačí pouze načíst novou konfiguraci do Asterisku. Po uložení
konfigurace ji načteme do Asterisku reloadem celé konfigurace.
187
11 Asterisk
Následuje otestování funkce, jednoduše zavoláme pobočku 200 a ze sluchátka uslyšíme „Hello
World“. Nyní povolíme uživatelům Alice a Bob komunikovat mezi sebou. Do kontextu [vlastni]
vložíme následující pobočky
Po reloadu Asterisku může Alice volat Bobovi a Bob Alici vytočením jejich jména v softwarových
telefonech a pokud použijeme v dialplan níže uvedené, tak se dovoláme vytočením 300 a 500.
V extensions.conf nám vzory pomáhají definovat kombinace několika čísel do jednoho zápisu.
Pokud bychom pracovali se stávajícími znalostmi řešili bychom následující problém následovně.
Pokud někdo zavolá na číslo 100-109 přehraje se mu zpráva hello-world:
[general]
[test]
exten => 100,1,Answer()
exten => 100,2,Playback(hello-world)
exten => 100,3,Hangup()
A tak bychom pokračovali dále až po 109. Pokud použijeme vzor, bude zápis vypadat přehledněji
a lépe:
[general]
[test]
exten => _10X,1,Answer()
exten => _10X,2,Playback(hello-world)
exten => _10X,3,Hangup()
Extension _10X definuje rozsah čísel od 100 do 109. Vzory vždy začínají podtržítkem.
[abc] – znaky a,b,c. Na příklad mohou být nahrazeny čísly 1,2,3. Ve výsledku 31,32,33:
188
11 Asterisk
[a-b] – jakékoliv znak mezi a-b. Na příklad mohou být nahrazeny čísly 1-5. Ve výsledku 31-35.
Může být také ve tvaru [25-8] pro 32,35-38:
[X] – jakákoliv číslice od 0-9. Například pro jakékoliv číslo od 300 do 399:
. – jakékoliv číslo či číslice. Na příklad pro všechna čísla, která začínají 420:
Nepoužívejte vzor _. ! Pokud tento vzor použijete extension vloží speciální pravidlo i,t a h , které
by mohlo vyvolat neočekávané chování. Pro označení celého rozsahu používejte raději _X. Nebo _X.
Při vytváření číslovacího plánu je výhodné využívat některé předdefinované proměnné Asterisku.
Mezi nejčastěji používané patří CALLERID, CONTEXT, EXTEN. Význam proměnných je patrný
z jejich názvu [sil3]. CALLERID obsahuje řetězec Identifikace volajícího, CONTEXT obsahuje název
kontextu, ze které proměnnou čteme, EXTEN obsahuje volanou klapku. Obsah těchto proměnných, tj.
řetězec znaků, můžeme číst pomocí zápisu:
${název_proměnné:offset:délka}
189
11 Asterisk
Offset nám určuje počátek čtení řetězce, v případě že je negativní počítá se od konce řetězce.
Délka nám určuje délku předaného řetězce. V případě že délka v zápise chybí nebo je negativní, pak
se vrátí část řetězce začínající na hodnotě offsetu až po poslední znak řetězce. Například je-li
v proměnné EXTEN uložen řetězec 123456789:
Vložené kontexty (dále jen includes) jsou velice silným nástrojem pro zjednodušení a organizaci
velkých dialplánů. Vložrním příkazu include , můžeme vkládat kontexty do stávajících kontextů.
Uveďme příklad:
A v dialplánu:
[general]
[prodej]
include => interni
include => externi
[interni]
exten => 2000,1,Dial(SIP/2000)
[externi]
exten => 17005551212,1,Dial(SIP/5551212)
Názvy dnů a měsíců reprezentují vždy třípismenné zkratky anglických názvů a čas je zadáván ve
24 hodinovém tvaru. Pokud bychom chtěli mít například pracovní číslo dostupné od pondělí do pátku
od 9:00 hodin do 18:00 a v sobotu od 9:00 do 13:00, zápis v dialplánu by vypadal následovně:
190
11 Asterisk
;Den
include => otevreno|09:00-18:00|mon-fri|*|*
include => otevreno|09:00-13:00|sat|*|*
include => zavreno
[otevreno]
exten => 2000,1,Dial(SIP/2000)
[zavreno]
exten => 2000,1,VoiceMail(2000,u)
Dříve než bude popsáno dialplánové programování a funkce, je dobré zmínit ještě dva základní a
velice používané prvky: systémovou proměnnou ${EXTEN} a funkci ${CALLERID(num)}.
${EXTEN} – Asterisk automaticky za tuto proměnnou vkládá vytáčené číslo. Narozdíl od:
Použijeme:
Výsledek je stejný.
V Asterisku mohou být funkce a programy implementovány buď externě pomoci Asterisk
Gateway Interface (AGI) skriptu nebo Asterisk Extension Language (AEL).
11.7 Voicemail
Hlasová schánka (dále jen voicemail) je jednou ze základních služeb, která je Asteriskem
poskytována [vore]. Asterisk již v základní instalaci obsahuje funkční voicemail module. Potřebujeme
ho jen nakonfigurovat skrze soubor etc/asterisk/voicemail.conf. Nejprve opět přeneseme ukázkový
soubor do našeho záložního adresáře:
[general]
format = wav
[default]
2000 => 1234,Filip Rezac,filip.rezac@vsb.cz
2001 => 5678,Miroslav Voznak,miroslav.voznak@vsb.cz
Nyní jsou schránky nakonfigurovány. Každý záznam začíná číslem hlasové schránky (2000,
2001), dále pak pokračuje heslem účtu (1234, 5678), poté jmény uživatelů voicemailu (Filip,
Miroslav) a končí jejich e-mailovou adresou (filip.rezac@vsb.cz, miroslav.voznak@vsb.cz).
Posledním krokem je přidat několik řádek i do extensions.conf , tak, aby byly voicemaily plně funkční:
[default]
exten => 1001,1,Answer()
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()
V následujícím zápise se v aplikaci Dial () objevuje hodnota 20. Jedná se o dobu vyzvánění v
sekundách, než je uživatel volající přesměrován do hlasové schránky. V aplikaci Voicemail () je dále
uvedena proměnná u, která určuje, jaká hláška se má volajícímu přehrát při vstupu do voicemailu.
Proměnná u reprezentuje hlášku „unavaible“ (nedostupný). Dále ze může být použita proměnná b
„busy“ (obsazeno) a proměnná s, po které se pouze ozve tón ohlašující začátek nahrávání.
Poslední řádek v extensions.conf slouží k přístupu do voicemailu. Pokud si Filip nebo Miroslav
nepřečtou zprávu ve své e-mailové schránce, mohou si jí posledchnout pokud zavolají na číslo 2999.
Funkce ${CALLERID(num)} doplní automaticky číslo volajícícho,ten je přesměrován do své hlasové
schránky. Proměnná s zakazuje použitá hesla pro voicemail.
Nyní máme nakonfigurován základní voicemail a přístup k němu. Rozšířená řešení voicemailu,
jako například podpora hesel, či využití STT (Speech-to-text) modulu není součástí tohoto materiálu.
Hlasové menu (dále jen IVR) je další velice používaná služba v Asterisku. IVR (Interactive Voice
Response) umožňuje hlasovou interakci Vašeho systému s volajícími, kteří se systémem komunikují
pomocí tlačítek a tzv. DTMF volby, nebo klasicky hlasovou interakcí. Mnoho IVR poskytuje výběrové
menu pro směrování hovorů bez potřeby zásahu operátora, moderní IVR však dokážou plnit funkce
kompletních systémů a řídících součástí.
192
11 Asterisk
Asterisk obsahuje několik nahraných hlasových zpráv. Soubor s názvem marryme.gsm obsahuje
hlášku: „Will you marry me? Press 1 for yes or 2 for no.“ (Vezmeš si mě? Stiskni 1 pro ano, nebo 2
pro ne). Pokud bychom chtěli následující zprávu využít jako IVR vypadalo by to následovně:
Pokud volající zavolá na 30, Asterisk přehraje zprávu marryme.gsm. Pro IVR se používá aplikace
Backround () , kde systém čeká na odpověď od volajícího. Pokud zvolí volající číslo 1 je mu přehrána
hláška „Thank you for your cooperation“ (Děkujeme za spolupráci), pokud stiskne 2,Asterisk přehraje
hlášku „Sorry“ (Promiňte) a zavěsí.
Neplatný údaj (každý vstup, pro který není v dialplánu záznam) může být spravován pomocí
extension i. V následujícím příkladu, IVR přehraje omluvu volajícímu a zavěsí. (Skutečný IVR by měl
přesměrovat volajícího zpět do hlavního menu v případě neplatného vstupu.)
11.8.3 Pauzy
Nejjednodušší způsob, jak vytvořit pauzy je přehrání prázdných zvukových souborů. Série
tichých zvukových souborů s délkou mezi 1 a 9 sekundami lze nalézt v /var/lib/asterisk/sounds/silenc
eV následujícím příkladu je použita pauza 5 sekund:
193
11 Asterisk
Problém víceúrovňových IVR systémů spočívá v tom, že volající může zadat vstupní jednoduché
číslice několikrát za sebou, ale dostane vždy jinou odpověď v závislosti na úrovni menu. V Asterisku
mohou být čísla v daném kontextu použita pouze jednou, proto pokud chceme využívat víceúrovňové
menu, je nutné vytvořit nový kontext pro další úroveň. V následujícím příkladu přeskakujeme mezi
kontexty pomocí aplikace Goto (). Využijeme následujících fiktivních zvukových souborů, které byly
pro příklad nahrány:
Pokud bude IVR na čísle 30, prodej na čísle 100 , služby na čísle 150 a restaurace na čísle 200
bude IVR systém vypadat následovně:
[ivr]
; Menu je přehráváno stále dokola, dokud volající nevloží vstup.
;
exten => 30,1,Answer()
exten => 30,2,Background(hlavni-menu)
exten => 30,3,Background(silence/3)
exten => 30,4,Goto(2)
;
exten => 3,1,Goto(restaurace,200,1)
[restaurace]
exten => 200,1,Background(restaurace)
exten => 200,2,Background(silence/3)
exten => 200,3,Goto(1)
Teoreticky je možné vytvářet nekonečný počet úrovní menu, ale z praktické zkušenosti volající
většinou hovor ukončí po třetím menu.
11.9 DAHDI/ZAPTEL
U analogových karet, se kterými se můžete ve Vašich počítačích setkat, rozeznáváme dva typy
portů. FXS (Foreign eXchange Subscriber) pro připojení analogového přístroje a port FXO ( Foreign
eXchange Office) pro připojení k nadřazené ústředně. Z pohledu konfiguračních souborů Asterisku je
jejich označení přesně opačné, neboť se zde udává signalizace, nikoliv typ portu. Typ portu je dán
osazeným hardwarovým modulem.
span=1,1,0,ccs,hdb3,crc4 # span, zdroj hodiny, délka vedení, typ rámce, kód (,crc4)...
mtp2=1 # ..(zdroj hodin 0-vždy master, 1-slave (bez hodin - master), 2, 3
bchan=2-31 # konfigurace SS7 přenašeče
echocanceller=mg2,2-31
span=2,0,0,cas,hdb3
195
11 Asterisk
cas=32-46:1101
hardhdlc=47 # konfigurace CAS - R2 přenašeče
cas=48-62:1101
echocanceller=mg2,32-46,48-62
span=3,0,0,ccs,hdb3,crc4
bchan=63-77,79-93 # konfigurace ISDN PRI přenašeče
hardhdlc=78
echocanceller=mg2,63-77,79-93
Konfigurační soubor Asterisku pro konfiguraci kanálu Asterisku DAHDI, tedy karet Digium a jim
kompatibilních. Konfigurace a přidružení kanálů již závisí na definici system.conf. Syntaxe tohoto
souboru je následující. Nejprve jsou nastaveny jednotlivé parametry (ze zvyklosti se používá znak = ).
Poté zápisem channel => číslo kanálu se provede zápis těchto parametrů pro daný kanál či kanály.
Následně můžeme parametry změnit dalšími přiřazeními a povést nový zápis pro jiné kanály.
[trunkgroups]
[channels]
196
11 Asterisk
language=cz
context=kontext1 ; kontext
signalling=fxo_ks ; signalizace FXS
callerid="731" <731>
usecallerid=yes
echocancel=yes
Peering slouží k logickému propojení dvou ústředen stejného typu. V případě, že volám na číslo,
které se nenachází v mé databázi (není registrované na moji ústřednu a není definováno v sip.conf
nebo iax.conf), ale vím, že se nachází na ústředně sousední, mohu využít této funkce a vyvolat
patřičný extension z této ústředny sousední. Jako první ústřednu použijeme tu, kterou jsme si
vytvořili v prvních bodech, včetně nastavení SIP protokolu. U druhé budeme postupovat podobně,
akorát zvolíme jiná čísla účtů. Tedy nastavení sip.conf druhé ústředny:
[general]
context=Asterisk2
port=5060
udpbindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=alaw
allow=gsm
allow=ulaw
allow=h261
allow=h263
allow=h263p
allow=h264
[201]
type=friend
context=Asterisk2
language=cz
host=dynamic
username=201
197
11 Asterisk
secret=201
callerid=201 <201>
[202]
type=friend
context=Asterisk2
language=cz
host=dynamic
username=202
secret=202
callerid=202 <202>
Podobným způsobem, jako u první ústředny, také potřebujeme vytvořit (resp. upravit) soubor
extensions.conf, abychom zajistili základní spojení v rámci ústředny:
[general]
static=yes
writeprotect=no
[macro-hovor]
exten => s,1,Dial(${ARG1})
exten => s,2,Congestion
exten => s,3,Hangup
[Asterisk2]
exten => _201,1,Macro(hovor,SIP/201)
exten => _202,1,Macro(hovor,SIP/202)
Ke spojení ústředen bude využit protokol IAX. Nyní je potřeba na každé z ústředen vytvořit účet
ústředny sousední. Parametry tohoto účtu se definují opět v souboru iax.conf. Pro lepší představu je
použitá topologie, včetně o adresování ústředen uvedena na obr. 11.4.
Do konfigurace souboru iax.conf první ústředny (Asterisk1) je tedy potřeba vytvořit účet pro
protější ústřednu (Asterisk2):
198
11 Asterisk
[Asterisk1]
type=friend
username=Asterisk2
secret=peer
auth=plaintext
host=10.0.0.1
context=IAXpeer
peercontext=IAXpeer
qualify=yes
trunk=yes
Nyní je ovšem také potřeba upravit číslovací plány na jednotlivých ústřednách, aby v případě
„neznámého“ čísla došlo k přeposlání žádosti k výstavbě spojení na ústřednu druhou. Tedy v případě
Asterisk1:
[general]
static=yes
writeprotect=no
[macro-hovor]
exten => s,1,Dial(${ARG1})
exten => s,2,Congestion
exten => s,3,Hangup
[Asterisk1]
exten => _101,1,Macro(hovor,SIP/101)
exten => _102,1,Macro(hovor,SIP/102)
exten => _201,1,Macro(hovor,IAX2/Asterisk2/${EXTEN}) ;Rozšíření ;našeho defaultního ;contextu,
v případě, ;že volám na čísla ;registrované na druhé ;ústředně, kde ;prostřednictvím našho ;IAX účtu
vyvolám ;patřičný EXTEN na ;ústředně Asterisk2
exten => _202,1,Macro(hovor,IAX2/Asterisk2/${EXTEN})
[general]
static=yes
writeprotect=no
[macro-hovor]
exten => s,1,Dial(${ARG1})
exten => s,2,Congestion
exten => s,3,Hangup
[Asterisk2]
exten => _201,1,Macro(hovor,SIP/201)
exten => _202,1,Macro(hovor,SIP/202)
exten => _101,1,Macro(hovor,IAX2/Asterisk1/${EXTEN})
exten => _102,1,Macro(hovor,IAX2/Asterisk1/${EXTEN})
[IAXpeer]
exten => _201,1,Macro(hovor,SIP/201)
exten => _202,1,Macro(hovor,SIP/202)
Od verze 1.8 je obsaženo v základní distribuci a SRTP je možné využívat, v dřívějších verzích je
nutné doinstalovat zvlášť.
[201]
type=friend
context=Asterisk2
language=cz
srtpcapable=yes
host=dynamic
*** atd ***
Dále upravíme dialplan v /etc/asterisk/extensions.conf tak, že nastavíme použití SRTP jak pro
příchozí, tak pro odchozí volání.
200
11 Asterisk
K zabezpečení SIP protokolu využijeme open source SSL/TLS knihovny – openssl. V první řadě
je tedy potřeba ji nainstalovat, kde opět využijeme samoinstalačních balíčků:
Samotný postup lze rozdělit do několika kroků. V první řadě je potřeba si pomocí aplikace
openssl vygenerovat vlastní certifikační autoritu (CA). Začneme tedy vygenerováním 4096 bitového
klíče a vytvořením této CA. Tuto naši CA bude ve velkém množství případů potřeba nainstalovat na
naší pracovní stanici nebo telefonu.
Po vygenerování vlastní CA je potřeba vytvořit certifikát serveru a podepsat jej naší CA. Opět
začneme vygenerováním klíče, tentokrát však pouze 1024 bitového, pokračujeme vygenerováním
certifikátu a v poslední řadě jeho podpisem. Při generování certifikátu serveru je nutné zadat do
položky Common Name doménové jméno vašeho SIP serveru (Asterisku), popř. jeho IP adresu.
Asterisk potřebuje ke správné funkcionalitě SIP zabezpečení mít, jak klíč (key.pem), tak samotný
certifikát serveru (asterisk.crt) v jednom souboru. Proto v kořenovém umístění aplikace Asterisk
vytvoříme adresář s názvem např. cert a v něm do souboru, který pojmenujeme, jako asterisk.pem
zkopírujeme náš klíč a certifikát serveru.
Nyní na ústředně v konfiguračním souboru SIP protokolu (sip.conf) potřebujeme povolit TLS
šifrování a nastavit cestu k našemu souboru s klíčem a certifikátem serveru (asterisk.pem) a u
vytvořených účtů povolíme pouze šifrovaný přenos:
[global]
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/cert/asterisk.pem
[101]
transport=tls
[102]
transport=tls
Jednou z pokročilých služeb, které můžeme s Asteriskem využít, jsou propojení komunikačního
systému s kalendářem, čili chování Asterisku bude ovlivňovat stav uživatele v kalendáři [mik].
Výhody využívaní kalendářů je několik, od rychlého vyhledávání v obsahu, sdílení na webu až po
synchronizaci s jinými kalendáři a aplikacemi jak v PC, tak v mobilních zařízeních. Nejpoužívanějšími
protokoly pro kalendáře jsou CalDAV a Exchange Web Service. Právě tyto protokoly jsou rovněž
podporovány Asteriskem v jeho kalendářovém modulu. Spárování Asterisku s kalendářem nám
umožní následující funkce:
202
11 Asterisk
Protože Davical využívá pro správu dat databázi PostgreSQL je nutné ji stáhnout a
nakonfigurovat.
V databázi se nám vytvořil uživatel s názvem postgres, kterému musíme nastavit heslo.
# su postgres
# nano /etc/postgresql/8.4/main/pg_hba.conf
# /etc/init.d/postgresql restart
203
11 Asterisk
# /usr/share/davical/dba/create-database.sh/etc/init.d/postgresql restart
nano /etc/apache2/sites-enabled/000-defaul
# /etc/init.d/apache2 restart
Pokud bychom se přihlásili na Davical server, zjistili bychom, že vyžaduje editaci. Proto je
potřebné vykonat ještě poslední editaci přes příkazový řádek.
# nano /etc/davical/192.168.209.130-conf.php
<?php
// $c->domain_name = "calendar.example.net";
// $c->sysabbr = 'DAViCal';
// $c->admin_email = 'admin@example.net';
// $c->system_name = "Example DAViCal Server";
// $c->enable_row_linking = true;
$c->pg_connect[] = 'dbname=davical port=5432 user=davical_app';
?>
Nyní se konečně můžeme přihlásit na náš kalendářový server webovým prohlížečem na adrese
http://192.168.209.130, kde se přihlásíme jako uživatel admin a heslem vygenerovaným během
204
11 Asterisk
instalace. V tomto grafickém prostředí si vytvoříme kalendář, který bude sledovaný Asteriskem
pomocí User functions Create Principal a použijeme níže uvedené nastavení.
Zadáme požadované přihlašovací údaje pro přístup ke kalendáři: asterisk / asterisk, pokud by
Sunbird přihlášení nevyžadoval a nespojil se s kalendářem, použijeme URL kalendáře ve tvaru:
Location:
http://asterisk:asterisk@192.168.209.130/caldav.php/asterisk/home/
Nyní nastavíme Asterisk, aby mohl číst a zapisovat do vytvořeného kalendáře asterisk na caldav
serveru. Na straně Asterisku editujeme soubor calendar.conf.
# nano /etc/asterisk/calendar.conf
[asterisk]
type = caldav
url = http://192.168.209.130/caldav.php/asterisk/home/
user = asterisk
secret = asterisk
refresh = 1
205
11 Asterisk
# /etc/init.d/asterisk restart
Pokud máme v kalendáři v daném čase poznačenou schůzku, objeví se status busy. V této
kapitole jsme si ukázali instalaci a nastavení kalendáře.
Pokud tedy zavoláme na pobočku dostupnost a účastník bude dle kalendáře dostupný, půjde
hovor na pobočku alice, pokud dostupný nebude, hovor půjde na pobočku bob.
Asterisk umí také do kalendáře zapisovat, jako příklad vytvoříme jednoduché logování hovorů.
Pokud dojde k vytočení pobočky log, volá se pobočka alice a po skončení hovoru se do kalendáře
zapíše, kdo a jaký časový interval volal. Tento log si můžeme zkontrolovat v kalendářovém klientu
Sunbird po reloadu.
206
11 Asterisk
same =>h,n,Set(CALENDAR_WRITE(asterisk,summary,start,end)=Volal
${CALLERID(all)},${start},${end})
Pro přehrání informací je třeba nainstalovat na server Text To Speech aplikaci. Asterisk nativně
podporuje aplikaci Festival, ve které najdeme i částečnou českou lokalizaci. Provedeme tedy
instalaci této aplikace.
# nano /usr/share/festival/festival.scm
;; Enable access to localhost (needed by debian users)
(set! server_access_list '("localhost\\.localdomain" "localhost"))
;;(set! voice_default 'voice_pc_diphone)
(require 'czech)
(require 'czech-unisyn)
(set! inhibit-initial-pauses t)
;; (voice_czech_ph)
(set! voice_default 'voice_czech_ph)
;;; Command for Asterisk begin
(define (tts_textasterisk string mode)
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))
;;; Command for Asterisk end
207
11 Asterisk
# nano /etc/asterisk/festival.conf
[general]
host=localhost
port=1314
usecache=yes
cachedir=/var/cache/asterisk/festival/
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n
Pro správné čtení české diakritiky je ještě třeba nastavit české locale pro jazyk. Editujte
následující soubor dle návodu a poté provést reboot serveru.
# nano /etc/asterisk/extensions.conf
exten => schuzky,1,Answer
same => n,Set(id=${CALENDAR_QUERY(asterisk,${EPOCH},$[${EPOCH}+24*60*60])})
same => n,Set(num=${CALENDAR_QUERY_RESULT(${id},getnum)})
same => n,Set(i=1)
same => n,Festival("Plán na dalších 60 minut je následující")
same => n,Festival(Celkový počet schůzek je ${num})
same => n,While($[${i} <= ${num}])
same => n,Festival(schůzka číslo ${i} má začátek)
same => n,SayUnixTime(${CALENDAR_QUERY_RESULT(${id},start,${i})},,Q 'digits/at' IMp)
same => n,Festival(a konec je v)
same => n,SayUnixTime(${CALENDAR_QUERY_RESULT(${id},end,${i})},,IMp)
same => n,Festival(místo schůzky je: ${CALENDAR_QUERY_RESULT(${id},location,${i})})
same => n,Festival(Schůzka je zapsána v kalendáři:
${CALENDAR_QUERY_RESULT(${id},calendar,${i})})
same => n,Festival(Obsah schůzky je: ${CALENDAR_QUERY_RESULT(${id},summary,${i})})
same => n,Set(i=$[${i} + 1])
same => n,EndWhile
Nyní vložíme přes Sunbird do následující hodiny schůzku, uložíme ji do vzdáleného kalendáře
Asterisku. Poté zavoláme pobočku schůzky a Asterisk nám přečte, co jsme do obsahu schůzky
uložili.
208
11 Asterisk
# nano /etc/asterisk/extensions.conf
[calendar_event_notify]
exten => s,1,Answer
same => n,Festival(za 10 minut máte schůzku\, která se koná v ${CALENDAR_EVENT(location)}\,
obsahem schůzky je ${CALENDAR_EVENT(description)}\, nashledanou)
same =: n,Hangup
# nano /etc/asterisk/calendars.conf
[asterisk]
type = caldav
url = http://192.168.209.130/caldav.php/asterisk/home/
user = asterisk
secret = asterisk
refresh = 1
timeframe = 60
autoreminder = 10
channel = SIP/alice
context = calendar_event_notify
extension = s
Nyní si posuneme začátek schůzky v kalendáři tak, aby začínal za 12 minut od aktuálního času a
za 2 minuty můžeme očekávat hovor na pobočce Alice o blížící se schůzce včetně popisu lokace a
obsahu schůzky.
XMPP protklo využívá např. Jabber a používá se především pro služby Presence a Instant
Messaging [mik]. Tento protokol je založen na jazyku XML a umožňuje výměnu textových zpráv
anebo informaci o aktuální činnosti uživatelů, tedy podobně jako aplikace ICQ, MSN, Skype či AIM.
Jednou z aplikací, která nabízí funkce XMPP serveru je Openfire. Jedná se tedy o server
poskytující služby online výměny zpráv obdobně jako Instant Messaging (IM). Vlastní XMPP sever
přináší řadu výhod a pro nás je podstatné, že můžeme propojením Asterisku a XMPP serveru
sledovat status uživatelů a podle toho směrovat na ně volání. Správa těchto uživatelů může být
zajištěna LDAP serverem. Openfire rovněž podporuje tvorbu chatovacích místností a může sloužit
jako brána do ostatních sítí pro online výměnu zpráv jako např. do ICQ. Výhodou vlastního IM
(Instant Messaging) systému ve spolupráci s Asteriskem přináší možnost reagovat na status
209
11 Asterisk
uživatele (např. automatická odpověď v případě nepřítomnosti). Asterisk se přihlásí na tento server
jako klient, může zasílat zprávy, přijímat odpovědi, v reálném čase získávat stavy dalších uživatelů
na serveru a patřičně řídit dle těchto informací pravidla směrování.
Než si ukážeme spolupráci Asterisku a XMPP serveru, musíme si jej nejprve nainstalovat
a nakonfigurovat. Instalaci provedeme z balíčku, který si stáhneme.
# mkdir /usr/src/openfire
# cd /usr/src/openfire/
# sudo wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_3.7.0_all.deb
Openfire vyžaduje java6-jre, ten ale není běžnou součástí systému a proto rozšíříme
prohledávané repozitáře o další zdroj a instalujeme.
# cd /usr/src/openfire
# dpkg –idownloadServlet\?filename\=openfire%2Fopenfire_3.7.0_all.deb
# /etc/init.d/openfire start
# su postgres
# createuser openfire
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
postgres@server:/root$ createdb openfire
postgres@server:/root$ psql openfire
openfire=# ALTER USER openfire with password 'openfire';
openfire=# ALTER DATABASE openfire OWNER TO openfire;
Pro účely testování zvolíme dva Instant Messaging (IM) klienty s podporou XMPP protokolu.
Prvním je populární Pidgin, jedná se multiplatformní aplikaci dostupnou pro Windows, Linux a Mac
OS X, podporuje řadu komunikačních protokolů a hlavně XMPP. Druhým použitým IM klientem je
Spark. XMPP klient Spark umožňuje i uskutečnění hovoru na uživatele, kteří mají na Openfire
serveru přiřazené číslo pobočky (extension) z Asterisku. Pidgin je možné stáhnout ze stránek
http://www.pidgin.im . Po instalaci zvolíme: Účty>Spravovat účty>Přidat a nastavíme následující
parametry:
Protokol: XMPP
Meno: alice
Doména: 192.168.209.130
Heslo: alice
Vytvořit tento účet na serveru: ANO
Po přidání uživatele v Pidgin se nám zobrazí výzva na autorizaci ze strany serveru a vyplníme
následující údaje:
Username: alice
Full name: alice
Email: alice@localhost
Password: heslo
211
11 Asterisk
Následně v aplikaci Pidgin účet aktivujeme a server si od nás ještě jednou vyžádá heslo k účtu,
které si bude Pidgin již pamatovat.
Stejně jako u klienta Pidgin, musíme nakonfigurovat rovněž klienta Spark. Je k dispozici na
stránkách společnosti: http://www.igniterealtime.org/. Po stažení programu a jeho instalaci vytvoříme
nový účet pomocí Accounts, kde vyplníme následující údaje:
Username: bob
Password: heslo
Confirm Password: heslo
Server: 192.168.209.130
Měli bychom následně obdržet potvrzení: New account has been created. Přihlašovací údaje se
nám vyplní automaticky a zvolíme Login. Nyní si přidáme uživatele Alice jako kontakt: Contact>Add
Contact>UserName: Alice. Alice (XMPP Pidgin) obdrží výzvu k autorizaci Boba (XMPP Spark), což
potvrdíme. Teď máme nainstalovaný náš XMPP server a k němu zaregistrované dva uživatele Alice
a Bob prostřednictvím XMPP klientů Pidgin a Spark.
Spojení Openfire a Asterisku umožňuje kontrolovat, který uživatel právě hovoří a není tak plně
dostupný k online komunikaci. Jeho stav XMPP klienta se během hovoru změní na „On Phone“.
Zároveň je možné uživateli Openfire severu přiřadit pobočku z Asterisku a tímto uživatele přímo volat
z XMPP klienta Spark bez znalosti čísla přiřazené pobočky. Pokud se Asterisk přihlásí k XMPP
serveru jako uživatel, je schopen číst stavy spřátelených účtů, psát jim zprávy a přijímat jejich
odpovědi. Na základě těchto funkcí může při-způsobovat své chování.
Vzájemné propojení Asterisku s Openfire serverem probíhá přes AMI (Asterisk Manager
Interface). Na straně Asterisku je třeba přístup povolit a vytvořený účet nastavit do Asterisk-IM
modulu na Openfire serveru. Zde je také nastaveno přiřazení čísla pobočky každému z uživatelů.
Dále je zapotřebí přihlásit Asterisk k XMPP serveru jako uživatele. Nastavení se provádí v souboru
/etc/asterisk/jabber.conf, kde nastavíme běžné údaje k přihlášení k XMPP serveru jako adresa XMPP
serveru, port, status, apod. Důležitá je položka buddy, která určuje spřátelené účty, které bude
Asterisk žádat o autorizaci a které bude poté schopen sledovat. Typickým využitím je informování
uživatele o příchozím hovoru v okně XMPP klienta a následné směrování hovoru na základě jeho
odpovědi také v tomto okně. Konfigurace v /etc/asteris/extensions.conf bude následující.
Další zajímavou funkcí je směrování hovoru na základě aktuálně nastaveného stavu v XMPP
klientu. Stavy, které XMPP server používá jsou následující:
Přítomen
Volný k hovoru (Free to chat)
Pryč
Pryč na dlouho
Nerušit
Offline
Odhlášen
Celkem tedy máme 7 stavů, podle kterých můžeme měnit chování ústředny. Příkladem je
jednoduchý skript, který rozlišuje, zdali je uživatel online (stav 1-5) nebo offline (stav 6-7) a podle
toho směruje hovor buďto přímo na uživatele nebo do hlasové schránky. O tomto faktu informuje
volajícího do okna XMPP klienta.
213
11 Asterisk
exten =>555,1,Set(STATUS=${JABBER_STATUS(asterisk,alice@IP_SERVERU)});
exten => 555,2,gotoif($[$[${STATUS}] < 6]?3:10)
exten=>555,3,Dial(SIP/101)
exten =>
555,10,jabbersend(asterisk,${CALLERID(name)}@IP_SERVERU,Ahoj,${CALLERID(name)}, volana
pobočka ${EXTEN} neni dostupna! Smeruji do hlasove-schranky.)
exten => 555,11(unavailable),Dial(SIP/102)
Jako souhrn většiny funkcí byl vytvořen prezenční skript. Cílem tohoto skriptu je směrovat hovor
na základě stavu v kalendáři, XMPP klientu a podle reakce uživatele v okně XMPP klienta. Skript
funguje následovně. Uživatel Bob má veřejnou pobočku pro celou kancelář, svoji privátní linku,
voicemailovou schránku a asistentku Alici, která má také svou privátní linku. Asterisk sleduje Bobův
stav v kalendáři a XMPP klientu. Pokud nemá žádnou schůzku v kalendáři (stav free) a je online,
dostane zprávu do okna XMPP klienta o tom, že mu volá konkrétní uživatel a on má možnost tento
hovor akceptovat nebo předat na asistentku. Pokud hovor příjme, má 30s na vyzvednutí hovoru,
jinak hovor skončí v hlasové schránce. Pokud není Bob dostupný díky kalendáři nebo XMPP klientu,
hovor je směrován na Alici na její privátní pobočku. U Alice se zjišťuje, zdali je přítomna v práci (je
online v XMPP klientu). Pokud ano, zvoní je telefon a má 30s na vyzvednutí hovoru, jinak hovor
končí Bobovi v hlasové schránce. Kompletní schéma chování prezenčního skriptu včetně propojení s
kalendářem a XMPP serverem dle výše uvedeného popisu je zobrazeno na obr. 11.8.
BOB ALICE
Kalendář Ne
dostupný?
Ano
Ne
Ne
XMPP online? XMPP online?
Ano Ano
Vyzvánění Ne Vyzvánění
30s Ne 30s
HLASOVÁ
Přijetí hovoru SCHRÁNKA Přijetí hovoru
J J
Obr.11.8 Schéma chování prezenčního skriptu
214
11 Asterisk
Níže následuje výpis inkriminované části direktiv a volání funkcí ve skriptu v extensions.conf.
Přímé volání účastníka bez znalosti jeho telefonního čísla. V XMPP klientu Spark je možné,
pokud má uživatel v systému přidělenou pobočku, přímo volat daného účastníka. Po zvolení tlačítka
volat ústředna nejprve zavolá volajícímu a po vyzvednutí hovoru dochází ke spojení s požadovanou
pobočkou. Uživatel je v okně obeznámen, že má příchozí hovor a je mu nabídnuta možnost volby
směrování na cílové pobočky. Na základě jeho číselné odpovědi je hovor směrován na jednu z
nabízených poboček. Protokol XMPP je schopen nastavit až 7 různých stavů. Dle těchto stavů se
mění chování Asterisku a hovory se směrují na různé pobočky. Výše uvedený Prezenční skript
představuje modelovou situaci vedoucího, který má asistentku a pokud přichází hovor na vedoucího,
Asterisk zkontroluje jeho stav v kalendáři a XMPP klientu, pokud je dostupný, přijde mu zpráva o
příchozím hovoru a může se rozhodnout, zda-li hovor příjme, pokud není jakákoliv podmínka
splněna, hovor přechází na asistentku, zkontroluje se její stav v XMPP klientu, a hovor je směrován
buď na ni nebo do hlasové schránky.
215
12 Kamailio
12 Kamailio
Kamailio má kořeny v open-source projektu SER (SIP Express Router), který byl vyvinut
v Berlíně ve výzkumném institutu FhG Fokus v roce 2002, byly tím položeny základy kódu jedné
z nevýkonnějších SIP Proxy a řada dalších se v SER inspirovala [igl]. Část týmu přesunula i se
značkou SER do nově založené komerční společnosti iptel.org a jiná část založila v roce 2005
nekomerční opensource projekt OpenSER, tyto části vývojářů pracovaly odděleně.
Kvůli sporům o obchodní značku SER se OpenSER v roce 2008 přejmenoval na Kamailio a
rovněž byla ještě v témže roce vytvořena další větev s názvem OpenSIPS. Následně o několik
měsíců se týmy vývojářů Kamailia a SER dohodly na vzniku projektu SIP Router, který by měl
sjednotit Kamailio a SER.
216
12 Kamailio
Možnosti využití Kamailia jsou rozsáhlé, jedná se o velice výkonnou SIP Proxy, která dokáže
zpracovat stovky tisíc požadavků za sekundu, může rovněž fungovat jako SBC, Presence server či
registr ar anebo jako malá PBX a konkurovat Asterisku. Výhodou je interoperabilita se SIP klienty a
neskutečné možnosti adaptace, čili s určitým úsilím lze integrovat i SIP UA, kteří obsahují
neočekávané vlastnosti.
Nevýhodou je malý rozsah aplikací např. oproti Asterisku, což je dáno tím, že se nejedná o
B2BUA ale SIP Proxy a složitost vynucování kodeků, síla Kamailia je především ve zpracování SIP
signalizace. Kamailio má rovněž odlišný přístup ke konfiguraci než Asterisk, protože konfigurační
soubor Kamailia je skript vyžadující znalosti jazyka C. Neřídí se aplikační logika ale přímo flow SIP
zpráv, je zde možnost nahrávání modulů, lze použít různé DB moduly. Kamailio podporuje iIPv6, TLS,
NAT, skriptovací jazyky Perl, Python, Lua a databáze MySQL, PostgreSQL, UnixODBC, Berkeley DB,
Oracle [roz], [gon].
Funkce skriptů
217
12 Kamailio
Speciální proměnné
Parametry modulů
Managementové funkce
Podporovaných modulů je celá řada, viz. obr 12.4, zmíníme si pouze ty nejdůležitější. Jednak
jsou zde základní moduly kex (sada funkcí), corex (další sada funkcí), tm (pro obsluhu transakcí),
tmx (rozšířený modul obsluhy transakcí), sl (stateless module), rr (Record-Route a Route module),
pv (Modul pseudoproměnných) , maxfwd (Max-Forward processor module) a dialog (modul pro
podporu dialogů).
Obr.
12.4 Moduly Kamailia
Nejdříve ověříme pomocí apt-cache search kamailio , že balíček existuje a o kterou verzi se
jedná apt-cache show kamailio .
Pokud by balíček nebyl dostupný, tak si stáhneme a přidáme Kamailio GPG key do apt key
seznamu, potom do /etc/apt/sources.list odkazy do repozitáře Kamailia pro danou verzi, např. lenny.
Teď můžeme spustit Kamailio server /etc/init.d/kamailio start, který poběží s výchozí konfigurací.
Kamailio lze ovládat pomocí shell skriptu kamctl, např. přidávat další uživatele pomocí kamctl
add <username> <password>, restartovat kamct restart, vypisovat stavy přes kamctl monitor, atd.
Provedeme vypsání online uživatelů kamctl ul show. .
Methods:: 4294967295
Ruid:: uloc-52c369d3-b07-1
Reg-Id:: 0
Last-Keepalive:: 1388540618
Last-Modified:: 1388540618
root@debian119:~#
Kamailio běží a můžeme registrovat klienty a provést hovor, viz. obr. 12.5, ve kterém je odpověď
s 200 OK na žádost INVITE zachycená na SIP PROXY (Kamailio běží na 192.168.1.119) a obsahuje
v poli Via záznamy, podle kterých je tato odpověď směrována, rovněž vidíme, že Kamailio vložilo do
zprávy pole Record-Route vyžadující zasílání veškerých zpráv v dialogu přes tuto SIP Proxy.
221
13 Aspekty kvality IP telefonie
Existují různé typy řešení a návrhy architektur, které zavádějí úrovně kvality služeb a seřazují
datové jednotky přicházejícího provozu podle priorit. Kvalita služeb v referenčním modelu počítačové
sítě může být implementována v různých vrstvách. Nejčastěji se používá implementace na úrovni
linkové (802.1.p – pole User priority v VLAN značce 802.1Q) nebo síťové vrstvy (DSCP kód v ToS).
Při implementaci na úrovni IP protokolu existuje několik metod, avšak dva nejčastější způsoby řešení
jsou Integrované služby (Integrated Service, IntServ) a Diferencované služby (Differentiated services,
DiffServ).
Kvalitou služby (QoS) rozumíme schopnost sítě poskytovat lepší zacházení vybranému síťovému
provozu při použití různých technik pro přenos dat. Internet byl vybudován s cílem poskytovat
přenosovou službu bez zajištění parametrů spojení. V současnosti se však velice rychle rozvíjí
aplikace pracujících v reálném čase, jako jsou například videokonferenční hovory nebo IP telefonie.
A právě pro tyto síťové aplikace je třeba klást velký důraz na zajištění kvality, neboť každá z těchto
aplikací má vlastní specifické požadavky na přenos sítí. Na základě těchto požadavků proto
byly definovány tyto základní QoS parametry:
222
13 Aspekty kvality IP telefonie
Každý typ provozu je citlivější na jiný parametr, proto je důležité síťový provoz třídit a následně
zajišťovat specifickou kvalitu služeb pro konkrétní třídy. Hlavním úkolem QoS je tedy minimalizovat
nežádoucí vlastnosti přenosu a snažit se zajistit požadované hodnoty QoS parametrů. Toho lze však
dosáhnout pouze za podpory všech síťových prvků podílejících se na přenosu.
13.2 IntServ
Nejprve musí aplikace definovat charakter odesílaných dat a také požadavky na síťové zdroje.
Síť poté použije směrovací protokol pro nalezení vhodné trasy, která umožní uspokojení požadavků
uživatelské aplikace. Následně je použit rezervační protokol pro vytvoření tzv. rezervačního stavu,
který zajištuje garanci síťových zdrojů na všech zúčastněných uzlech podél celé trasy. Je tedy
nutné vyjednat, zda jsou všechny prvky sítě schopné garantovat požadované parametry přenosu..
Jestliže poskytnuté síťové zdroje nejsou na některém z uzlů dostačující, spojení bude odmítnuto a
zdrojová aplikace se může rozhodnout, zda se spokojí s mírnějšími požadavky, nebo odloží přenos.
Pokud je však proces rezervace jednou schválen a řádně dokončen, aplikace může začít vysílat
svoje data po rezervované trase.
K zajištění informovanosti prvků sítě a tím pádem k rezervaci prostředků v síti slouží u
mechanizmu IntServ tzv. rezervační protokoly. V praxi je používán především protokol RSVP
(Resource Reservation Protocol). RSVP protokol poskytuje mechanizmus pro vytváření a správu
rezervačního stavu podél celé trasy mezi zdrojem a cílem datového toku. Samotné rozhodnutí,
která trasa bude pro přenos dat vybrána, je však provedeno směrovacím protokolem.
Referenční model technologie IntServ je možné rozdělit na dvě základní části - řídící rovinu a
datovou rovinu. Řídící rovina zajišťuje proces rezervace síťových zdrojů a datová rovina provádí
předávání datových paketů na základě vytvořeného rezervačního stavu. Hlavními bloky
referenčního modelu IntServ, viz. obr. 13.1, jsou:
Protokol RSVP zajišťuje rezervací zdrojů na trase pomocí dvou klíčových typů zpráv:
PATH, odesíláno stranou inicializující spojení, popisuje vlastnosti provozu, jako objekty
jsou tyto informace ukládány v každém uzlu trasy spojení,
RESV, odesílá vzdálená strana příjemce zpět straně inicializující spojení zprávy, zpráva
obsahuje datové objekty identifikující požadavky na zdroje (kvalitu služby).
13.3 DiffServ
DiffServ oproti IntServ používá odlišný způsob zajištění kvality služeb v IP sítích. Základní
myšlenka je velmi jednoduchá. Jednotlivé datové toky jsou sdruženy do několika tříd podle
224
13 Aspekty kvality IP telefonie
základního charakteru služeb, takže síťové prvky (s výjimkou hraničních) se nemusí starat o každý
datový tok zvlášť]. Každý IP paket vstupující do datové sítě je označen značkou, která říká, jak
má být s paketem zacházeno - neboli určuje třídu přenosu poskytnutou paketu. Toto značení
paketů probíhá pouze na vstupu do datové sítě. Během přenosu paketů datovou sítí další
směrovače pouze přečtou značku každého paketu a dle této značky se řídí při zacházení s
paketem. Značka je uložena přímo v hlavičce IP paketu, takže není potřeba žádný signalizační
protokol pro vytvoření rezervačního stavu. Dále, jelikož je síťový provoz sdružován a následně
zpracováván v rámci tříd, odpadá potřeba složitého třídění a plánování síťových zdrojů pro
jednotlivé datové toky, jako je tomu u IntServ.
Edge Router - hlavní směrovač leží mezi dvěma DS doménami nebo na rozhraní mezi DiffServ
doménou a částí sítě, která nepodporuje mechanizmus DiffServ. Tento směrovač tedy provádí
klasifikaci vstupních toků a následné označování paketů, které jsou pak dále posílány do
DiffServ domény.
Core Router - páteřní směrovač se nachází uvnitř DiffServ domény. Nároky na tento prvek
jsou podstatně menší v porovnání s hraničním směrovačem. Páteřní směrovač neprovádí žádnou
klasifikaci paketů, zajišťuje pouhé předávání označených paketů a garantuje určitou kvalitu služby
definovanou značkou v hlavičce paketu.
225
13 Aspekty kvality IP telefonie
V rámci každé DS domény musí být jasně definována úroveň služby, kterou může koncový
uživatel očekávat od sítě, respektive od ISP. K tomuto účelu slouží dohoda o úrovni poskytované
služby Service Level Agreement (SLA). Dohoda SLA je aplikována na rozhraních mezi uživatelem
a DS doménou nebo dvěma DS doménami spravovanými různými ISP a jasně vymezuje povolené
profily síťového provozu, podmínky zacházení s datovými toky, konkrétní síťové parametry pro
jednotlivé třídy provozu atd.
Referenční model technologie DiffServ je definován v RFC 2475, model diferencovaných služeb
se skládá z několika bloků, viz. obr. 13.3 a je možné jej rozdělit na dvě základní části. Na část
klasifikace, kde probíhá měření a značkování a část pro úpravu provozu (zacházení), která na
základě parametrů provozu a značek přidělených jednotlivým paketům rozhoduje o jejich dalším
zpracování.
Třídič (Classifier) provádí identifikaci přicházejících paketů a jejich následné dělení do několika
skupin podle předem definovaných pravidel.
Měřič (Meter) provádí měření pro každý datový tok od zákazníka a poté výsledky porovná
s konkrétním datovým profilem.
Tvarovač (Shaper) má za úkol přenést datový tok do souladu se sjednaným datovým profilem.
Rozdíl mezi tvarovačem a značkovačem je v tom, že značkovač jednoduše označí paket a nechá jej
projít do sítě. Zatímco tvarovač zabrání paketům projít sítí do té doby, dokud se datový tok
nepřizpůsobí danému profilu. Tvarování je méně náročná forma zacházení s pakety než značení.
Stejně jako přeznačení, tak i tvarování je důležité v hraničním uzlu mezi dvěma DiffServ doménami.
226
13 Aspekty kvality IP telefonie
Zahazovač (Dropper) realizuje jednodušší metodu zpracování paketů než tvarovač. Příchozí
pakety, které nevyhovují jejich definovanému profilu provozu, jsou vyřazeny z provozu jejich
zahozením. Proto zahazovač nepotřebuje vyrovnávací paměť.
Značkovač (Marker) přiděluje každému toku dat určitou značku, která definuje způsob, jak se s
ním bude zacházet v síti – tzv. Per Hop Behavior index (PHB index). Jsou definovány tři typy PHB:
Expedited Forwarding nabízí absolutní záruku velikosti kolísání zpoždění pro danou třídu
provozu. Tento typ je proto velmi složitý na zajištění a tím pádem neefektivní. Poskytnutí EF danému
toku znamená vyhrazení téměř všech síťových prostředků pro tento tok, což pak vede k
neefektivnímu využívání prostředků sítě. Urychlené doručení je tedy možné používat pouze v
omezené míře.
Služba Assured Forwarding je navržena tak, aby zajistila přenos garantovanou rychlostí. AF
zajišťuje nižší garance QoS než EF a používá se především pro transportní protokol TCP. AF
pracuje na základě stanovení priorit pro různé kategorie provozu.
Best Effort představuje základní službu, která je vhodná pro přenos dat nenáročných na
zajištění QoS parametrů. U služby BE není žádná garance QoS, síť se pouze snaží doručit pakety
nejlepším možným způsobem s využitím aktuálně dostupných síťových prostředků.
0 1 2 3 4 5 6 7
DSCP unused
227
13 Aspekty kvality IP telefonie
dané DS domény . Pro dosažení stejné úrovně zacházení v rámci konkrétního PHB je tedy možné
použít různé fyzické implementace metod řízení front a plánování odesílání paketů.
Velikost DSCP je 6 bitů, první 3 bity odpovídají IP Precedenci. Pole v IP hlavičce, které
umožňuje rozlišení provozu do několika tříd, nutných pro odlišný způsob obsluhy, může obsahovat
hodnotu DSCP (Differentiated Services Code Point) kód, viz. obr. 13.3 anebo IP precedence, viz.
obr. 13.4. Zatímco DSCP používá šest bitů, tak IP precedence tři bity
0 1 2 3 4 5 6 7
Precedence TOS MBZ
DSCP umožňuje vhodnější značkování provozu, DSCP obsahuje šestibitovou informaci sloužící
k rozlišení toku. Ta umožňuje definovat až 64 jednotlivých provozních tříd. To je dostatečný počet
nejen pro standardní, ale i pro specifičtější třídy provozu. Standardně je definováno pouze 14 tříd
(kromě EF a BE je možné rozlišit 12 kategorií pomocí AF. Čím hodnota pole, tím větší je priorita
daného provozu. Pro PHB AF, viz. tab. 13.1, se doplňuje toto číslo do názvu (např. AF4x). Další
dva bity určují pravděpodobnost zahození, čím větší číslo, tím spíše dojde k zahození provozu
(AFx1 – nízká pravděpodobnost zahození, AFx2 – střední pravděpodobnost zahození, AFx3 –
vysoká pravděpodobnost zahození). Poslední bit je 0.
AF13 AF23
High Drop Prec AF33 011110 AF43 100110
001110 0010110
228
13 Aspekty kvality IP telefonie
Následující tabulka 13.2 ukazuje doporučené hodnoty IP Precedence (IPP) a k nim odpovídající
PHB třídy spolu s hodnotou DSCP (binárně, v závorce decimálně).
BE
000000 (0) – –
EF
101110 (46) – –
Plánované odesílání paketů umožňuje prioritní zacházení pro vybrané třídy síťového
provozu, což je základní myšlenka téměř všech technologií pro zajištění kvality služeb. Proto je
plánované odesílání paketů srdcem každého QoS mechanizmu, neboť právě tento proces má
zásadní vliv na výslednou úroveň kvality uživatelské aplikace. Pojmem plánované odesílání paketů
jsou většinou označeny dva úzce související procesy - proces řazení paketů do front a proces
řízeného odesílání, který rozhoduje, který paket bude odeslán na výstupní rozhraní síťového
prvku. Plánované odesílání paketů je u technologie DiffServ prováděno na základě DSCP značky a
k ní přidruženému způsobu zacházení PHB. Mezi nejpoužívanější mechanizmy plánovaného
odesílání paketů například patří FIFO (First In First Out), PQ (Priority Queuing), WFQ
(Weighted Fair Queuing), jejichž bližší popis je v další kapitole.
229
13 Aspekty kvality IP telefonie
Pakety, které mají být poslány ven ze směrovače přes určité rozhraní, se dočasně umístí do
paketové fronty, pokud je v daném okamžiku příslušné rozhraní zaměstnáno vysíláním jiného paketu.
Paketových front může být na určitém rozhraní i více (např. pro různé druhy provozu). V takovém
případě je nutno definovat metodu obsluhy těchto front, tj. způsob a pořadí, v jakém budou pakety
vybírány z jednotlivých front a posílány přes rozhraní ven ze směrovače. Také uvnitř každé fronty je
definován určitý mechanizmus, který seřazuje pakety. Ve většině případů se jedná o metodu FIFO.
Paketové fronty mají vliv na všechny přenosové parametry. Čím delší je paketová fronta, tím
větší je zpoždění a variabilita zpoždění paketů, ale tím menší je ztrátovost paketů. Pokud dojde na
delší dobu k zahlcení daného rozhraní, tj. počet paketů vkládaných do fronty je delší dobu větší než
počet paketů vybíraných z fronty, je ztrátovost vysoká bez ohledu na délku fronty. Kromě dříve
popsaných softwarových front, existuje v každém rozhraní i malá hardwarová fronta, kam se umisťují
pakety těsně před vysláním ze směrovače. Důvodem její existence je, aby vysílání paketu nebylo
zdrženo procesem vybírání paketu ze softwarových front [mac], [hos], [mol2].
Metody obsluhy paketových front patří mezi QoS nástroje pro řízení stavů zahlcení sítě
(congestion management). Modely řazení paketů do front nám popisují vřazení jednotlivých typů
informace do příslušné fronty a způsob její obsluhy [hro]. Základní modely řazení provozu do front
jsou:
Druhou skupinou modelů řazení paketů do front jsou modely složitější, odpovídající zejména
kombinacím modelů základních. Z možných kombinací se nejčastěji můžeme setkat s těmito modely:
Vážené řazení do front na základě třídy CBWFQ (Class-Based Weighted Fair Queuing)
Prioritní řazení do front / Vážené řazení do front PQ/WFQ (Priority Queuing / Weighted Fair
Queuing)
Řazení do front s nízkou latencí LLQ (Low Latency Queuing)
Nejzákladnějším typem obslužné fronty je FIFO (First In First Out). Tato fronta je základním
prvkem většiny modelů. FIFO používá jen jednu frontu, ze které se pakety vybírají v tom pořadí, ve
kterém byly do ní vloženy. Není zde nutná žádná klasifikace paketů.
230
13 Aspekty kvality IP telefonie
13.5.2 Metoda CQ
CQ pracuje také na principu rozdělení toku do více obslužných front. U metody CQ není
přenosové pásmo rozděleno ve vyváženém poměru. Přidělené pásmo pro danou frontu může být
nastaveno konkrétní hodnotou, nebo procentem z celkově poskytované šířky pásma. V případě
vyprázdnění obslužné fronty, je její přidělené pásmo v příslušném poměru rozděleno mezi fronty
zbývající.
Obsluha
Klasifikace fronty
Přidělené
pásmo 15%
Přidělené
pásmo 30%
Přidělené
pásmo 55%
WFQ pracuje na principu rozdělení toku do více obslužných front na základě jejich klasifikace.
Klasifikace bývá provedena nejčastěji na základě typu datového toku nebo na základě zdroje toku.
Celé dostupné přenosové pásmo je rozděleno ve vyváženém poměru mezi jednotlivé obslužné fronty.
Obslužné fronty využívají k obsluze svých požadavků přidělené pásmo. V případě že dojde
k vyprázdnění konkrétní obslužné fronty, je její přidělené pásmo dynamicky rozděleno mezi fronty u
nichž dochází k obsluze. V případě příchodu požadavku do prázdné fronty je ostatním frontám
naopak pásmo odebráno. V tomto modelu tak nevzniká situace, při které by jeden typ datového toku
zahltil celé přenosové pásmo a tím zabránil obsluze ostatních toků.
Obsluha
Klasifikace
fronty
WFQ používá pro každý datový tok (data z určité IP adresy a portu aplikace na určitou IP adresu
a port aplikace) samostatnou frontu. Počet front se rychle mění, každá fronta má přiděleno určité
231
13 Aspekty kvality IP telefonie
vážené procento z celkové přenosové rychlosti rozhraní v závislosti na počtu datových toků v daném
okamžiku. Váha je odvozena od hodnoty IP precedence.
13.5.4 Metoda PQ
PQ pracuje na principu rozdělení datového toku do front s různou prioritou. Je-li požadavek na
základě své klasifikace přiřazen do fronty s vyšší prioritou, je obsloužen dříve, než požadavek
přiřazený do fronty s prioritou nižší. Obsluha fronty s vyšší prioritou probíhá do momentu, než je tato
fronta kompletně vyprázdněna. Po jejím vyprázdnění začíná obsluha fronty s nižší prioritou. Celý
proces se opakuje až do obslužné fronty nejnižší priority. V okamžiku příchodu požadavku do fronty
s vyšší prioritou, než je priorita fronty obsluhované, je v případě obsluhy „bez přerušení“ obsloužen
stávající požadavek a až poté nově příchozí požadavek s vyšší prioritou. Nevýhodou této obslužné
metody je, že v případě stálého zaplnění fronty s vyšší prioritou nemusí být požadavky s nižší
prioritou v požadované době obslouženy. Tento model je díky svým obslužným parametrům,
dostupným zejména požadavkům zařazeným ve vyšší prioritní frontě, vhodný pro aplikace
s vysokými nároky na zpoždění přenosu, které mají nízké požadavky na přenášenou šířku pásma.
Tento obslužný model je tedy vhodný pro obsluhu provozu generovaného aplikacemi pracujícími
v reálném čase.
Obsluha
Klasifikace fronty
Prioritní
třída 1
Prioritní
třída 2
Prioritní
třída 3
CBWFQ kombinuje vlastnosti CQ a WFQ, provoz je rozdělen do front (až 64) jako u CQ s tím, že
na rozdíl od CQ je každé frontě garantováno určité procento z přenosové rychlosti rozhraní. V rámci
jednotlivých front se používá buď FIFO nebo WFQ. V praxi se obvykle vyčlení fronty pro typy provozu,
kterým chceme garantovat určitou přenosovou rychlost. Tyto fronty používají metodu FIFO. Zbytek
provozu se umístí do zvláštní fronty, která používá metodu WFQ.
PQ/WFQ je založena na kombinaci dvou jednodušších front. Fronty PQ a fronty WFQ. Principem
tohoto modelu je upřednostnění obslužné fronty PQ před frontami WFQ. WFQ v tomto modelu
zastupuje PQ frontou s nižší prioritou. Tímto obslužným modelem zajistíme jednak upřednostnění
informací citlivých na zpoždění a zároveň i obsluhu dalších informací pomocí front typu WFQ.
PQ/WFQ je tedy z hlediska obsluhy v reálného provozu výhodnější než obslužný model PQ.
232
13 Aspekty kvality IP telefonie
Klasifikace Obsluha
fronty
LLQ je metoda vycházející z metody PQ/WFQ a CBWFQ. Oproti metodě PQ/WFQ zavádí
možnost rozdělení jednotlivých toků do několika tříd, u kterých je možné přiřadit specifickou část
systémových prostředků. Možné je přiřazení systémových prostředků celé prioritní frontě. Jelikož je
oproti metodě PQ/WFQ přidána možnost specifikace systémových prostředků, můžeme se setkat i
s označením PQ/CBWFQ. Z hlediska obsluhy reálného provozu je, z výše uvedených modelů, tento
model nejvhodnějším pro obsluhu provozu generovaného aplikacemi pracujícími v reálném čase.
Aby provoz z LLQ fronty neznemožnil přenos i jiných typu dat, jako se to může stát u PQ,
definuje se pro LLQ určitá maximální přenosová rychlost, po jejímž překročení se přebývající pakety
zahazují.
Klasifikace Obsluha
fronty
Jestliže totiž dojde ve směrovači k úplnému zaplnění výstupní fronty směrovače, jsou všechny
další pakety určené pro tuto linku zahazovány (mluvíme o tzv. tail drop, jelikož se zahazují pakety
na konci fronty, resp. za ním).
Pokud přes takovéto rozhraní prochází větší množství TCP spojení, budou ze všech těchto
spojení zahazovány pakety a odesílatel neobdrží několik následných potvrzení. To se projeví u
odesílatele poklesem intenzity vysílání. U TCP se používá mechanizmus oken, který reguluje, kolik
segmentů lze odeslat vysílačem bez čekání na potvrzení o jejich doručení do cíle. Čím větší je toto
„okno“, tím více segmentů se přenese za jednotku času. Naopak snížením velikosti okna se dosáhne
snížení množství vysílaných segmentů, protože se častěji čeká na potvrzení o přijetí dříve poslaných
segmentů.
233
13 Aspekty kvality IP telefonie
Důmyslnější variantou RED je Weighted Random Early Detection ( WRED), ve které jsou
různé profily dle váhy, důležitější toky zahazuje méně na základě IP Precedence a DSCP.
Další variantou je Class Based Weighted Random Early Detection (CBWRED) s rozšířením
na třídy
Efektivním nástrojem pro snížení RTP režie je použití komprese cRTP (Compressed Real-Time
Protocol) a dosáhnout snížení ze 40 Bytes RTP hlavičky na 2-3 Bytes cRTP. Použití cRTP je
omezeno na link-by-link, tzn. např. mezi dvěma směrovači.
LFI (Link Fragmentation and Interleaving) je technika, která rozdělí velké rámce na menší o
stejné velikosti a vysílá je prokládaně (dovolí mezi ně vložit jiné rámce). Výhodou je, že se jiné malé
pakety jako např. VoIP dostanou rychle na rozhraní k odeslání na linku a nemusí čekat, než se
odešle nějaký velký rámec. Zmenší se serializační zpoždění (odesílání přes výstupní rozhraní
směrovače). LFI se používá hlavně na pomalých linkách, kde je může být velké serializační
zpoždění,, např. odeslání 1500B přes linku 64kbps trvá 187,5 ms.
234
13 Aspekty kvality IP telefonie
Při přenosu hlasu pomocí nespojově orientovaného přenosu v IP síti má na výslednou kvalitu
hlasového provozu vliv více faktorů, než tomu bylo v případě přenosu hlasu klasickými
telekomunikačními technologiemi [har]. Jednotlivými faktory, které mají v prostředí VoIP vliv na
kvalitu hovoru jsou zpoždění, kolísání zpoždění, ztráta paketů, posloupnost paketů, použitý kodek a
nakonec i echo (ozvěna). Hodnocení kvality hovoru, na který má vliv řada různých faktorů, není zcela
triviálním úkolem. Pro komplexní hodnocení kvality je vhodné použít jednotný parametr, pomocí
něhož jsme schopni kvalitu vyjádřit. V prvé řadě je nutné provést základní klasifikaci kvality, kterou si
rozdělíme na:
Kvalita hovoru CQ je v telefonii klíčovou záležitostí a definovat její úroveň je úkol velmi obtížný,
protože kvalita je individuální. Je vysoce pravděpodobné, že kvalita jednoho hovoru bude různými
osobami posuzována rozdílně a je rovněž pravděpodobné, že při opakovaném posuzování stejného
vzorku hovoru jednou osobou dojdeme k různým výsledkům.
Při hodnocení kvality se používá stupnice MOS (Mean Opinion Score). Při subjektivním
hodnocení posluchači používají hodnoty 1 až 5, kde 5 odpovídá nejlepší kvalitě a 1 nejhorší kvalitě.
Z jednotlivých hodnocení je určen aritmetický průměr – MOS.
Pro hodnocení kvality hovoru je vhodnější použití objektivního hodnocení, které poskytne MOS
co nejvíce korelující se subjektivním názorem. Hodnotící model, který byl vyvíjen s ohledem na VoIP,
je specifikován v doporučení ITU-T G.107 a nazývá se E-model [har]. Jedná se o výpočetní model,
který patří mezi neintrusivní přístupy. Myšlenka je následující, na základě znalostí přenosové trasy
lze pomocí E-modelu vypočíst míru degradace řečového signálu průchodem přenosovou trasou a
spočíst očekávaný MOS (resp. R-faktor, odpovídá konverzační kvalitě a lze přepočíst na MOS).
Výsledkem E-modelu je skalár, R-faktor nabývající hodnoty 0 až 100 (pro úzkopásmové kodeky
0 až 94 a pro širokopásmové 0 až 129), slovní prezentace je uvedena v tab. 13.3 a lze nalézt tyto
kritické hodnoty:
235
13 Aspekty kvality IP telefonie
Rozsah Rozsah
Kvalita hovoru Spokojenost uživatelů
R - faktoru MOS
90 ≤ R < 100 >4,3 Nejlepší (Bust) Velmi spokojení
R = R 0 - IS ID Ie-eff A (13.1)
V této rovnici Ro představuje úroveň odstupu signálu od šumu SNR zahrnující jak zdroj rušení el.
obvody, tak i hluk v místnosti.
Faktor Is zahrnuje vliv snížení kvality hovoru působící víceméně souběžně s vlastním hlasovým
signálem, jde tedy o změnu úrovně signálu.
Ie-eff je efektivní faktor zařízení, který zahrnuje nejen vliv zařízení (vliv použitého kodeku –
původní faktor zařízení) ale i ztrátovost. Tento faktor v revizi E-modelu z roku 2002 nahradil faktor Ie
používaný v dřívějším E-modelu z roku 2000, každopádně Ie-eff zahrnuje ve svém výpočtu i Ie, který
tvoří jednu z komponent efektivního faktoru zařízení. Hodnoty Ie jsou publikovány jako dodatky
doporučení ITU-T G.113 a je proto vhodnější použít aktuální hodnoty Ie přímo ze stránek ITU-T
[G113]. Například pro kodek G.711 je hodnota Ie=0 a pro G.729 Ie=10.
236
13 Aspekty kvality IP telefonie
V kapitole 1.5 je vysvětlen způsob zabezpečení pomocí SRTP a ZRTP. Formát paketu přináší
minimální overhead, který je v poli authentication tag (80 bitů nebo 32 bitů), vlastní šifrování AES v
CM režimu má vlastnosti proudové šifry a nedochází k vkládání dalších výplňových bitů. Významný
overhead je především v souvislosti s TLS a IPsec, kde jsou používány blokové šifry.
Transport Layer Security (TLS) je protokol umožňující zabezpečenou komunikaci v IP sítích, data
na aplikační vrstvě jsou šifrovány. Při sestavování TLS spojení se obě strany nejdříve dohodnou na
podporovaných algoritmech, vymění si klíče a autentizují se se na základě certifikátu, při autentizaci
se používá asymetrická kryptografie. Šifrování provozu se již provádí symetrickou šifrou. Jestliže
předpokládáme navýšení RTP toku vlivem šifrování v TLS, tak můžeme vyloučit proudové šifry,
neboť zde jednak nedochází k doplňování bloků užitečné zátěže a jednak se v TLS prakticky
nepoužívají.
Blokové šifry mají několik schémat, ze kterých je TLS provozováno v CBC módu, viz. obr. 13.11
(resp. 1.8 v kapitole 1.5). Jedná se režim řetězové blokové šifry (Cipher Block Chaining), inicializační
vektor se sečte na členu XOR s prvním blokem užitečné zátěže, následně jsou data šifrována
vhodným kryptografickým algoritmem a zároveň slouží jako vstup do dalšího bloku, takto dochází k
237
13 Aspekty kvality IP telefonie
řetězení označovaného jako CBC. Obr. 13.11 znázorňuje rozdělení jednoho RTP paketu do N bloků,
každý blok má stejnou velikost, která v případě šifrovacího algoritmu AES má 128 bitů. Zde pozor na
záměnu s vlastní klíčem v AES algoritmu, ten může mít jinou velikost (128, 192 nebo 256 bitů), blok
má ale stejnou délku 128 bitů. Pokud se aplikují jiné algoritmy, tak v případě DES, 3DES a Blow Fish
je velikost bloku 64 bitů.
Základními kroky předcházející odeslání hlasu v RTP paketu je kódování určitým typem kodeku
a paketizace. RTP pakety jsou odesílány v dedikovaných intervalech a načasování odeslání bude
záviset jednak na velikosti užitečné zátěže a jednak rychlosti výstupního toku z kodéru. Základní
rovnice, která vyjadřuje časování odesílání RTP je vyjádřena v rovnici 1.7 v kapitole 1.9 a aplikací
vztahů 1.8 a 1.9 dospějeme k vyjádření hodnoty nárokovaného pásma RTP tok (13.2).
M
SFi
BWM (13.2)
i 1 t i
3
Velikost rámce SF je dána součtem hlaviček na linkové, síťové a transportní vrstvě H
j 1
j
s velikostí zprávy na aplikační vrstvě (13.3) a t [s] je časování (timing odesílání RTP).
3
SF SAL H j (13.3)
j 1
Ačkoliv TLS protokol nese v názvu označení transportní, tak ve skutečnosti je umístěn mezi
transportní a aplikační vrstvou, což je v TCP/IP modelu poněkud zavádějící. TLS šifruje data
aplikační vrstvy, ale transportní vrstva je nedotčena. Nebudeme tedy zasahovat do rovnic vyjadřující
velikost na transportní vrstvě, ale nahradíme velikost zprávy na aplikační vrstvě za parametr
vyjadřující velikost zprávy po aplikaci TLS. Substituce odpovídá výše uvedenému popisu umístění
TLS v TCP/IP modelu a její vyjádření je provedeno následovně:
S
STLS C0 AL BS (13.4)
BS
Jelikož implementace OpenVPN přidává další blok konstantní velikosti, tak byla zavedena
konstanta C 0 a výchozí hodnota TLS je pro C0 0 , v případě různých implementací TLS ve VPN
může nabývat různých hodnot, např. pro OpenVPN a CBC s velikostí bloků 64 bitů je C0 600 bitů a
C0 664 bitů pro OpenVPN v CBC režimu s šifrou používající bloky 128 bitů.
238
13 Aspekty kvality IP telefonie
Údaje v tabulce byly vypočteny pro 802.3 Ethernet rámce a TLS v CBC s AES-128. Typická
paketizace RTP je u G.729 ∆t = 20 ms, je zde vidět markantní rozdíl mezi RTP nešifrovaným
BW=34,4 kbit/s a šifrovaným TLS/OpenVPN s více než dvojnásobnými nároky BW=72,4 kbit/s.
Obdobně můžeme konstatovat, že u G.711 kodeku, viz. obr. 13.12, kde rovněž typické
rozestupy RTP paketů jsou ∆t = 20 ms, vychází v OpenVPN BW=130 kbit/s oproti BW=90,4 kbit/s
239
13 Aspekty kvality IP telefonie
nešifrovaného RTP. Typické časové odstupy RTP paketů u G.723.1 kodeku jsou ∆t = 30 ms. Zjištěné
údaje se pochopitelně musí zohlednit při plánování síťových kapacit VoIP provozu poskytovateli IP
telefonie.
Zajímavé by mohlo býti použití protokolu DTLS (Datagram TLS) RFC 4347 Jedná se o obdobu
TLS, která je upravena pro spolupráci s protokolem UDP, v DTLS může nalézt zabezpečení řada
aplikací vyžadující nízké zpoždění za cenu možné ztrátovosti paketů a VoIP mezi ně určitě patří.
Šifrování na síťové vrstvě IPsec se oproti TLS používá v menším měřítku. IPsec umožňuje
zabezpečit komunikaci přes IP protokol a to autentizací a šifrováním každého datagramu toku.
Obsahuje protokoly pro výměnu vzájemné autentizace mezi komunikujícími agenty a výměnu
šifrovacích klíčů. Zabezpečení je provedeno pomocí dvou protokolů AH (Authentication Header) dle
RFC 4302 a ESP (Encapsulation Security Payload) dle RFC 4303. AH implementuje autentizaci pro
datový tok a můžeme analyzovat tyto situace:
ESP dokáže data nejenom autentizovat,ale také šifrovat. Zatímco AH přidává k zabezpečenému
paketu novou hlavičku, ESP obklopí množství užitečné informace IP paketu. Tím je šifrování pomocí
ESP komplikovanější než autentizace pomocí AH. Kromě polí, které jsou obsaženy i v AH hlavičce,
obsahuje ESP hlavička navíc pole padding, které slouží k doplnění do odpovídající velikosti paketu
při využití blokových šifer (opět převažuje CBC). A opět můžeme uvést dvě situace, a to pro
transportní a tunelový mód:
transportní mód, stejně jako u AH, enkapsuluje pouze užitečnou informaci, v datagramu,
tzn. od síťové vrstvy nahoru, původní IP hlavička je v datagramu zachována, zdrojová ani
cílová IP adresa se nemění,
ESP v tunelovém módu je velice podobné tradičnímu VPN, enkapsuluje celý IP datagram,
viz. obr 13.13.
U AH autentizace bylo možné podle obsahu pole next header v nově vytvořené IP hlavičce určit,
zda se jedná o transportní či tunelový mód. U ESP je totiž toto pole součástí zašifrovaného obsahu.
Prakticky se používá v drtivé většině tunelový mód ESP pro realizaci VPN kombinovaný s AH
autentizací a proto se budeme zabývat pouze tunelovým módem, viz. obr 13.13.
Pro výpočet lze využít rovnici, kde je nutné k velikosti užitečné zátěže SAL vyjádřit celkový
3
příspěvek hlaviček jednotlivých vrstev H
j 1
j . Empiricky bylo zjištěno, že výpočet může být podstatně
zjednodušen a přitom poskytne relevantní výsledky, byl prověřen vzorek tří set hovorů přes IPsec.
Pro tunelový ESP mód vložený do AH zavedeme konstanty IPsec pro typické velikosti užitečné
zátěže:
G.711, HIPsec=704 b
G.729, HIPsec=672 b
3
H RTP
H
j
BWM M CR 1
j 1
(13.5)
P
S
241
14 WebRTC a nové směry v IP telefonii
242
14 WebRTC a nové směry v IP telefonii
Asterisk podporuje WebRTC od verze 11, viz. obr. 14.1, kde byl vytvořen res_http_websocket
modul a podpora pro web sokety přidána do chan_sip. Asterisk tedy umožňuje přes web sokety
transportovat SIP. Rovněž má Asterisk podporu ICE, STUN a TURN v res_rtp_asterisk, což dává
silnou podporu klientům za NATem. WebRTC vyžaduje zabezpečená média, což se řeší přes
SRTP/SRTCP.
S Asteriskem jsou možné dva scénáře, jednak komunikace mezi dvěma web prohlížeči, přičemž
uživatelé ve svých prohlížečích vyplní své přihlašovací údaje ke svému účtu na Asterisku a můžou
volat přímo z prohlížeče. Uživatel nic neinstaluje, postačí mu prohlížeč HTML5 a klient je spuštěn
jako javascript při přístupu na webovou stránku, takovýmto prvním klientem s otevřeným kódem je
sipML5 a francouzská společnost Duabango Telecom (založena v v roce 2011) stojící za tímto SIP
HTML klientem uvádí funkčnost sipML5 na prohlížečích Chrome, Firefox, IE, Opera a Safari. Tím
pádem lze takovéhoto klienta integrovat i do sociálních sítí (přidáním kódu na webovou stránku) jako
FaceBook, Twitter, Google+ , atd. , přičemž není nutné instalovat žádný plugin nebo SW [joh].
I když obecně WebRTC popisuje komunikaci v tzv. WebRTC Web Triangle, kde pouze
signalizace jde na Web Server s podporou RTC a média již napřímo, tak v případě Asterisku
prochází signalizace i média skrz něj, viz. obr. 14.2.
Výhodou ovšem je kontrola nad médii a zprostředkování GW i do jiných sítí než IP anebo
protokolové GW, např. do Skype anebo Jingle (rozšíření komunikačního protokolu Jabber/XMPP),
viz. obr. 14.3. Pokud jsme u XMPP, tak nepochybně stojí za zmínku, že přes WebRTC lze posílat i
zprávy. WebRTC má velmi slibnou budoucnost, prohlížeč je prakticky ve všech koncových zařízeních,
čili potenciál rozšiřitelnosti je značný, rovněž podpora za NATem a jednoduchost používání, to jsou
atributy, které dávají této nové technologii velké šance na úspěch.
Pro podporu WebRTC v Asterisk u při kompilaci spustíme make menuselect, kde vybereme
res_http_websocket a res_rtp_asterisk a poté make install. Poté povolíme websocket v
/etc/asterisk/http.conf .
243
14 WebRTC a nové směry v IP telefonii
enabled=yes
bindaddr=0.0.0.0
bindport=8088
Doporučeno je zabezpečit ještě zabezpečit http přístup pomocí TLS, což zajistíme úpravou v
/etc/asterisk/http.conf .
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=localhost.crt
tlsprivatekey=localhost.key
transport=ws,wss
[1010]
type=peer
username=1010
host=dynamic
secret=1010
context=default
encryption = yes
avpf = yes
icesupport = yes
; encryption media encryption is a requirement of rtcweb the following must be added to the peer,
user, or friend to enable it.
245
Literatura
Literatura
[cam] Camp,K. "IP Telephony Demistified." McGraw-Hill, 2003, New York, ISBN 0-07-140670-0.
[col] Collins, D. “Carrier Grade Voice Over IP.“ New York: McGraw-Hill, 2002. ISBN 00-714-0634-4.
[dor] Sisalem, D., Floroiu, J., Kuthan, J., Abend, U., Schulzrinne, H. “SIP Security.“ Willey: p. 350.,
2009. ISBN 978-0-470-51636-2.
[gon] Goncalvez, F. Building Telephony Systems with OpenSIPS 1.6, Packet Publishing, p. 274,
2010. ISBN 978-1849510745.
[har] Hardy, W. "VoIP service quality." McGraw-Hill, 2003, New York, ISBN 0-07-141076-7.
[joh] Johnston, A., Burnett, D. "WebRTC: APIs and RTCWEB Protocols of the HTML5 Real-Time
Web." Digital Codex LLC, 2012, ISBN-13: 978-0985978808.
[hro] Hromek, F. "Optimalizace obsluhy RTP front." Vysoká škola báňská-Technická univerzita
Ostrava. Disertační práce, 2009.
[hos] Hošek, J. "Nové metody zajištění kvality služeb v datových sítích." Disertační práce FEKT,
VUT v Brně, 2011.
[igl] Iglo, T. "VoIP ústředna s protokolem SIP." UTB ve Zlíně, Fakulta aplikované informatiky, 2009.
[md1] Madsen, L., Bryant, R. "Asterisk Cookbook." O'Reilly Media, 2011, ISBN-13: 978-1449303822.
[md2] Madsen, L., Bryant, R., Meggelen, J. "Asterisk: The Definitive Guide." Publisher: O'Reilly
Media; Fourth Edition edition, 846 pages, 2013. ISBN-13: 978-1449332426
246
Literatura
[mol1] Kovář, P., Molnár, K. "Využití protokolu IAX pro spojení mezi ústřednami." Elektrorevue,
2008/42 – 13.11.2008, ISSN 1213-1539.
[roz] Rozhon, J., Macura, L. „Kamailio.“ Materiály ze školení pro společnost RETIA. 2013.
[rez1] Řezáč, F. “Prezentace k přednášce k aplikaci SIPp.“ 2013. Dostupné přes Moodle
URL http://moodle.kat440.vsb.cz/
[sil2] Šilhavý, P. "VoIP Signalizace 2." Přednáška č.7 k předmětu Telekomunikační a informační
systémy. FEKT, VUT v Brně, 2013. Silhavy, prednaska k NAT, P6
[sil3] Šilhavý, P. "Telekomunikační technika pro integrovanou výuku VUT a VŠB-TUO." VŠ skripta
FEKT, VUT v Brně, 2014.
[sin1] Sinnreich, H., Johnston, A., Sparks, R. “SIP Beyond VoIP.“ VON Publishing LLC, New York,
2005, ISBN: 0974813001.
[sin2] Sinnreich, H. “Internet Communications Using SIP.“ Wiley Computer Publishing, New York,
2001, ISBN 0-471-41399-2.
[sin3] Sinnreich, H., Johnston, A. “Internet Communications Using SIP Delivering VoIP and
Multimedia Services with Session Initiation Protocol Second Edition.“ Wiley Publishing, Inc.,
Indianapolis, Indiana, 2006, ISBN-13: 978-0-471-77657-4.
[sim] Viagenie, S. "NAT and Firewall Traversal with STUN / TURN / ICE." 2008
URL http://www.viagenie.ca/publications/2008-08-cluecon-stun-turn-ice.pdf
[sir] Širůček, M. “Návrh autentizačního mechanizmu pro GnuGK.“ Vysoká škola báňská-Technická
univerzita Ostrava, Diplomová práce, 2008.
[v51] Voznak, M. “Extent of services supported by Q-signaling over IP. “ Communications 4/2004,
p.89-93, Scientific letters of the University of Zilina, december 2004, ISSN 1335-4205.
247
Literatura
[v67] Vozňák, M. “Otevřené řešení impementace H.323.“ Connect!, str. 53 - 54, květen 2005,
Computer Press Praha, ISSN 1211-3085.
[v68] Vozňák, M., Machálek, P. “ENUM. “ Connect!, květen 2005, str. 16-18, Computer Press Praha,
ISSN 1211-3085.
[v90] Vozňák, M. “Signalizace SIP.“Ve sborníku Teorie a praxe IP telefonie, vyd. Sdělovací
technika, ČVUT a ProTel engineering, str. 35-75, v Praze 8.11.2006.
[v92] Vozňák, M. “Přenos hlasu prostřednictvím datových sítí.“ Kapitolav publikaci Moderní
komunikační technologie, str. 355-414, VŠB-Technická univerzita Ostrava, V Ostravě 2006,
ISBN 80-248-1111-1.
[v111] Halas, M., Kyrbashov, B. ,Voznak, M. “Factors influencing voice quality in VoIP
technology.“ In: 9th International Conference on Informatics‘ 2007, pp. 32-35, Bratislava,
ISBN 978-80-969243-7-0, 21-22.June 2007.
[v120] Nappa, A., Bruschi, D., Rozza, A., Voznak, M. “Analysis and implementation of secure and
unsecure Voice over IP environment and performance comparison using OpenSER.
“ Universita degli studi di Milano, 84 pages, December, 2007.
[v131] Vozňák, M. “Využití DNS v IP telefonii.“ V IT časopise Connect!, str. 12-13 v čísle 5/2008,
Computer Press, ISSN 1211-3085, květen 2008.
[v133] Voznak, M., Rozza, A., Nappa, A. “Performance comparision of secure and insecure VoIP
environments.“ TERENA Networking Conference 2008, TERENA, Brugge, Belgium, 19-22
May, 2008.
[v188] Voznak, M., Rozhon, J. “SIP Back to Back User Benchmarking.“ Proceedings The Sixth
International Conference on Wireless and Mobile Communications ICWMC 2010, pp. 92-96,
Published by IEEE Computer Society, September 20-25, 2010, University of Valencia ,
Valencia.
[v191] Voznak, M, Rozhon, J. “Methodology for SIP Infrastructure Performance Testing.“ WSEAS
TRANSACTIONS on COMPUTERS, Issue 11, Volume 9, pp. 1012-1021, September 2010,
ISSN: 1109-2750.
[v193] Voznak, M., Rezac, F. “SIP Threats Detection System.“ Advances in Data Networks,
Communications, Computers, pp. 125-130, University of Algarve, Faro, Portugal, November
3-5, 2010,ISBN 978-960-474-245-5, ISSN 1792-6157.
[v194] Voznak, M., Tomes, M., Vaclavikova, Z., Halas,M. “E-model Improvement for Speech Quality
Evaluation Including Codecs Tandeming.“ Advances in Data Networks, Communications,
248
Literatura
Computers, pp. 119-124, University of Algarve, Faro, Portugal, November 3-5, 2010,ISBN
978-960-474-245-5, ISSN 1792-6157.
[v166] Voznak, M., Rezac, F., Halas, M. “Speech Quality Evaluation in IPsec Environment.“ In
Proceedings of the 12th Inter. Conference on Networking, VLSI and Signal Processing -
ICNVS 2010, pp. 49-53, University of Cambridge, ISBN 978-960-474-162- 5, ISSN 1790-5117,
Cambridge, UK, 2010.
[v229] Voznak, M., Macura, L. “Kamailio Syntax Generator and Configuration File
Parser.“ Proceedings of the 15th WSEAS International Conference on Computers, pp. 308-
312, July 14-17, 2011, Corfu, Greece. ISBN 978-1-61804-019-0, ISSN 1792-4251.
[vil] Vilč, J. "ENUM a jiné metody adresace v sítích s VoIP." Diplomová práce FEI VŠB-TU v
Ostravě, 2007.
[vore] Vozňák, M., Řezáč, F. "Asterisk teorie a praxe." VŠB-TU v Ostravě, 2011
URL http://homel.vsb.cz/~voz29/files/Asterisk_teorie_a_praxe_v5.pdf
[wie] Wiesner, D. "Videokonference v HTML 5." Bakalářská práce FEKT, VUT v Brně, 2013.
249
Rejstřík
Rejstřík
AES Advanced Encryption Standard
AF Assured Forwarding
BE Best Effort
EF Expedited Forwarding
IPsec IP security
250
Rejstřík
PA Presence Agent
UA User Agent
252
Autor: Miroslav Vozňák
Katedra: Katedra telekomunikační techniky
Název: Technologie a protokoly multimediálních komunikací pro integrovanou výuku
VUT a VŠB-TUO
Místo, rok, vydání: Ostrava, 2014, 1. vydání
Počet stran: 252
Vydala: Vysoká škola báňská-Technická univerzita Ostrava
Náklad CD-ROM, 500 ks
Neprodejné
ISBN 978-80-248-3326-2