www.eprace.edu.pl » sieci-p2p » Technologia programów P2P w praktyce » Skype

Skype

Skype jest programem służącym do głosowego komunikowania się poprzez sieć komputerową. Został stworzony przez osoby, które wcześniej wprowadziły na rynek program wymiany plików Kazza. Przedstawiony poniżej opis technologii programu powstał głównie w oparciu o dokumenty [6], [7] i oficjalną stronę Skype. Niestety z powodu niedostępności opisu protokołu i faktu, że wszystkie komunikaty są kodowane, w pracy nie będą podane i opisane ich nazwy, jak i dokładna zawartość.

Struktura sieci

Po zainstalowaniu oprogramowania Skype na komputerze osobistym, staje się on częścią sieci Skype zwaną węzłem. Generalnie w klasycznej sieci możemy wyróżnić dwa rodzaje węzłów. Pierwszy określany jest mianem zwykłego (SC – Skype Client), a drugi tzw. superwęzła (ang. supernode) – stąd skrót SN. Trzecim elementem w sieci jest serwer logowania LS (Login Server) (rys. 39, w dalszej części rozdziału).

Zwykły węzeł w sieci może prowadzić rozmowy głosowe, wysyłać i odbierać wiadomości tekstowe. Dodatkowa funkcjonalność przewidziana jest dla superwęzłów. Aby dany komputer mógł pełnić rolę superwęzła, musi przede wszystkim posiadać publiczny adres IP, dodatkowo musi spełnić kilka warunków dotyczących odpowiedniej wielkości takich parametrów jak:

Oczywiście superwęzeł posiada tą samą funkcjonalność, co zwykły węzeł. Jako trzeci element sieci Skype wymieniony został serwer logowania. W serwerze tym zapisane są informacje takie jak: nazwa użytkownika (userID) i jego hasło. Nazwa użytkownika jest jego unikatowym identyfikatorem w przestrzeni całej sieci. Należy zauważyć w tym miejscu, że serwer logujący jest jedynym zdecentralizowanym elementem opisywanej architektury.

Rysunek 39 Przykładowa struktura sieci Skype

Pisząc o klasycznej sieci Skype, zwraca się uwagę, że w sieci Skype istnieją jeszcze inne węzły takie jak serwery SkypeOut i SkypeIn, których rola polega na połączeniu sieci Skype z siecią PTSN.

Węzły SC przechowują listę superwęzłów, z którymi mogą się połączyć. Lista ta nazywana jest host cache (HC) i zawiera IP adresy i porty super węzłów. Dzięki technologii 3G GI SC może odnaleźć innego użytkownika, który logował się do sieci przez ostatnie 72 godz.

Skype używa kodów szerokopasmowych, zapewniających dobrą jakość połączenia głosowego przy paśmie rzędu 32 kb/s.

Numery portów

By zapewnić sobie komunikację z innymi klientami sieci Skype, po uruchomieniu SC nasłuchuje na odpowiednich portach przychodzących połączeń. Otwierany jest port protokołu TCP jak i UDP. Numery portów są generowane losowo podczas instalacji oprogramowania. Dodatkowo SC nasłuchuje również na portach TCP 80 i 443, czyli portach standardowo obsługujących HTTP i HTTPS. Nasłuchiwanie na portach 80 i 443 jest alternatywą dla ustawienia podstawowego. Numer portu, na którym nasłuchuje SC jest, jak już wspomniano, generowany losowo i dzieje się to podczas instalowania oprogramowania klienta. Port ten można ustawić również ręcznie. Dodatkowo SC może łączyć się z siecią poprzez serwer proxy i socks. Liczebność rozwiązań została wprowadzona ze względu na umożliwienie potencjalnemu klientowi połączenie z siecią, w przypadku korzystania z oprogramowania Skype na komputerze znajdującym się za zapora sieciową bądź NATem.

Lista host cache

Lista HC (host cache) zawiera adresy IP aktywnych superwęzłów i porty, na których dany SN nasłuchuje połączenia. Lista ta jest zapisana i okresowo aktualizowana w postaci pliku XML, zapisanego w sposób niezakodowany na dysku komputera z zainstalowanym Skype. Przy każdym logowaniu, Skype próbuje nawiązać połączenie TCP z SN, który znajduje się na liście HC. Jeżeli SC nie udaje się połączyć z SN z listy, próbuje połączenia z siedmioma SN zakodowanymi na stałe wewnątrz plików wykonywalnych Skype.

Kodeki używane w połączeniach Skype

