Telefonování a videokonference

Klasické telefonování je tu s námi už více než sto let. Od té doby se toho mnoho změnilo a „po drátě“ (i bez drátů) umíme přenášet ledacos. Současný trend je, že stále více komunikace probíhá digitálně a po balíčcích (paketech).

Jestliže ještě nedávno byly počítačové sítě doménou velkých firem, univerzit a armády, dnes se účastní internetové komunikace obrovské množství lidí.

Dovolím si celou internetovou telefonii vzít trochu více od podlahy. Než se dostaneme k samotnému telefonování, zkusíme si v hlavě vybudovat celou infrastrukturu, kterou k němu potřebujete. Pomůže vám to pochopit, co je možné a co není, a jestli vás vaši dodavatelé software, poskytovatelé připojení či správci sítě příliš nebalamutí.

Internet a komunikace

Často uslyšíte lidi říkat „jdu na Internet“, nebo „nefunguje Internet“, a další, podle kterých poznáte, že lidé nevědí či zapomínají, co a k čemu Internet je. Jedna nejmenovaná reklama je na tomto dokonce postavená.

Tedy pro připomenutí, Internet je celosvětová síť, složená z mnoha autonomních systémů. Autonomní systémy jsou sítě větších poskytovatelů a firem, které fungují zcela samostatně a jsou obvykle propojené více cestami „do Internetu“, tedy přímo či nepřímo do ostatních autonomních systémů.

Každý takový autonomní systém je součástí Internetu. Každá podsíť v Internetu je součástí nějakého autonomního systému. A každý počítač či jiné zařízení v síti má veřejnou Internetovou adresu a komunikuje s ostatními pomocí protokolů rodiny TCP/IP. Ve skutečnosti dnes dva Internety opravdu máme. Je to starý a zavedený Internet na protokolu IPv4 a „nový Internet“ na protokolu IPv6 (o něm jste si mohli více přečíst v minulém čísle).

Veřejné a neveřejné IP adresy

Adresy protokolů IPv4 a IPv6 jsou strukturovaná čísla, podle kterých se doručují pakety. V minulém čísle jsem psal o tom, že adresy protokolu IPv4 konečně došly. Trochu jsem vám ale zatajil, že z praktického hlediska došly už před mnoha lety.

K tomu, abyste mohli přirozenou cestou posílat pakety jiným počítačům na celosvětové síti a příjímat pakety od nich, potřebujete veřejnou adresu. Na IPv4 se ale běžně zavádí privátní (neveřejné) adresy, které se můžou v sítích opakovat, poznáte je, jsou z rozsahů 192.168.0.0–192.168.255.255, 172.16.0.0–172.16.31.255 a 10.0.0.0–10.255.255.255.

Mezi privátní a veřejnou sítí IP komunikace nefunguje. Jaktože je tedy můžete používat pro přístup na Internetové služby?

Datové pakety se nepřenáší přímo po protolu IP, ale ještě se používá jednoduchý transportní protokol UDP, který identifikuje aplikaci číslem portu. Pro navázání datových spojení se místo UDP používá komplexnější protokol TCP.

Jak se obchází absence veřejné adresy

Na začátku devadesátých let byl vytvořen protokol SOCKS, který sloužil ke zprostředkování přístupu k Internetu počítačům s neveřejnými adresami i počítačům za firewallem. Aplikace komunikuje se SOCKS proxy serverem a propůjčuje si jednotlivé UDP a TCP porty, které chce používat. SOCKS server pro uživatele aplikace přenáší veškerou komunikaci s vnějším světem.

Krátce na to přišla méně schopná alternativa jménem NAT, přesněji IP maškaráda. Maškaráda na jednu stranu umí pouze odchozí spojení, na druhou stranu ale nevyžaduje přímou podporu aplikací. Naopak, NAT zařízení překládá adresy a porty automaticky. Obě řešení jdou kombinovat.

