480 likes | 581 Views
VoIP protokoly. Vladim ír Toncar Kerio Technologies. O čem budeme mluvit. O co v šechno se musí VoIP systém postarat? Jak se to realizuje v H.323 a SIPu? Co ostatní protokoly? Praktické problémy?. O co se musí VoIP systém postarat?. Získat informaci, kde druhý účastník je
E N D
VoIP protokoly Vladimír Toncar Kerio Technologies
O čem budeme mluvit • O co všechno se musí VoIP systém postarat? • Jak se to realizuje v H.323 a SIPu? • Co ostatní protokoly? • Praktické problémy?
O co se musí VoIP systém postarat? • Získat informaci, kde druhý účastník je • Navázat spojení s druhým účastníkem • Dohodnout parametry přenosu • Zakódovat a rozkódovat hlas (a případně obraz) • Přenést hlas a obraz na druhou stranu • Poskytnout dodatečné služby (transfer, parkování hovoru, konference)
Nalezení druhého účastníka • ENUM – převod telefonních čísel ve formátu E.164 na IP adresu, využívá DNS (420377632445 → 5.4.4.2.3.6.7.7.3.0.2.4.e164.arpa) • Registrační server – účastníci se k němu přihlašují a sdělují mu své IP adresy • Gatekeeper v H.323 • Registrar v SIPu
Navázání spojení a parametry přenosu • Specifické pro jednotlivé protokoly – podíváme se na to blíže později
Kódování a přenos zvuku • Přenos – protokol RTP – využívá se v H.323 i v SIPu • Kódování zvuku – existuje řada kodeků, ale nejdříve trochu teorie...
Kódování zvuku • Při digitalizaci analogového signálu musíme vzorkovat na frekvenci, která je aspoň dvakrát větší než šířka přenášeného pásma (Nyquist & Shanon)
Kódování zvuku • Zvolená velikost vzorku ovlivňuje velikost šumu • Například při lineání kvantizaci a pro 16-ti bitové vzorky je maximální odstup signálu od šumu 94.6 dB • SNR (dB) = 6.02N – 1.73 N… počet bitů
Hodnocení kvality přenosu • ITU-T P.800, P.830 • Hodnocení je nevyhnutelně subjektivní, ale je snaha dojít ke „zprůměrovanému“ výsledku (MOS – mean opinion score) • Větší počet posluchačů (bez sluchových problémů), diverzifikace materiálu: muži, ženy, různý věk mluvčích, různé jazyky
G.711 • Definován ITU v roce 1972 • Používá se v ISDN • Používá logaritmický převod, kompresní poměr 1:2 (každý 16-ti bitový vzorek z původního signálu je reprezentován 8-mi bity) • Dvě varianty: A-law (Evropa a mezinárodní linky), μ-law (USA, Japonsko) • Bitrate 64 kbit/s na jeden směr • MOS = 4.2
G.729 • 8 kbit/s • Pracuje s rámci o velikosti 10 milisekund (80 vzorků), každý zakódovaný rámec je reprezentován 10 bajty • V jednom RTP paketu se typicky posílají 3 rámce • Licenční poplatky • MOS = 4.0
G.723.1 • Dvě varianty: 6.3 kbit/s, 5.3 kbit/s (ITU vybralo dva vítězné návrhy a zkombinovalo je do jednoho standardu) • Pracuje s rámci o velikosti 30 milisekund (240 vzorků) • Licenčně nákladný • MOS = 3.9, 3.7
GSM Full Rate (06.10) • Definován ETSI (European Telecommunications Standards Institute) • Bitrate 13 kbit/s • Rámce o velikosti 20 milisekund (160 vzorků), jeden rámec převede na 33 bajtů (4 bity nejsou využity) • MOS = 3.7 • Volná licence
Další volné kodeky • Speex (Xiph.org Foundation) • Řada různých bitrates (2 kbit/s až 44 kbit/s, prakticky použitelné od 8 kbit/s), také varianty pro 16 kHz a 32 kHz • iLBC (Internet low bitrate codec) – RFC 3951 • Bitrate 15.2 kbit/s pro rámce 20 ms, 13.33 kbit/s pro rámce 20 ms • LPC-10 (DoD) – 2.4 kbit/s, technicky zajímavý, ale nízká kvalita („plecháč“)
Protokol H.323 • Definován ITU (Mezinárodní telekomunikační unie) • „Packet-based multimedia communications systems“ • Verze 1 v roce 1996, verze 6 v roce 2006 • „Zastřešující standard“, používá následující: • H.225.0 a Q.931– hovorová signalizace • H.245 – vyjednání parametrů multimediálních kanálů • H.235 – bezpečnostní a ověřovací mechanismy • RTP – přenost audio/video • H.450.x – doplňkové služby
Protokol H.323 – pro a proti • Mezinárodní standard, detailně a přesně definovaný (ASN.1 + mnoho stran dokumentace) • Složitý protokol, „Design by committee“ • Zprávy se kódují ASN.1 PER (Packed Encoding Rules) → větší nároky na paměť a procesor (obtížnější implementace v malých zařízeních)
Entity v síti H.323 • Terminál (telefon) • Brána - zajišťuje komunikaci s uživateli v jiných sítích • MCU – konferenční jednotka • Gatekeeper – registrační server, řízení provozu v síti, překlad adres (telefonní číslo → IP adresa) • „endpoint“ – terminál, brána nebo MCU • Zóna – množina zařízení řízená jedním gatekeeperem
Komunikace s Gatekeeperem • Pro komunikaci endpoint-gatekeeper nebo gatekeeper-gatekeeper se používá část protokolu H.225.0 označená „RAS“ – Registration, Admission, Status • GK poslouchá na portu 1719/udp (unicast), 1718/udp (multicast, vyhražená multicast adresa je 224.0.1.41)
H.225.0–RAS – typy zpráv • Objevení gatekeeperu – Gatekeeper Request (GRQ), Gatekeeper Confirm (GCF), Gatekeeper Reject (GRJ) • Registrace endpointu – Registration – RRQ, RCF, RRJ • Povolení hovoru – Admission – ARQ, ACF, ARJ • Ukončení hovoru – Disengage – DRQ, DCF, DRJ • Odregistrování – Unregister – URQ, UCF, URJ
H.225.0-RAS: příklad zprávy [05/Aug/2003 13:11:31] incoming 192.168.101.1:1602 H225 message: gatekeeperRequest gatekeeperRequest { requestSeqNum = 41142 protocolIdentifier = 0.0.8.2250.0.4 rasAddress = ipAddress { ip = 4 octets { c0 a8 65 01 ..e. } port = 1602 } endpointType = { vendor = { vendor = { t35CountryCode = 46 t35Extension = 0 manufacturerCode = 1 } productId = 20 octets { 4b 65 72 69 6f 2d 48 33 32 33 2d 53 6f 66 74 50 Kerio-H323-SoftP 68 6f 6e 65 hone }
Signalizace během hovoru • Pro signalizaci mezi endpointy se používají protokoly Q.931 a H.225.0 • Zprávy se přenášejí po TCP (port 1720) • Spojení buď přímo mezi koncovými zařízeními nebo přes gatekeeper (Gatekeeper-routed call model)
Q.931/H.225.0 • Q.931 je protokol vypůjčený z L3 v ISDN, není definován pomocí ASN.1 (vznikl dřív, než ITU začala ASN.1 používat). • Údaje, které lze namapovat na položky zpráv Q.931 se uvádějí přímo (např. volající a volané telefonní číslo), kompletní informace je pak ve zprávě H.225.0, která je binárně zapouzdřena v Q.931 • Používají se tyto zprávy Q.931: Setup, Call Proceeding, Alerting, Connect, Release Complete, Facility
Q.931/H.225.0 - příklad [05/Aug/2003 14:21:38] outgoing 192.168.40.72:1721 Q931 message: Setup { protocolDiscriminator = 8 callReference = 26927 from = originator messageType = Setup IE: Bearer-Capability = { 80 90 a5 ... } IE: Calling-Party-Number = { 81 31 31 31 .111 } IE: Called-Party-Number = { 81 32 30 30 31 .2001 } IE: User-User = { 20 b8 06 00 08 91 4a 00 04 01 01 00 44 42 2c 09 .....J.....DB,. 00 00 3d 1a 4f 70 65 6e 20 48 33 32 33 20 50 72 ..=.Open H323 Pr 6f 6a 65 63 74 20 4f 68 50 68 6f 6e 65 00 00 19 oject OhPhone... 31 2e 34 2e 31 20 28 4f 70 65 6e 48 33 32 33 20 1.4.1 (OpenH323 76 31 2e 31 32 2e 32 29 00 00 00 01 01 80 53 34 v1.12.2)......S4 00 c0 a8 28 48 06 b9 00 9a 78 f3 07 ad c5 d7 11 ...(H....x...... 9e 1b 00 50 04 6a 55 8c 00 5d 0f 80 07 00 c0 a8 ...P.jU..]......
Q.931/H.225.0 – příklad (2) IE: User-User (decoded) = { h323_uu_pdu = { h323_message_body = setup { protocolIdentifier = 0.0.8.2250.0.4 sourceAddress = 1 entries { [0]=dialedDigits "111" } sourceInfo = { vendor = { vendor = { t35CountryCode = 9 t35Extension = 0 manufacturerCode = 61 } productId = 27 octets { 4f 70 65 6e 20 48 33 32 33 20 50 72 6f 6a 65 63 Open H323 Projec 74 20 4f 68 50 68 6f 6e 65 00 00 t OhPhone.. } versionId = 26 octets { 31 2e 34 2e 31 20 28 4f 70 65 6e 48 33 32 33 20 1.4.1 (OpenH323 76 31 2e 31 32 2e 32 29 00 00 v1.12.2).. } } terminal = { } mc = FALSE
H.245 • Používá se pro vyjednání parametrů multimediálních kanálů • Kodeky, IP adresy a čísla portů • V základní verzi signalizace používá druhé TCP spojení • Obvyklá výměná zpráv: • hlasování master/slave • výměna informací o schopnostech endpointů • vyjednání logických kanálů
Než si ukážeme průběh hovoru... • H.225.0-RAS – komunikace endpoint-gatekeeper • Q.931/H.225.0– hovorová signalizace • H.245 – vyjednání parametrů multimediálních kanálů
Co lze vylepšit? • H.245 – pro vyjednání mediálních kanálů potřebuje druhé TCP/IP spojení • „Handshake“ v H.245 je složitý a trvá relativně dlouho (u HW telefonu s pomalejším procesorem si uživatel všimne krátkého intervalu ticha po přijetí hovoru)
Optimalizace hovorové signalizace • Tunelování H.245 – zprávy H.245 se zakódují ASN.1 PER a v binární podobě se vloží do zpráv H.225.0 • Fast Connect – navrhované parametry audia/videa se vloží hned do úvodní zprávy H.225.0 (Setup), odpověď přijde v některé zpětné zprávě. • Parallel H.245 (uvedeno v H.323 v.4) – kompletní přehled schopností volajícího endpointu je také zapouzdřen v H.225.0 Setup • Early media start – audio (video) se spouští okamžitě, jakmile jsou vyjednány parametry, nečeká se na přijetí hovoru
Programování v H.323 • Open Source knihovny OpenH323 (H323Plus) a Opal • 1998: Craig Southeren a Robert Jongbloed (Equivalence) vytvořili OpenH323 • 2001: Quicknet koupil Equivalence, stává se sponzorem OpenH323 • 2003: Craig a Robert opouštějí Equivalence, pokračují ve vývoji OpenH323 na Sourceforge, posléze začínají paralelně vyvíjet Opal (multiprotokolová knihovna) • 2007: „poslední“ relase OpenH323, přednost má Opal • 10/2007: H323Plus – nový fork OpenH323 s podporou Packetizer.com
Programování v H.323 • OpenH323, H323 Plus i Opal používají jako spodní vrstvu knihovnu PWLib • PWLib je multiplatformní knihovna v C++ (procesy, vlákna, sokety, atd.) • Součástí PWLib je také ASN.1 překladač
OpenH323 / H323 Plus • Opět C++, platformně nezávislé (používají PWLib) • Část kódu generována ASN.1 překladačem – třídy reprezentující zprávy protokolu a jejich kódování a dekódování • Programátor používající OpenH323 oddědí nové třídy od tříd v knihovně a předefinuje v nich virtuální funkce pro obsluhu událostí (např. příchozí hovor) • Tutoriál na http://toncar.cz/openh323/tut/index.html
Session Initiation Protocol • Definován IETF • RFC 2543 (1999), RFC 3261 (2002) • Henning Schulzrine, Columbia University • Obecně slouží pro navázání relace mezi dvěma či více účastníky, modifikaci a ukončení relace • Audio/video se opět přenáší protokolem RTP
SIP entity • User Agent (UA) – SIP telefon • Registrar (location) server – udržuje databázi telefonní číslo <-> IP adresa • Proxy server – směruje hovorovou signalizaci • Servery se obvykle realizují jako „vše v jednom“ – registrar & proxy • Brány do jiných telekomunikačních sítí (SIP-PSTN, SIP-H.323, atd.) • Posílání SIP zpráv – TCP nebo UDP, port 5060, v praxi spíše UDP.
SIP Proxy/Registar • Hlavní řídící prvek v SIP síti • Funkčně odpovídá gatekeeperu v H.323 • Nalezení volané stanice • Bezpečnost – oprávnění k volání • Směrování hovorové signalizace • Doplňkové služby
SIP – formát zpráv • SIP je textový protokol, formátování vychází z HTTP • Dva druhy zpráv – požadavky a odpovědi • Formát požadavku: <řádek požadavku> <hlavička zprávy> CRLF <tělo zprávy> • Formát odpovědi: <stavový řádek> <hlavička zprávy> CRLF <tělo zprávy>
SIP – požadavky (metody) • INVITE – požadavek na navázání spojení • ACK – přijetí hovoru • CANCEL – zrušení probíhajícího INVITE • BYE – ukončení spojení (hovoru) • REGISTER – registrace na registar serveru • OPTIONS – dotaz na „schopnosti“ protistrany (odpověď obsahuje audio/video kodeky, které protistrana podporuje) • Rozšiřující metody: INFO, UPDATE, SUBSCRIBE, NOTIFY, MESSAGE
SIP – příklad požadavku INVITE sip:0800123456@192.168.1.11 SIP/2.0 Accept: application/sdp Call-ID: d5661-134f1-eb52e-d5661-3d541@192.168.40.143 Contact: sip:1034@192.168.40.143:5060 CSeq: 101 INVITE Expires: 1000 From: "Vladimir Toncar" <sip:1034@192.168.1.11>;tag=ff177c16ff177c16 To: <sip:0800123456@192.168.1.11> Via: SIP/2.0/UDP 192.168.40.143:5060 Content-Type: application/sdp Content-Length: 152 v=0 o=TinyPhone 19505 19505 IN IP4 192.168.40.143 s=SIP Call c=IN IP4 192.168.40.143 t=0 0 m=audio 48256 RTP/AVP 18 101 a=rtpmap:18 g729a/8000
SIP – kódy odpovědí • Informational: • 100 Trying • 180 Ringing • 181 Call forwarded • 182 Queued • 183 Session Progress • Success • 200 OK • Redirection • 300 Multiple Choices • 301 Moved Perm. • 302 Moved Temp. • 380 Alternative Serv. • Request Failure • 400 Bad Request • 401 Unauthorized • 403 Forbidden • 404 Not Found • 405 Bad Method • 415 Unsupp. Content • 420 Bad Extensions • 486 Busy Here • Server Failure • 500 Server Error • 501 Not Implemented • 503 Unavailable • 504 Timeout • Global Failure • 600 Busy Everwhere • 603 Decline • 604 Doesn’t Exist • 606 Not Acceptable
SIP - rozšíření • SIP Presence • SUBSCRIBE – žádost o zasílání změn stavu • NOTIFY – informace o změně stavu („away“, „online“, atd.) • Zasílání zpráv • MESSAGE – v těle zprávy je přímo text (Content-Type: text/plain)
SIP - programování • Textový protokol → jednodušší implementace v malých zařízeních • Několik Open Source knihoven, implementace nejen v C/C++, ale také v Javě, Ruby
Další VoIP protokoly • MGCP a H.248/Megaco • Cisco SCCP • IAX2
MGCP, H.248/Megaco • Protokoly pro řízení distribuovaných bran mezi VoIP a jinými sítěmi (Media Gateway, Media Gateway Controller) RTP MG H.323/SIP H.248 MGC MG PSTN MG
MGCP, H.248/Megaco • MGCP – starší protokol, RFC3435 • H.248/Megaco – vývoj v kooperaci mezi ITU a IETF, protokol měl binární (ASN.1) a textovou verzi • ITU posléze pokračovala ve vývoji sama a IETF prohlásila svoji verzi za zastaralou (RFC 3015, 3525, 5125) • Aktuální označení je H.248.1, verze 3 (2005)
Cisco SCCP • Skinny Client Control Protocol • Proprietární protokol, Cisco ho koupilo s firmou Selsius • Pro komunikaci mezi IP ústřednou (Call Manager) a telefonem • Definován tak, aby koncové zařízení mohlo být co nejjednodušší • Relativně nízkoúrovňové operace („rozsviť kontrolku“, „spusť audio“), zprávy se přenášejí jako kopie bloků paměti (little endian)
IAX2 • Inter-Asterisk eXchange protocol • Pro „příčkování“ open-source ústředen Asterisk • Binární protokol • Používá jediné UDP spojení (port 4569), v něm posílá jak signalizaci, tak audio (i několika hovorů najednou)