Skype używa kodeków firmy Global IP Sound (GIPS) i są to kodeki iLBC, iSAC, iPCM. Kodeki te zapewniają pasmo przenoszenia dźwięku między 50 a 8000 Hz.

Kodek iSAC charakteryzuje zdolność do dostosowywania szybkości transferu danych do przepustowości łącza (średnio 3-16 kB/s), nie potrzebuje też, jak kodeki CEPL (Code Excited Linear Prediction) używane w GSM, testowej próbki sygnału, potrzebnej do resynchronizacji w przypadku utraty połączenia. Kodek iLBC wykorzystywany jest przy połączeniach z wykorzystaniem łącza o małej przepustowości.

Po stronie nadawczej do optymalizacji poziomu sygnału i redukcji szumu, wykorzystuje się procedurę GIPS AGC (Adaptive Gain Control). Natomiast po stronie odbiorczej wykorzystywana jest metoda GIPS NetEQ APC (Adaptive Playout Controller). Polega ona na buforowaniu przychodzących pakietów z próbkami dźwięku, w celu zminimalizowania różnicy opóźnień miedzy kolejnymi przychodzącymi pakietami, tzw. jitter (fluktuacje fazy).

Szyfrowanie danych

W celu zapewnienia bezpiecznego przesyłania danych miedzi węzłami sieci Skype, twórcy oprogramowania zaimplementowali w nim automatyczne szyfrowanie. Jest to o tyle ważna kwestia, iż Skype do swojego działania wykorzystuje ogólnodostępną sieć internetową, a także, o czym dokładniej napisane będzie w dalszej części niniejszej pracy, dla pary SC o prywatnych adresach IP rozmowa musi być przekazywana przez pośredniczący węzeł SN. System, z którego korzysta Skype nazywa się AES (Advanced Encryption Standard) – znany również pod nazwą Rijndael. Jest to 256 bitowe szyfrowanie, obejmujące każdą przeprowadzaną rozmowę i wysyłaną wiadomość. Klucze AES są uzgadniane poprzez algorytm RSA ( 1536-2048 bitów).

Inicjowanie pierwszego połączenia do sieci Skype

Podczas pierwszego uruchomienia Skype, proces inicjowania połączenia odbywa się nieco inaczej, niż w kolejnych próbach. Przede wszystkim lista host cache jest pusta, a więc klient nie zna adresów superwęzłów, z którymi ma się połączyć. W tym przypadku wykorzystuje siedem adresów IP SN, które ma zapisane na stałe w programie instalacyjnym. Można zauważyć, że dla każdego z siedmiu SN wykorzystywany jest do połączenia port o numerze 33033. Jednakże pierwszą i zarazem jedyną nieszyfrowaną operacją, jaką wykonuje SC po uruchomieniu, jest informacja o zainstalowanej wersji programu. Zapytanie to przedstawia się następująco:

GET /ui/0/97/en/installed HTTP/1.1

User-Agent: Skype™ Beta 0.97

Host: ui.skype.com

Cache-Control: no-cache

W odpowiedzi serwer przesyła:

HTTP/1.1 200 OK

Date: Tue, 20 Apr 2004 04:51:39 GMT

Server: Apache/2.0.47 (Debian GNU/Linux) PHP/4.3.5

mod_ssl/2.0.47 OpenSSL/0.9.7b

X-Powered-By: PHP/4.3.5

Cache-control: no-cache, must revalidate

Pragma: no-cache

Expires: 0

Content-Length: 0

Content-Type: text/html; charset=utf-8

Content-Language: en

Przy kolejnym uruchomieniu serwera, kierowane jest zapytanie o nowszą wersję programu:

GET /ui/0/97/en/getlatestversion?ver=0.97.0.6 HTTP/1.1

User-Agent: Skype™ Beta 0.97

Host: ui.skype.com

Cache-Control: no-cache

Serwer odpowiada w następujący sposób:

HTTP/1.1 200 OK

Date: Tue, 20 Apr 2004 04:51:40 GMT

Server: Apache/2.0.47 (Debian GNU/Linux)

PHP/4.3.5 mod_ssl/2.0.47 OpenSSL/0.9.7b

X-Powered-By: PHP/4.3.5

Cache-control: no-cache, must revalidate

Pragma: no-cache

Expires: 0

Transfer-Encoding: chunked

Content-Type: text/html; charset=utf-8

Content-Language: en

2

96

0

SC uzyskuje informacje o aktywnych superwęzłach i ewentualnie określa rodzaj firewalla i NAT’a, za którym się znajduje, jak również informuje inne węzły o swojej obecności w sieci.