Organizace IETF, která stojí za internetovými standardy, má připravenou sadu protokolů k navazování spojení mezi zařízeními, kterým v komunikaci překáží maškaráda nebo firewall. Celé to zaštiťuje ICE, protokol pro interaktivní domluvu procházení NATu mezi účastníky. Metoda STUN umožňuje aplikacím otestovat způsob propojení s Internetem a v mnoha případech navázat přímé spojení. Metoda TURN je tu pro případ, že STUN selže a je potřeba navázat spojení nepřímo přes relay server. Tato možnost je samozřejmě mnohem dražší na provoz.

Proč to vše popisuju? Celá metodika okolo ICE se vyvíjela mnoho let a stála spoustu práce a času. Nebýt maškarády, mohlo být internetové telefonování už dnes daleko rozšířenější. Ale dnes už to jakž takž umíme i s NATem.

Tak začněme komunikovat!

Máme tedy buď veřejné adresy, nebo metodu pro navázání spojení mezi neveřejnými.

V prvním případě by stačilo naprogramovat, koupit či stáhnout aplikaci, která se umí „zatelefonovat“ na IP adresu (nebo doménové jméno) a naopak takový hovor „zvednout“. Přitom se vůbec nemusí jednat jen o hlasové telefonování. Můžeme přenášet text, hlas, obraz, smajlíky, nebo si předávat celé soubory.

Tradiční internetový zápis uživatele na nějakém počítači je ten se zavináčem, jako e-mail, tedy například franta.vomacka@telefon.example.net. Protože ale Franta používá kromě internetového telefonu i několik dalších zařízení, třeba počítačů, raději použije „ústřednu“ (server). Jeho adresa tedy bude jen franta.vomacka@example.net a bude se z různých zařízení přihlašovat na server pro doménu example.net.

Sami vidíte, že franta.vomacka@example.net vypadá jako e-mail. Doporučuju takové nastavení, kdy jsou všechny služby sloučené pod jednu doménu, na které jsou společné uživatelské účty pro e-mail, telefonování, a případné další služby.

Standardy a nestandardní řešení

Při výběru aplikací je třeba brát velký zřetel na použitý protokol a síť. Pro veřejnou komunikaci mezi lidmi, stejně jako pro mezifiremní komunikaci, je potřeba najít vhodný společný protokol. Doporučuju držet se osvědčených standardů organizace IETF, na jejíž standardech funguje celý Internet. Pod IETF spadají například i protokoly pro elektronickou poštu, ale také právě protokol XMPP pro rychlou textovou komunikaci v síti jabber a protokol SIP pro internetové telefonování. Na oba se podíváme trochu více zblízka.

Zvláště zajímavé jsou sítě s volnou federací, které fungují na podobném principu jako třeba e-mail. Kdokoli si může zařídit server a servery mezi sebou umí komunikovat automaticky podle doménového jména. To je běžný způsob například u jabber serverů.

Naopak pro tento účel výrazně nedoporučuju různé proprietární služby, které jsou celé vlastněné nějakou cizí firmou a neumožňují přímou komunikaci se zákazníky jiných služeb. Tyto služby navíc často vyžadují, abyste používali pouze jejich aplikaci, nebo dokonce jiná aplikace ani není. Výrazně si tak stížíte možnost změnit poskytovatele služby, když vám přestane vyhovovat. Jedná se tedy o náš starý známý vendor lock-in.

Výše uvedené důvody vedly k tomu, že jsem si pro svou praxi, a tedy i pro tento článek, vybral dva otevřené protokoly, za nimiž stojí IETF. Vedle protokolů pro vás vybral volně dostupné programy, abyste měli možnost vše hned vyzkoušet. Jistě najdete na stejných protokolech i komerčně podporovaná řešení pro vaše potřeby.

SIP, protokol telefonů nové generace

Protokol SIP (Session Initiation Protocol) z dílny IETF je v současné době nejrozšířenějším protokolem pro VoIP telefony a ústředny. Používá přesně ten formát adresy, o kterém jsem psal výše, tedy franta.vomacka@example.net, případně s označením protokolu sip:franta.vomacka@example.net. Samotný protokol je velmi jednoduchý a připomíná dobře známé HTTP.

