Przeprowadzana w telefonach IP transmisja głosu zamienionego na postać cyfrową w wyniku próbkowania i kwantyzacji [37, 39, 71], jest dość skomplikowanym procesem. Samo wysłanie do odbiorcy pakietu zawierającego spróbkowany głos nie gwarantuje jego dostarczenia. Na drodze transmisji może się bowiem znajdować wiele urządzeń sieciowych (takich jak przełączniki czy rutery), które przy dużym obciążeniu sieci mogą pominąć jeden lub wiele pakietów lub też zmienić ich kolejność. Dlatego też wszyscy producenci telefonów IP wyposażają swoje urządzenia w zaawansowane mechanizmy kontrolne – począwszy od numerowania pakietów i sprawdzania ich spójności (sumy kontrolne CRC), poprzez buforowanie i zamianę kolejności przestawionych porcji danych, aż po algorytmy sterowania przepływem (ang. handshake) i żądania retransmisji. W tym rozdziale przedstawiono podstawowe problemy związane z przesyłaniem głosu w sieciach IP a także opisano dodatkowe, często stosowane mechanizmy, takie jak kompresja danych czy też szyfrowanie, których zaimplementowanie rozszerza zakres funkcjonalny telefonu.
Proces transmisji danych zajmuje pewien czas. Jest to związane głównie z przetwarzaniem pakietów w urządzeniach pośredniczących – samo przesłanie informacji w wybranym medium (światłowodzie czy skrętce miedzianej) zajmuje bardzo krótki czas. Co gorsze, przesyłanie danych w rozległych sieciach IP (np. w sieci Internet) wiąże się z opóźnieniami zmiennymi w czasie. Na przykład czasy przesyłania kolejnych pakietów z Warszawy do Nowego Jorku mogą się różnić kilkukrotnie, w zależności od drogi transmisji wybranej dynamicznie przez rutery pośredniczące. Podobny efekt, chociaż w dużo mniejszym stopniu, występuje też w sieciach lokalnych, takich jak Ethernet [15, 30], gdzie czas przesłania pakietu od nadawcy (zapis do układu scalonego odpowiedzialnego za transmisję w sieci Ethernet) do odbiorcy (odczyt pakietu do pamięci) jest uwarunkowany stopniem aktualnego obciążenia sieci a także ilością kolizji [70].
W celu zapewnienia nieprzerwanego strumienia danych z zamienionym na postać cyfrową głosem, po stronie odbiorczej telefonu IP umieszczony jest bufor mogący pomieścić od kilkudziesięciu do kilkuset milisekund spróbkowanego sygnału mowy. Na początku połączenia ten bufor jest wypełniany danymi z odbieranych pakietów, a dopiero potem następuje jego równomierne opróżnianie – kolejne próbki kierowane są do przetwornika cyfrowo-analogowego i zamieniane na analogowy sygnał mowy, który zostaje wzmocniony i przesłany do słuchawki telefonu.
Kontrola regularności odbierania pakietów zawierających mowę w postaci cyfrowej wymaga ich numerowania, a często też opatrzenia każdego pakietu informacją o chwili jego wysłania (ang. timestamp) w postaci zestawu: godzina, minuta, sekunda, milisekunda lub wewnętrznego formatu licznika czasu rzeczywistego w telefonie (np. tylko ilość milisekund liczona od 1 stycznia 2000 roku). Mechanizmy zaawansowanej kontroli regularności transmisji pakietów w czasie rzeczywistym w sieciach IP opisuje protokół RTP [63, 64].
Zbyt długie czasy transmisji głosu pomiędzy nadawcą a odbiorcą powodują niemiłe uczucie rozmawiania na bardzo dużą odległość (podobnie do sygnału telefonii przesyłanej przez satelitę) aż do problemów z rozmową, kiedy to odbiorca mówi jednocześnie z drugim rozmówcą, co tworzy kłopoty ze zrozumieniem drugiej strony. Wprowadzane przez telefon czasy opóźnienia poniżej 50 ms są dopuszczalne i niewyczuwalne. Opóźnienia rzędu kilkuset milisekund stanowią natomiast znaczący problem w komunikacji i powinny zostać wyeliminowane.
Dostatecznie długa przerwa między przychodzącymi pakietami powoduje całkowite opróżnienie bufora. Następuje cisza, tym dłuższa, im dłużej telefon musi czekać na kolejny blok z próbkami mowy nadawcy. Przerwanie odtwarzania z powodu braku danych w buforze, powoduje u odbiorcy odczucie zerwania połączenia. Kiedy podobne przerwy pojawiają się częściej, prowadzenie rozmowy staje się nieprzyjemne. Opracowano szereg metod niwelacji takich przerw w transmisji.
Najprostszym rozwiązaniem jest powtórzenie odtwarzania ostatniego, dostatecznie krótkiego (do 50 ms) bloku próbek. Jeżeli taka sytuacja zdarza się rzadko, otrzymany efekt nie przeszkadza w rozmowie i zwykle nie jest zauważany przez odbiorcę.
Zdecydowanie lepszą metodę stanowi zaimplementowanie generatora szumu komfortowego (ang. comfor noise generator) o mocy zbliżonej do odbieranego tła rozmowy. Większość telefonów IP dostępnych na rynku ma wbudowany taki generator. Wprowadzenie krótkich bloków szumu o dobrze dobranej charakterystyce widmowej nie powoduje u odbiorcy żadnych efektów ubocznych w postaci dyskomfortu prowadzenia rozmowy czy odczucia zrywania transmisji.
Wyjątkiem od zasady zachowania krótkiego czasu transmisji do maksimum 50 ms są systemy telefonii IP udostępniające usługi polegające na transmisji dźwięku głównie w jednym kierunku, takie jak systemy audiotekstowe czy też serwery radia – w tym przypadku czasy transmisji nawet rzędu paru sekund nie stanowią problemu o ile zachowana jest ciągłość przekazu. Pozwala to na zastosowanie odpowiednio dużego bufora, mieszczącego od kilkuset milisekund aż do paru sekund spróbkowanego głosu, możliwa jest predykcja czasu opróżnienia tego bufora i odpowiednio wcześniejsze powiadomienie nadawcy o potrzebie retransmisji zagubionego lub zbyt opóźnionego fragmentu przekazu. W tym celu należy wprowadzić również po stronie nadawczej bufor, w którym zatrzymywane są przez pewien czas pakiety już wysłane do odbiorcy. Po odebraniu żądania retransmisji po stronie nadawczej, pakiet, który jeszcze nie opuścił bufora ze względu na jego przedawnienie, może zostać ponownie przesłany do odbiorcy.
Może się zdarzyć, iż po przeprowadzonej retransmisji pakiet dochodzi do odbiorcy w dwóch kopiach. Taka sytuacja jest łatwa do wyeliminowania przez wprowadzenie u nadawcy numerowania kolejnych porcji danych wysyłanych do sieci, a u odbiorcy odrzucania pakietów powtórzonych. Przy odpowiednio długim buforze (jak w sytuacji opisywanej powyżej), daje to możliwość zmiany kolejności pakietów, które doszły do odbiorcy przestawione, i odtworzenia bloków z głosem we właściwym porządku.
Prawdopodobieństwo wystąpienia znacznego opóźnienia w transmisji pakietu w sieci komputerowej jest zależne w znacznym stopniu od obciążenia sieci. Przesyłanie mniejszych ilości danych pozwala zmniejszyć obciążenie sieci oraz transmitować więcej rozmów prowadzonych jednocześnie. W tym celu dane zawierające głos poddaje się kompresji stratnej czyli usunięciu informacji nadmiarowych, przy akceptowalnych stratach jakości przekazu.
Przetworniki analogowo-cyfrowe [37, 39] stosowane w telefonach IP dają na wyjściu słowo binarne o długości od 12 do 16 bitów. Przy transmisji głosu nie ma potrzeby stosowania większych rozdzielczości bitowych, natomiast zastosowanie przetworników o krótszym słowie (np. 8‑bitowym) spowodowałoby znaczącą redukcję dynamiki przekazu (różnicę w poziomach dźwięków najcichszych i najgłośniejszych) oraz zmniejszenie odstępu sygnału od szumu (ang. SNR) [71].
Prostymi sposobami upakowania danych głosowych, pozwalającymi na zamianę 13‑ lub 14‑bitowych słów na 8‑bitowe bajty, a przy tym zachowującymi dynamikę przekazu, są algorytmy kompresji opisane standardami μ‑law i A-law [73]. Standard μ-law, wprowadzony i używany powszechnie w Stanach Zjednoczonych, definiuje metodę przekształcania próbek 14‑bitowych w 8‑bitowe. Zbliżony do niego algorytm kompresji A‑law, stosowany w Europie, opisuje natomiast sposób transformacji próbek 13‑bitowych w 8‑bitowe. Przez organizację ITU-T ustanowiony został standard G.711 PCM, dający w wyniku kompresji strumień bitowy o przepływności 64 kb/s (słowa 8‑bitowe próbkowane z częstotliwością 8 kHz).
Istnieje wiele innych, bardziej zaawansowanych, algorytmów kompresji mowy, których analiza nie jest przedmiotem niniejszego opracowania. Pozwalają one, wymagając przy tym znacznej mocy obliczeniowej procesora, zmniejszyć strumień danych z głosem nawet dziesięciokrotnie, utrzymując przy tym dobrą zrozumiałość mowy ludzkiej. Oznacza to, iż może zostać prowadzonych dziesięć razy więcej rozmów przy zachowaniu tego samego stopnia obciążenia sieci, niż w przypadku przesyłania mowy nieskompresowanej. Tabela 1 opisuje stosowane w telefonii IP ustandaryzowane przez ITU-T algorytmy kompresji mowy wraz z generowanymi przepływnościami bitowymi (w kilobitach na sekundę) i wymaganą do realizacji algorytmów mocą obliczeniową procesora [68], liczoną w jednostkach MIPS (milionach operacji stałoprzecinkowych na sekundę).
Tabela 1 Standardy kompresji mowy ustanowione przez ITU-T
|
Standard |
Algorytm |
Przepływność [kb/s] |
Wymagana moc obliczeniowa [MIPS] |
|
G.711 |
PCM |
64 |
0,34 |
|
G.726 |
ADPCM |
32 |
14 |
|
G.728 |
LD-CELP |
16 |
33 |
|
G.729 |
CS-ACELP |
8 |
20 |
|
G.729 |
x2 Encodings |
8 |
20 |
|
G.729 |
x3 Encodings |
8 |
20 |
|
G.729a |
CS-ACELP |
8 |
10,5 |
|
G.723.1 |
MP-MLQ |
6,3 |
16 |
|
G.723.1 |
ACELP |
5,3 |
16 |
W sieci lokalnej każdy komputer lub inne urządzenie podłączone do koncentratora, ma możliwość odebrania pakietów skierowanych do wszystkich innych odbiorców. W sieciach rozległych, takich jak Internet, pakiety kierowane od nadawcy do odbiorcy mogą wędrować wieloma różnymi trasami, wyznaczanymi dynamicznie przez rutery w celu minimalizacji czasu transmisji oraz jednakowego rozłożenia obciążenia łącz telekomunikacyjnych. Dlatego też przesyłanie w postaci jawnej rozmowy telefonicznej jest niedopuszczalne dla wszystkich służb i organów, którym zależy na zachowaniu poufności rozmowy. Także zwykły użytkownik na pewno nie chciałby być podsłuchiwany przez włamywacza (ang. hacker), mającego dostęp do komputera umieszczonego na drodze przesyłanych informacji. W celu przeciwdziałania takiemu niebezpieczeństwu do nielicznych telefonów IP wprowadzono mechanizmy szyfrowania (kodowania) danych. W niniejszej pracy zarysowano jedynie podstawy kodowania danych, niezbędne do zrozumienia dalszych rozdziałów.
Szyfrowanie (kodowanie) [62] głosu w telefonach IP polega na zamianie danych zawierających spróbkowany głos rozmówcy na tą samą ilość danych, z których nieuprawniony odbiorca nie będzie mógł odtworzyć rozmowy. Jest to realizowane przy użyciu skomplikowanych algorytmów bazujących na matematycznych przekształceniach w skończonym ciele liczb. Procedury szyfrowania dokonują częściowego wybielenia widma mocy (dokładniej: minimalizują różnice wysokości słupków histogramu rozkładu wartości próbek [71]) w celu ukrycia charakterystycznych wartości występujących w danych wejściowych oraz usunięcia korelacji pomiędzy próbkami (nie jest to konieczne w przypadku szyfrowania danych skompresowanych jednym z wcześniej wymienionych algorytmów).
Oczywiście każdy zaszyfrowany przekaz można przekształcić do oryginalnej postaci, jednakże nieznajomość pewnych dodatkowych informacji (tzw. klucza) powoduje bardzo duży wzrost zapotrzebowania na moc obliczeniową i niemożność pomyślnego zakończenia deszyfrowania w krótkim czasie. Najpewniejsze obecnie stosowane algorytmy kodowania (tzw. niesymetryczne) opierają się na parze kluczy publiczny – prywatny. Klucz prywatny, który stanowi ciąg bitów (zwykle od 40 do 1024), jest znany jedynie nadawcy przekazu. Klucz publiczny natomiast (o tej samej długości), generowany zawsze łącznie z kluczem prywatnym, jest udostępniony wszystkim potencjalnym rozmówcom.
W celu przekazania odbiorcy bloku danych, jest on szyfrowany przy użyciu klucza publicznego odbiorcy. Jedynie właściwy odbiorca wiadomości może ją odszyfrować używając swojego klucza prywatnego. Bez znajomości klucza prywatnego odbiorcy, dekodowanie wiadomości stanowi wyzwanie bardzo obciążające procesor, któremu (przy korzystaniu z odpowiednio długiego klucza) nie sprostają wszystkie obecnie działające komputery na świecie. Rysunek 11 pokazuje schemat najprostszego szyfrowania informacji przy użyciu pary kluczy.

Aby potwierdzić tożsamość nadawcy, stosowany jest dodatkowy krok algorytmu polegający na wstępnym szyfrowaniu danych kluczem prywatnym nadawcy. Dopiero potem dane są szyfrowane ponownie, tym razem kluczem publicznym odbiorcy. Po przyjęciu pakietu przez odbiorcę, może on odszyfrować go swoim kluczem prywatnym a następnie kluczem publicznym nadawcy. To daje pewność, że nadawcą informacji był konkretny rozmówca, a informacja trafiła tylko do konkretnego odbiorcy. Rysunek 12 pokazuje schemat przepływu danych w opisanym algorytmie podwójnego szyfrowania.

W praktyce jednakże, ze względu na dużą czasochłonność obliczeń przy algorytmach z parą kluczy, stosowane są symetryczne algorytmy szyfrowania [62], bazujące na kluczu wspólnym dla nadawcy i odbiorcy. Klucz ten jest ustalany jednorazowo przy nawiązywaniu połączenia (wykorzystuje się algorytmy z parą kluczy) a potem zmieniany co jakiś czas w sposób wyznaczony między nadawcą a odbiorcą.