W pierwszej kolejności SC wysyła dwa zapytania UDP, do wszystkich na stałe zaimplementowanych adresów IP superwęzłów, z wykorzystaniem portu 33033 i (o ile nie jest zablokowane połączenie z wykorzystaniem protokołu UDP) otrzymuje dwie odpowiedzi (rys. 40)

Rysunek 40 Wymiana pakietów UDP8

Pierwszy pakiet UDP1 ma objętość 18 bajtów, UDP2 11 bajtów, UDP3 23 bajtów, a ostatni pakiet odpowiedzi od SN ma 18, 51 bądź 53 bajty. Pakiety te zawierają takie informacje jak:

Ilość bajtów wysłanych w pakiecie UDP4 ma znaczenie. Jeżeli UDP4 jest 18 bajtowe, to kolejnym krokiem będzie połączenie się węzła SC do tego samego superwęzła z użyciem protokołu TCP. Jeżeli UDP4 ma wartość 51 lub 53 bajty, to połączenie nie może być nawiązane i cała procedura jest rozpoczynana przez SC od początku z innym SN.

Po udanej wymianie wiadomości miedzy SC i SN z użyciem protokołu UDP tzn. otrzymaniu przez SC komunikatu UDP4 o długości 18 bajtów, następuje wymiana wiadomości z wykorzystaniem protokołu TCP. Połączenie protokołem TCP również wykorzystuje port 33033. Jeżeli zostanie on zablokowany, to SC próbuje połączyć się z SN z wykorzystaniem portów 80 i 443. Połączenie to zostaje otwarte, aż do zakończenia pracy przez SC.

Istnieje jednak odstępstwo od tej reguły. W przypadku, gdy serwer SN nie odpowiada (zerwane połączenia lub wyłączenie SN) bądź SN nie może obsługiwać dłużej danego SC (SN nie może dłużej pełnić swojej roli), połączenie TCP zostaje nawiązane z innym SN. Na rysunku 41 przedstawiono schemat połączenia TCP SC i SN.

Rysunek 41 Wymiana pakietów TCP między SC i SN9

Kolejnym krokiem jest wysyłanie 4 pakietów ICMP do 4 różnych superwęzłów rysunek 42.

Rysunek 42 Wysłanie pakietów ICMP

Logowanie do sieci

Następnym etapem połączenia jest autoryzacja na serwerze logowania SL, który jest jedynym scentralizowanym elementem w sieci. Schemat wymiany wiadomości między SC i SL przedstawia rysunek 43. Połączenie dokonywane jest przy użyciu protokołu TCP i jest zamykane po zakończeniu operacji.

Rysunek 43 Wymiana informacji między SC i LS

Ilość wysłanych wiadomości zależy od tego czy podane informacje (nazwa użytkownik i jego hasło) są poprawne. Tak samo jak w przypadku połączenia opisywanego wcześniej między SC i SN tak i tutaj, jeżeli port używany prze SC jest zablokowany, SC nawiązuje połączenie z LS za pomocą na ogół otwartych portów 80 i 443. Z informacji dostępnych z różnych źródeł w Internecie wynika, że istnieją dwa serwery logowania Skype o adresach:

Zaznaczenie w konfiguracji oprogramowania Skype automatycznego logowania, oznacza zapisanie nazwy użytkownika i jego hasła w pliku config.xml, tym samym, który zawiera listę host cache.

2.3.7.1. Logowanie do sieci z pośrednictwem SN

Kwestia autoryzacji wygląda nieco inaczej, gdy SC nie posiada publicznego adresu IP, wtedy logowanie może odbyć się za pośrednictwem superwęzła.

Proces kolejnego połączenia się do sieci

Opisany poniżej proces dotyczy kolejnych prób logowania się do systemu, następujących po pierwszej, udanej próbie (opisanej w poprzednich podrozdziałach).

Logowanie się do sieci można podzielić zasadniczo na dwa etapy. Pierwszy to nawiązanie połączenia z jednym z SN z listy HC (bądź, jeżeli jest to pierwsze logowanie, to ze „stałym” SN), a drugi etap to autoryzacji na serwerze SL.