Pro místní hovory stačí udávat samotné jméno bez zavináče a serveru a SIP zvládá různá přesměrování a další kouzla. Například při použití jmen ve formátu 123456789@example.net stačí na telefonu v doméně example.net vytočit číslo 123456789, jakoby to byl klasický telefon s číselnými adresami.

Telefony se připojují k registračním serverům, které jsou pro jednotlivé domény určené v DNS pomocí SRV záznamů. Registrační servery obvykle zároveň slouží jako SIP proxy servery, tedy servery, které předávají požadavky protokolu SIP. Ve výsledku to vypadá tak, že na navazování hovoru se podílí dva SIP telefony a mezi nimi dvě SIP proxy.

SIP proxy server není určený k přenosu zvuku a obrazu, pro tento účel si telefony otevírají samostatný datový kanál pomocí ICE. To znamená, že pokud to jenom trochu jde, použije se přímé spojení. Datové formáty pro přenos zvuku a obrazu se určuji v samostatném popisném protokolu SDP (Session Description Protocol). Pro samotný přenos se pak používá protokol RTP (Realtime Transport Protocol). Je to taková šikovná skládačka složená z protokolů, které jdou použít i jinde.

Pro SIP existuje sada rozšíření SIMPLE, která do něj přidává rychlou textovou komunikaci.

XMPP, protokol pro instant messaging

Protokol XMPP (eXtensible Messaging and Presence Protocol) ze stejné dílny, známý také jako jabber, je postavený úplně z druhé strany. Od začátku je to protokol pro instant messaging, neboli rychlou textovou komunikaci. Jabber od začátku funguje jako klient–server systém doplněný o spojení mezi servery (s2s). Spojení mezi servery je velmi důležité a v sítích s volnou federací se navazuje na základě objevování služeb pomocí SRV záznamů v DNS.

Centrální komponentou jabberu je seznam kontaktů (roster), který je uložený na serveru. Pokud používáte jeden jabber účet více zařízeních, změny v kontaktech provedené například z počítače vidíte ihned na mobilním telefonu a naopak. Seznam kontaktů je doplněný aktuálními informacemi o připojených klientech. Pokud je někdo připojený z několika zařízení, můžete si vybrat, na které mu napsat. Poznámky ke kontaktům a další důležitá data se rovněž ukládají na server.

Nedílnou součástí jabberu je i možnost účastnit se textových konferencí, tedy chatovacích místností, podobných třeba IRC. Zatím nebyl dostatečný zájem implementovat rozložení místností mezi více servery, jak je to v IRC, ale i to může časem přijít. Na serveru si sami udržujete seznam oblíbených místností s možností automatického vstupu při přihlášení.

Postupem času bylo jasné, že jabberu chybí možnost telefonování, které ale už bylo dobře implementované SIPem. Řešením bylo použít SIP a pouze jeho zprávy přepsat na zprávy protokolu XMPP a tak vznikl základ Jingle. Průchod firewally a maškarádou se řeší stejným způsobem.

Jingle zavádí do jabberu možnost navazovat přímá spojení, která se používají k telefonování, videohovorům, přenosu souborů a dalším účelům.

Jako celek nabízí protokol XMPP kompletní API pro instant messaging, chatovací místnosti, telefonování, videotelefonování, přenosy souborů, a mnoho dalších. Nelze tedy než doporučit všem tvůrcům serverových i klientských aplikací pro výše uvedené činnosti, kteří se chtějí zapojit do celosvětové sítě, aby mezi jinými implementovali i tento velmi rozšířený a podporovaný protokol. Pro chybějící funkce je možné dopsat vlastní rozšíření (na jedno takové se podíváme v souvislosti s frameworkem Telepathy).

