Obecnie dostępnych i stosowanych jest wiele różnych programów do przesyłania dźwięku w sieci (trochę mniej jest aplikacji pozwalających przesyłać obraz). Dokładniejsza prezentacja poszczególnych rozwiązań znajdzie się w drugiej części tego artykułu, niniejszy natomiast tekst ma na celu przedstawienie podstaw technicznych, umożliwiających w ogóle transmisje audiowizualne w Internecie na szeroką skalę.
Transmisje tego typu niosą bowiem ze sobą znaczne obciążenie sieci. Pasmo zajmowane przez nieskompresowany cyfrowy sygnał foniczny określa się standardowo na 64 Kbps (taki standard przyjmowany jest np. w telefonii). Odpowiednia kompresja realizowana przez współczesne oprogramowanie przesyłu dźwięku potrafi zmniejszyć ilość transmitowanych danych nawet do 9 Kbps (format LPC), aczkolwiek taka kompresja może być niemożliwa do zrealizowania w czasie rzeczywistym na słabszych komputerach; bardziej "przystępne" czasowo algorytmy kompresji generują obciążenie rzędu 17 Kbps (format GSM) lub jeszcze większe dla innych formatów. Transmisje wizyjne o sensownej jakości wymagają przepustowości rzędu co najmniej 100 Kbps. Prawdziwym problemem jest jednakże nie przepustowość łącza do końcowego użytkownika, lecz znajdujących się "po drodze" łączy międzymiastowych i międzynarodowych. Jeżeli wiele osób równocześnie zechce odbierać jakąś transmisję dźwiękową, a zwłaszcza wizyjną, łącze o dowolnie dużej przepustowości może ulec "zapchaniu". Pakiety niosące transmisję muszą bowiem zostać wysłane do każdego odbiorcy z osobna - wynika to z natury protokołu TCP/IP! Transmisja będzie zatem przesyłana w tylu kopiach, ilu jest odbiorców. Jeżeli np. jeden użytkownik w Polsce zechce oglądać nadawany z USA audiowizualny przekaz z koncertu grupy Rolling Stones, generuje to na głównym polskim łączu do świata (ma ono przepustowość 2 Mbps) ciągłe obciążenie rzędu - powiedzmy - 200 Kbps. Obciązenie takie jest do przyjęcia, ale jeżeli tę samą transmisję zechce oglądać równocześnie 10 osób, łącze zacznie "pękać w szwach". To jednakże jeszcze nic w porównaniu z przepustowością łączy, którymi musiałby być dołączony do sieci komputer nadający tę transmisję: aby móc umożliwić jej odbiór setkom, czy tysiącom odbiorców na całym świecie, przepustowość ta musiałaby znacznie przekraczać istniejące możliwości techniczne!
Jednoznacznym wnioskiem jest zatem, że transmisji tego typu nie da się realizować w oparciu o "zwykły" protokół TCP/IP, w którym każdy pakiet przesyłany jest wyłącznie do jednego konkretnego odbiorcy (w zastosowaniach audiowizualnych określane jest to jako unicasting). "Zwykłe" TCP/IP może być wystarczające jedynie do wspomnianych zastosowań typu "telefon przez Internet", gdzie rozmawiają ze sobą tylko dwie osoby. Efektywną realizację wieloosobowych telekonferencji, czy transmisji przeznaczonych dla wielu odbiorców, uzyskuje się natomiast obecnie na ogół dzięki rozszerzeniu standardowego protokołu TCP/IP o tak zwany multicasting.
Pakiety typu broadcast docierają wprawdzie do wszystkich komputerów w sieci lokalnej bez konieczności wysyłania ich w wielu kopiach, jednakże z oczywistych względów nie mogą być "wypuszczane" przez routery poza sieć lokalną, gdyż szybko doprowadziłyby do "zapchania" całego Internetu - abstrahując już od tego, że niesiona przez nie informacja w większości nie ma poza siecią lokalną żadnego znaczenia.
Multicasting, opisany przez dokument RFC 1112, wprowadza trzeci rodzaj adresowania, które pozwala przesyłać pakiety do wielu (ale nie wszystkich, lecz tylko wybranej grupy) komputerów naraz, i to nie tylko w obrębie sieci lokalnej, ale również - przy zastosowaniu pewnych dodatkowych rozwiązań technicznych - w całym Internecie.
W pakietach typu multicast korzysta się z adresów IP należących do tzw. klasy adresowej D, czyli zawierających na pierwszych 4 bitach adresu kombinację "1110", co daje zakres adresów IP od 224.0.0.0 do 239.255.255.255 (w "zwykłym" TCP/IP używane są adresy z klas A - zaczynające się bitem "0", B - kombinacją "10" i C - "110"). W myśl specyfikacji TCP/IP, wysyłanie pakietów na takie adresy nie powinno wywoływać żadnej reakcji ze strony komputerów nie obsługujących multicastingu.
Adres multicastingowy określa grupę komputerów, do których wysyłany jest pakiet; sposób używania tego adresu jest jednak niejako odwrotny do zwykłych adresów IP. Zwykły adres IP jest jednoznacznie przypisany do określonego komputera, do którego chcemy wysłać pakiet. Adres multicastingowy związany jest raczej z daną sesją - nadawanym ciągiem pakietów - niż z jakimkolwiek konkretnym komputerem; używając analogii radiowej możnaby porównać go do "częstotliwości", na której dana transmisja jest nadawana. "Częstotliwość" tę (czyli adres) wybiera nadawca - decydując np. "będę nadawać do grupy 231.154.162.11", a odbiorca chcąc odbierać daną transmisję musi "dostroić się" do niej, czyli przyłączyć się do grupy identyfikowanej przez dany adres. Komputery mające zaimplementowaną obsługę multicastingu mogą - wykorzystując nowe funkcje dodane do biblioteki sockets - w dowolnym momencie dołączać się i odłączać od dowolnych adresów grupowych; całkowicie dozwolone jest również, aby dany komputer należał do kilku grup (tzn. mógł odbierać kilka transmisji) jednocześnie. Jeżeli więc przykładowo w sieci nadawane są równocześnie dwie transmisje, pierwsza na "częstotliwości" np. 230.136.22.1, a druga na 230.136.22.2 (tzn. na takie adresy komputery nadające wysyłają pakiety), to komputer, który wykona operację przyłączenia się do grupy o adresie 230.136.22.1, będzie odbierał pierwszą z tych transmisji, komputer, który przyłączy się do grupy 230.136.22.2 - drugą, zaś komputer, w którym wykonane zostaną obie te operacje po kolei, będzie odbierał obie transmisje równocześnie. Można rzecz jasna przyłączyć się także do grupy, do której aktualnie nie jest nadawana żadna transmisja (np. 230.136.22.3) - wtedy nie odbiera się oczywiście żadnych pakietów (ale można samemu zacząć nadawać...)
Z powyższego opisu wynika, że zaimplementowanie w danym systemie operacyjnym obsługi multicastingu wymaga pewnych zmian w jądrze TCP/IP (zmiany te opisane są we wspomnianym dokumencie RFC 1112) w stosunku do systemu obsługującego jedynie "zwykły" unicasting. Z multicastingu korzysta się obecnie na ogół w systemach Unixowych. Niektóre z nich mają niezbędne rozszerzenia zawarte już od razu w wersji dystrybucyjnej (z popularniejszych w Polsce są to np. IRIX dla komputerów Silicon Graphics, Solaris 2.x dla komputerów Sun, a także najnowsze wersje popularnych darmowych Unixów dla PC - FreeBSD i Linux), do większości innych dostępne są (przez anonymous ftp) odpowiednie programy pozwalające doinstalować obsługę multicastingu w jądrze. Z nie-Unixowego oprogramowania na komputery PC, multicasting realizują jądra TCP/IP firmy FTP Software: PC/TCP (dla systemu DOS) oraz OnNet (dla Windows) - niestety komercyjne, natomiast bez dodatkowych kosztów jest on już "firmowo" zaimplementowany w 32-bitowym Winsock'u Windows NT i Windows 95. Wreszcie ostatnią platformą, na której realizować można multicasting, jest Macintosh - zapewnia to zawarty w Systemie 7.5.2 moduł sieciowy OpenTransport.
Obecny stan routingu multicastingowego jest jeszcze bardzo daleki od sytuacji, w której pakiety multicastingowe mogłyby być swobodnie przesyłane w całym Internecie. Aktualnie mamy do czynienia z izolowanymi od siebie "multicastingowymi wyspami", składającymi się z jednej lub kilku sieci lokalnych, zawierających komputery z zaimplementowanym multicastingiem i połączonych ze sobą za pomocą mrouted bądź firmowych routerów "rozumiejących" pakiety multicast. W obrębie takiej "wyspy" możliwe są transmisje multicastingowe, prędzej czy później osiągamy jednak jej granicę - router prowadzący do "zewnętrznej" sieci, w której przesyłane są już tylko "zwykłe" pakiety TCP/IP. W takich sytuacjach program mrouted umożliwia tworzenie tzw. tuneli, pozwalających na przekazywanie pakietów multicastingowych pomiędzy "wyspami" niejako tranzytem, poprzez sieci nie zapewniające wsparcia dla multicastingu. Pakiety multicastingowe są w tym celu przez mrouted "zawijane" w zwykłe pakiety TCP/IP i wysyłane na adres drugiego komputera z mrouted, który je "odpakowuje" i przesyła dalej w sieci znowu jako multicast (rys.3). Oczywiście adresy obu "końców" tunelu muszą być zadane w sposób jawny.
"Wyspy" multicastingowe połączone tunelami utworzonymi przez mrouted tworzą w Internecie globalną, wirtualną sieć pozwalającą na przesyłanie transmisji multicastingowych - tzw. MBONE (Multicast Backbone). Sieć MBONE jest jeszcze bardzo "dziurawa" i obejmuje swoim zasięgiem bardzo niewielki obszar Internetu. W Polsce do MBONE należą cztery sieci lokalne w trzech miastach, połączone tunelami (zob.rys.4): sieć Instytutu Matematyki i Informatyki Uniwersytetu im. Mikołaja Kopernika w Toruniu, skupiona wokół routera mbone.mat.uni.torun.pl, część sieci lokalnej Cyfronetu w Krakowie, z routerem mg.cyf-kr.edu.pl, Uczelniane Centrum Informatyki Akademii Górniczo-Hutniczej, również w Krakowie (router galaxy.uci.agh.edu.pl), oraz część sieci lokalnej NASK-u w Warszawie, z obsługującym tunel do Sztokholmu routerem legolas.nask.waw.pl. W trakcie uruchamiania jest router multicastingowy na serwerze Internetu dla Szkół w Warszawie - idsserv.waw.ids.edu.pl.
Układ tuneli łączących poszczególne "wyspy" w MBONE wypracowywany jest w sposób nieco podobny, jak struktura feedów Usenetowych, na drodze wzajemnych uzgodnień między administratorami poszczególnych sieci dołączających się do MBONE - chodzi o utworzenie struktury jak najbardziej optymalnej, obciążającej łącza w możliwie najmniejszym stopniu. Szacuje się, iż pasmo przepustowe całej MBONE wynosi obecnie około 300 do 500 Kbps, a więc pozwala na równoczesne przesyłanie nawet kilku transmisji wideo lub kilkunastu audio (zwłaszcza przy dużym stopniu kompresji). W rzeczywistości w sieci może być przesyłanych więcej transmisji równocześnie, jako że routery multicastingowe przesyłają pakiety tylko do tych podsieci, w których rzeczywiście "ktoś słucha" danej transmisji, tzn. w których znajduje się chociaż jeden komputer należący do danej grupy. Każdy komputer dołączając się bądź odłączając od grupy wysyła specjalny pakiet, informujący o tym fakcie wszystkie komputery w sieci lokalnej - a przede wszystkim routery. Niezależnie od tego, routery w ustalonych odstępach czasu "odpytują" wszystkie komputery w sieci lokalnej, uzyskując informację o ich aktualnej przynależności do grup (wszystkie te komunikaty wysyłane są rzecz jasna jako multicast - wykorzystywany jest w tym celu specjalny "administracyjny" adres 224.0.0.1). Dzięki tym informacjom router multicastingowy, zupełnie analogicznie jak "normalny" router, może przepuszczać do danej podsieci tylko te pakiety, które rzeczywiście mają odbiorców w tej podsieci.
Istnieje również uzupełniający mechanizm, pozwalający niejako "odgórnie" ograniczać zasięg transmisji multicastingowej. Specyfikacja przedstawiona w RFC 1112 zawiera wymaganie, aby w komputerach obsługujących multicasting istniała możliwość określania przez aplikację wartości tzw. parametru TTL (time-to-live, czas życia) wysyłanych pakietów multicastingowych. Każdy router multicastingowy zmniejsza wartość tego parametru o 1, i gdy osiągnie ona zero, pakiet nie jest przesyłany dalej. Dodatkowo, aby przekroczyć pewne "punkty krytyczne" w MBONE, pakiet musi mieć dostatecznie wysoką wartość TTL. Zgodnie z przyjętą konwencją, pakiety o TTL mniejszym od 32 są ograniczone do tego samego "miejsca" (site), TTL < 64 - do tego samego "regionu", a TTL < 128 - do tego samego kontynentu. Pojęcia "miejsca" oraz "regionu" nie są dokładnie określone i ich interpretacja zależy od lokalnej struktury sieci (w Polsce "miejsce" obejmuje sieć w obrębie jednego miasta). Stosowane są również progi o pośrednich wartościach - przykładowo w Polsce TTL < 40 ogranicza transmisję do obszaru kraju.
Dziękuję Rafałowi Maszkowskiemu <rzm@torun.pdi.net> za konsultację tekstu oraz informacje o aktualnej topologii sieci MBONE w Polsce.
Powrót do wykazu artykułów o Internecie | Statystyka |