SC próbuje nawiązać połączenie protokołem UDP z SN z listy host cache. Jeżeli mu się to nie udaje, po 5 sekundach próbuje połączyć się z wykorzystaniem protokołu TCP. Oczywiście należy tu zaznaczyć, że połączenia z SN następuje poprzez port przydzielony podczas instalacji oprogramowania Skype bądź skonfigurowanego ręcznie przez użytkownika. Jeżeli ta próba zakończy się niepowodzeniem, SC próbuje połączyć się z SN za pośrednictwem portu 80, jeżeli port 80 również byłby zablokowany, SC próbuje nawiązać połączenia za pośrednictwem portu 443. Twórcy oprogramowania Skype umożliwili też współpracę swojego oprogramowania dla przypadku serwera pośredniczącego proxy http, jak i socks 5. W menu konfiguracyjnym można wprowadzić odpowiednie wartości adresów IP i portów, poprzez które należy się łączyć w przypadku występowania w danej architekturze sieci wyżej wymienionych serwerów. W przypadku używania Skype na komputerze z zainstalowanym systemem Windows, Skype może sam wykryć ustawienia proxy/socks na podstawie ustawień Internet Explorera. Jeżeli któryś z opisanych sposobów połączenia z SN zakończy się powodzeniem SC nawiązuje połączenie TCP z serwerem logowania.

Wyszukiwanie użytkowników w sieci

Według zapewnień twórców Skype, klient jest w stanie wyszukać użytkownika, który logował się do sieci w ciągu ostatnich 72 godzin. Skype wykorzystuje technologię Global Index (GI) do wyszukiwania użytkowników. Technologia GI określana na stronach producenta Skype jako technologia trzeciej generacji „3G P2P”. Technologia ta nie wykorzystuje, jak ma to miejsce w tradycyjnych rozwiązaniach centralnej bazy danych, tylko używa tzw. wielowarstwowej sieci. Superwęzły stale utrzymują ze sobą połączenie, wymieniając informacje na temat dostępnych użytkowników. Na stronie internetowej Skąpe informuje, że każdy SN w sieci dysponuje „pełnym zasobem wiedzy o dostępnych użytkownikach i zasobach przy minimalnym czasie oczekiwania”. Baza danych, którą posiadają SN, zawiera nazwy użytkowników ,ich profile i przypisane im adresy IP komputerów z których się logowali. Należy w tym miejscu podkreślić, że adres IP danego użytkownika jest zmieniany za każdym razem, gdy loguje się on z użyciem innego komputera, czyli w praktyce z innego miejsca. Interfejs wyszukiwania użytkowników jest podobny do większości znanych tego typu rozwiązań stosowanych w innych programach.

2.3.9.1. SC z publicznym adresem IP

Proces wyszukiwania użytkownika rozpoczyna się wysłaniem zapytania do węzła SN, przy użyciu protokołu TCP. SN w odpowiedzi wysyła do węzła SC informację zawierającą adresy IP i porty ośmiu innych SN. SC wysyła zapytania o wyszukiwanego użytkownika do 8 otrzymanych SN, używając protokołu UDP (rys. 44). Jeżeli nie otrzyma informacji o wyszukiwanym użytkowniku, ponownie kontaktuje się z SN (tym samym, co poprzednio), informując o niepowodzeniu. Sytuacja się powtarza, z tym że, SN wysyła teraz dwa razy większą liczbę adresów innych SN. Jak poprzednio SC wysyła pakiety UDP do 16 SN z zapytaniem szukanego użytkownika. Proces ten trwa, aż do znalezienia danego użytkownika albo do uzyskania informacji, że taki użytkownik nie istnieje. Średni czas wyszukiwania to około 3 lub 4 sekundy, a odpytywanych jest średnio ponad 24 superwęzły.

SN zapisuje informacje o znalezionym przez niego użytkowniku, dzięki czemu przy kolejnej próbie wyszukania tego samego użytkownika rezultat wyszukiwania jest dostępny znacznie szybciej.

Rysunek 44 Schemat wyszukiwania użytkowników – S.C. z publicznym adresem IP N1, N2, N3, N4 – oznaczają kolejne węzły

2.3.9.2. SC z prywatnym adresem IP i za zaporą sieciową

W tym przypadku SC wysyła zapytanie do węzła SN, z którym nawiązał połączenia wcześniej podczas logowania. Jest to jedyny SN, z którym w czasie tej operacji łączy się węzeł SC. Wynika z tego, że SN w imieniu SC wyszukuje użytkownika, a następnie powiadamia o jego wyniku SC (rys. 45).

Rysunek 45 Proces wyszukiwania użytkownika – użytkownik za NAT’em i za zaporą sieciową. N1, N2, N3, N4 – oznaczają kolejne węzły

Nawiązanie połączenia głosowego

Możliwość prowadzenia rozmów jest głównym zadaniem, jakie ma spełniać Skype. Tak jak powyżej zostaną przedstawione trzy scenariusze komunikacji uzależnione od architektury sieci, w jakiej znajdzie się SC dzwoniący i SC odbierający połączenie. Cechą wspólną wszystkich trzech przedstawionych sytuacji jest to, że za każdym razem komunikacja zestawiana jest przy użyciu protokołu TCP.