Na stejném principu jsou založené i transporty, speciální komponenty jabber serverů, které zprostředkovávají přístup ke kontaktům a funkcím jiných sítí. Běžně se používají transporty do sítí IRC, MSN, ICQ, AIM, Gadu-gadu, ale třeba i do uzavřejných XMPP sítí, jako je Facebook, nebo SMS transport, který vás spojí s mobilní sítí.

Telepathy, opensource komunikační framework

V rámci freedesktop.org se za podpory společnosti Collabora vyvíjí komunikační framework Telepathy. Právě tím označením framework se liší od běžných programů pro instant messaging a telefonování. Telepathy totiž není klasický klient s okénky a interakcí s uživatelem, ale jakási spodní vrstva pro takové programy. Výhody tohoto postupu nemusí být zřejmé, proto se na Telepathy podíváme trochu více z blízka.

Telepathy závisí na dalším software hostovaném na freedesktop.org, který se jmenuje D-bus. D-bus je protokol pro komunikaci mezi programy na lokálním stroji (IPC), který umožňuje rozesílání signálů (událostí) a posílání zpráv (volání funkcí). Používá se na moderních distribucích Linuxu jako základní nástroj pro IPC, ale funguje i na Microsoft Windows. Telepathy nabízí přes D-bus rozhraní, které pak používají aplikace.

Samotné Telepathy na Windows zatím ještě nefunguje, ale na portu se pracuje. V tuto chvíli se používá na linuxových distribucích, včetně těch, které dodává Nokia na některých svých zařízeních (například Nokia 770, N800, N810 and N900). Přestože tento framework zatím není rozšířený na více platformách, je velmi zajímavý svojí koncepcí. Ale nemusíte se bát, hotový program pro Windows ještě představím.

Architektura

Oddělení frontendu a backendu (například pomocí služby D-bus) umožňuje dělat se systémem různá kouzla. Tím nejdůležitějším je, že kterákoli aplikace může využívat vaše účty pro IM a telefonování.

Například můžete mít kromě klasického klienta samostatnou aplikaci na upozorňování na nové zprávy. Stejnětak můžete mít aplikaci pro vzdálenou plochu, která přes Telepathy naváže komunikaci se svým protikusem u uživatele. Dají se vyrobit různé programy pro automatické odpovědi. Na Telepathy se může připojit kreslicí program, který umí sdílet kreslicí plochu s protikusem u jiného uživatele.

Jabber sice mnohé z těchto funkcí nabízí, ale každá aplikace se musí k serveru připojit zvlášť. To je velmi neefektivní, ale hlavně nepohodlné, protože jiný uživatel musí často ze seznamu vybírat aplikaci, se kterou chce komunikovat. Telepathy doplňuje jabber o možnost integrace na straně klientského operačního systému. Aplikace jsou pak velmi jednoduché a dělají jen to, co potřebují, o zbytek se jim stará Telepathy.

Pro takové případy, jako je sdílená kreslicí plocha, společná editace textů, tabulek a dalších věcí, se zavádí Telepathy Tubes, což je služba, která umožňuje aplikaci navázat komunikaci s protikusem u jiného uživatele, který s vámi chce spolupracovat, nebo i na jiném vašem zařízení. Tubes aplikacím nabízí komunikaci pomocí protokolu D-bus, která je jednodušší a zvláště vhodná pro nové aplikace. Alternativní možností je navázání spojení pomocí obousměrného datového proudu, což je zvláště vhodné pro aplikace, které už mají vlastní protokol a pro transport běžně používají TCP.

Protokoly

Pro telepathy existují backendy různých protokolů, říká se jim správci spojení. Mezi oficiální se řadí Gabble, Salut, Idle a Rakia.

Gabble je správce spojení klient–server XMPP s možností připojení na libovolný j abber server včetně Jabber.org, Jabbim.cz, Gtalku, Facebooku a mnoha dalších. Salut zpřístupňuje lokální XMPP pro komunikaci s ostatními uživateli na místní s íti, kteří tuto službu používají. Patří mezi ně i uživatelé Apple iChat.