2.3.10.1. SC dzwoniący i odbierający posiadają publiczne adresy IP

W tym przypadku dzwoniący nawiązuje połączenia bezpośrednio z SC, do którego dzwoni. Rysunek 46 przedstawia tą sytuację.

Rysunek 46 Nawiązanie połączenia głosowego, dzwoniący i odbierający posiadają publiczny IP

2.3.15.2. SC dzwoniący z prywatny adresem IP, odbierający z publicznym

Dzwoniący inicjuje połączenie TCP pośrednio poprzez superwęzeł. Jeżeli połączenie zostanie już nawiązane, to wymiana pakietów VIP (Voice over Internet Protocol) odbywa się bezpośrednio między SC dzwoniącym i odbierającym, przy użyciu protokołu UDP.

2.3.10.3. Oba SC z prywatnymi adresem IP bądź są za zaporami sieciowymi

Jest to najciekawszy i najbardziej skomplikowany spośród wymienionych przykładów. Obie strony nie mogą w żaden sposób zestawić ze sobą połączenia, więc korzystają z SN. Należy zaznaczyć, że każdy z SC korzysta z innego SN przy wymianie pakietów sygnalizacyjnych. Po zestawieniu połączenia za pośrednictwem superwęzłów, wymiana pakietów VoIP odbywa się również poprzez węzeł SN z wykorzystaniem protokołu TCP (rys. 45).

Rysunek 47 SC dzwoniący i odbierający posiadają prywatne adresy IP bądź są za zaporami sieciowymi

Przypadek ten pokazuje, że w praktyce komputer, który staje się superwęzłem musi udostępniać swoje zasoby, w dość szerokim stopniu, innym użytkownikom.

Przesyłanie pakietów głosowych

Generalnie przesyłanie pakietów głosowych odbywa się z wykorzystaniem protokołu UDP chyba, że jedna ze stron nie ma możliwości używania tego rodzaju protokołu. Wielkość pakietów głosowych zawiera się między 40 a 120 bajtów w przypadku protokołu UDP, i od 30 do 90 bajtów w przypadku protokołu TCP. Średnio do transmisji tych pakietów wykorzystywane jest pasmo ok. 5 kB/s. Minimalne pasmo przy jakim jakość dźwięku pozwala na rozmowę wynosi 2 kB/s.

Połączenia konferencyjne

Skype posiada możliwość prowadzenia połączenia konferencyjnego między użytkownikami swojej sieci. Dla zademonstrowania mechanizmu obsługi takiej konferencji poczynione zostały pewne założenia. W konferencji biorą udział 3 węzły i każdy posiada publiczny adres IP. Najpierw zestawiane jest połączenia między użytkownikiem A i B, a następnie A dołącza do konferencji C. Rysunek 48 przedstawia, w jaki sposób wysyłane są pakiety głosowe miedzy uczestnikami konferencji.

Rysunek 48 Schemat połączenia konferencyjnego

Węzły B i C wysyłają pakiety do A, który miksuje je ze swoimi i wysyła odpowiednio do B i C. Wszystkie pakiety wysyłane są z użyciem protokołu UDP.

Podsumowanie

Powyższy opis protokołu jest bardziej zarysem zastosowanych w nim rozwiązań i technologii, niż dogłębnym całościowym zbiorem przesyłanych komunikatów i wykorzystywanych technik. Da się zauważyć, że twórcy Skype stworzyli produkt, który z ekonomicznego punktu widzenia jest fenomenem. Operator Skype nie musi inwestować w liczne, drogie w utrzymaniu serwery, obsługujące ruch w sieci, gdyż rola ta spada na maszyny klientów w sieci, które stają się superwęzłami, udostępniając w ten sposób swoje zasoby innym, anonimowym względem nich, użytkownikom. Warto podkreślić, że producent nie daje możliwości wyłączenia w swoim oprogramowania funkcji superwęzła, nie informuje też jednoznacznie, jakie warunki trzeba spełnić, by nim być. Jedynym pewnikiem jest tutaj posiadanie publicznego adresu IP.

Patrząc na Skype od strony technologicznej widać duży postęp aplikacji w świece P2P. System jest zdecentralizowany, umożliwia prowadzenie rozmów głosowych w sposób bezpieczny i o dużej jakości dostosowywanej dodatkowo do możliwości łącza. Umożliwia również przeprowadzanie rozmów konferencyjnych, w chwili obecnej z 4 osobami. Obecnie dostępne są już video rozmowy, na razie w wersji beta.



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.