Pro připojení na IRC servery je tu správce spojení Idle a o protokol SIP se stará Rakia.

Pak je tu několik mladších projektů pro podporu dalších protokolů. Konkrétně je to Ring pro GSM telefonování a SMS, Butterfly pro síť MSN, Sunshine pro síť Gadu-Gadu a Mixer pro MXit. Za zmínku ještě stojí správce spojení Haze, který podporuje stejné sítě jako klient Pidgin, protože používá stejnou knihovnu.

Aplikace

Na stolních počítačích a notebookách s linuxem se používá IM program Empathy, který uživateli zprostředkovává komunikaci s Telepathy. Podpora na Microsoft Windows závisí v první řadě na portování Telepathy, které zatím portováno není.

Samotné Empathy ve skutečnosti není jeden program, tak se prezentuje aby nebyli zmatení obyčejní uživatelé. Po technické stránce je Empathy ukázkou, jak se s Telepathy pracuje. Ve skutečnosti je to sada samostatných aplikací, kde se každá stará jen o svoji úlohu. Například seznam kontaktů je samostatná aplikace, chatovací okno je samostatná aplikace, stejně tak prohlížeč logů konverzací a konfigurátor chatovacích účtů.

Protože každá taková aplikace řeší jen interakci s uživatelem a interface Telepathy, zvládne ji napsat šikovný programátor bez detailní znalosti protokolů a dalších technických detailů. Není tak problém nahradit jednotlivé komponenty Empathy, ale ani dopsat nové. To se může zvlášť hodit při použití Telepathy na nějaké mobilní nebo specializované platformě.

Nová verze Gnome do sebe integruje upozornění na nové zprávy, kde se po najetí myší dá rovnou odpovídat. Programy Vino a Vinagre pro sdílení plochy umí využít Telepathy. Dá s předpokládat, že integrace s Gnome bude pokračovat.

Na linuxových distribucích se mimo Gnome a dalších používá i grafické rozhraní KDE, které je značně odlišné. Programy z projektu Empathy se pro integraci moc nehodí a tudíž vznikl projekt Telepathy-KDE, který má za cíl vytvořit všechny potřebné komponenty tak, aby dobře zapadaly do KDE.

Projekt OLPC (One Laptop Per Child) přinesl malé notebooky pro děti se specializovaným grafickým rozhraním Sugar, které zahrnuje aplikace pro komunikaci po síti. Ty jsou rovněž postavené na Telepathy. Linuxová distribuce MeeGo pro mobilní zařízení založená společnostmi Intel a Nokia také používá Telepathy jako komunikační základ.

Google Talk

Google Talk je aplikace společnosti Google pro Microsoft Windows, která se používá pro posílání zpráv a telefonování pomocí stejnojmenné služby. Používá mírně odlišnou verzi protokolu Jingle, která naštěstí funguje s běžnými klienty jako je Telepathy. Existuje i mobilní verze pro celou řadu mobilních operačních systémů.

QIP Infium

QIP je stará známá ruská aplikace pro síť ICQ, kterou vývojáři postupně přizpůsobili dalším protokolům včetně SIP a XMPP a nakonec ji naučili po jabberu i audiohovory a videohovory.

Jitsi, nový komunikační program nejen pro Windows

Jitsi je nový název zavedeného software jménem SIP Communicator. Změna názvu vychází z toho, že aplikace není zaměřena jen na protokol SIP, ale má velmi dobrou podporu XMPP a Jingle. Přesto je to relativně nový software a stabilní verze má teprve během roku vyjít. V době vydání to může být jeden z nejlepších programů pro Microsoft Windows a Apple Mac OS X.

Psi

Známý jabber klient pro linuxové distribuce, Microsoft Windows a Apple Mac OS X jménem Psi umí protokol XMPP včetně Jingle a lze ho používat k hlasovému telefonování. Videohovory zatím nejsou k dispozici.