Mobilność w świecie IP

Wstęp

Współczesny szybki rozwój sieci Internet, mnogość aplikacji a przede wszystkim coraz większa liczba korzystających z niej urządzeń, stawia przed obecnie istniejącymi metodami adresacji (protokół IP) bardzo poważny problem. W niedalekiej przyszłości (rok 2004) większość mobilnych urządzeń (telefony komórkowe, PDA) będzie miała stały dostęp do sieci. Ich liczbę szacuje się na jeden miliard co, w połączeniu z obecnie podłączonymi urządzeniami oraz adresami zarezerwowanymi, może przekroczyć magiczną liczbę możliwych do uzyskania adresów. Już od kilku lat istnieje rozwiązanie kwestii zwiększenia tej liczby - protokół IPv6.

IPv4 i IPv6 podstawowe różnice

Zacznijmy jednak od początku. Każdemu z urządzeń w sieci musi być przypisany adres IP. Jest to 4 bajtowa liczba zapisywana zwykle jako x.x.x.x, gdzie x jest z zakresu 1 do 254, co daje maksymalna liczbę kombinacji na poziomie 4,2 miliarda, a równocześnie jest maksymalną ilością urządzeń możliwych do przyłączenia. Protokół IPv6 oferuje nam 16 bajtowy adres, który ma praktycznie nie ograniczoną liczbę adresów. Dodatkowo projektanci wzbogacili IPv6 o kilka rozwiązań, które były bolączką wersji czwartej, są to:

Wszystkie to zalety są jednak okupione zwiększeniem objętości nagłówka IP, który w wersji czwartej miał 20 oktetów, a w wersji szóstej rozrósł się do 40 oktetów. Może też on zawierać dodatkowe nagłówki dotyczące bezpieczeństwa, fragmentacji i routingu. Przy obecnych parametrach transmisyjnych nie jest to jednak koszt znaczący, szczególnie wobec wielu przytoczonych zalet. Przyjrzyjmy się dokładnie mechanizmom umożliwiającym mobilność, zdefiniujmy to pojęcie i wykażmy znaczącą rolę IPv6 w tym kontekście.

Mobilność

Mobilność jest złożoną koncepcją, którą możemy obecnie obserwować w trzech różnych formach:

Obecnie termin mobile-IP jest często używany wyłącznie dla określenia zdo1ność komputera do przenoszenia się z jednej sieci IP do innej bez konieczności zmiany własnego adresu IP, a więc bez powtórnego nawiązywania połączenia przez protokoły warstwy wyższej (np. TCP). Należy podkreślić, że obecne rozwiązania lokalnych bezprzewodowych sieci komputerowych najczęściej nie wykorzystują mobile-IP, gdyż będące w nich urządzenia mobilne bez względu na swoje położenie zawsze pozostają w jednej przestrzeni adresowej.

Mobilność w schemacie podstawowym

Mobile Node(MN) Host zmieniający miejsce swojego przyłączenia z jednej sieci do drugiej, ale nadal osiągalny pod swoim adresem domowym
Correspondent Node (CN) Host komunikujący się z hostem mobilnym, może być hostem stacjonarnym lub mobilnym
Home Agent (HA) Router sieci domowej hosta mobilnego, znający adres domowy tego hosta, przyjmujący pakiety do niego adresowane i tunelujący je na adres CoA
Foreign Agent (FA) Router w sieci obcej, przyznający adres CoA i przekazujący hostowi mobilnemu pakiety odebrane od HA
Care-of-address (CoA) Lokalny adres IP sieci obcej przypisany hostowi mobilnemu na czas przebywania w tej sieci. Jest on przekazywany agentowi domowemu hosta mobilnego, by wiedział on o jego bieżącej lokalizacji.
Przedstawiony na diagramie 1 podstawowy model mobilności, pokazuje schemat komunikacji hosta mobilnego (MN), przemieszczającego się ze swojej sieci domowej do sieci obcej z zachowaniem ciągłości komunikacji. Po opuszczeniu sieci domowej host mobilny (MN) otrzymuje od agenta w sieci obcej (FA) adres IP (CoA) pod jakim będzie osiągalny w tej sieci. Następnie host mobilny (MN) rejestruje się pod tym adresem w swojej sieci lokalnej, a dokładnie u swojego agenta domowego (HA). Od tej pory agent domowy (HA) będzie przyjmował wszystkie pakiety adresowane do hosta mobilnego (MN) oraz będzie je przesyłał do swojego odpowiednika - agenta w sieci obcej (FA). Agent sieci obcej (FA), który wcześniej przyznał adres (CoA) hostowi mobilnemu (MN), wie o jego obecności, a także zna jego adres IP, przekaże mu więc te pakiety. Host komunikujący (CN) się z hostem mobilnym wysyła pakiety dokładnie tak samo jak wtedy gdy host mobilny (MN) był jeszcze w swojej sieci domowej. Wysyłanie pakietów przez host mobilny (MN) jest po prostu zwykłym wysyłaniem pakietów IP, gdzie adresem docelowym jest adres hosta komunikującego (CN) się z nim, a adresem źródła jest jego adres domowy. Jeśli host mobilny (MN) powróci do swojej sieci domowej, to będzie normalnie otrzymywał adresowane do siebie pakiety, jeśli ją znów opuści, będzie je odbierał agent domowy (HA). Agent domowy (HA) jest zawsze poinformowany o bieżącym położeniu hosta mobilnego, enkapsułuje przychodzące do niego pakiety i przesyła do obcego agenta (FA), który je dekapsułuje i przekazuje bezpośrednio hostowi mobilnemu [10]. Wykorzystuje się tu technologie enkapsulację protokołu IP w IP (tunelowanie IP w IP), korzystanie z niej można udogodnić wykorzystując protokół IPv6, który ułatwia automatyczne przydzielanie adresów hostom oraz routowanie, dzięki czemu w IPv6 nie ma agentów zdalnych (FA).

Pierwsze problemy

Przedstawione powyżej rozwiązanie problemu mobilności przy zachowaniu stałego adresu wydaje się być poprawne. Istnieje jednak poważny problem optymalizacyjny, polegający na tym że wszystkie pakiety, wysyłane do hosta mobilnego (MN), nawet przez host znajdujący się w tej samej sieci obcej co on, wędrują najpierw do agenta domowego - diagram 2. Wystarczy sobie wyobrazić, że pomiędzy sieciami domową i obcą jest duża odległość lub istnieje tylko jedno łącze o niskiej przepustowości. Problem trójkątnego rutingu (triangle routing) rozwiązano zezwalając hostowi komunikującemu się (CN) na bezpośrednią komunikację z obcym agentem (FA), jeśli tylko zna jego adres. Największą niedogodnością tego rozwiązania jest obowiązek informowania o zmianie lokalizacji już nie tylko agenta domowego, ale wszystkich hostów z którymi obecnie komunikuje się host mobilny. Nie jest to jednak możliwe bez działania na tych hostach specjalistycznego oprogramowania.


Inne udogodnienia

Poza przytoczonym, istnieje jeszcze szereg innych udogodnień, mających na celu optymalizację komunikacji z hostem mobilnym w sieci obcej. Zauważmy, że krytycznym punktem naszego modelu jest agent domowy (HA), w razie jego awarii żaden z hostów mobilnych nie będzie mógł się komunikować. Stosunkowo prostym rozwiązaniem jest aktywacja kilku agentów domowych. Innym ciekawym pomysłem jest hierarchizacja mobilność. Podział na mikro i makro bloki, z których każdy posiada wiele obcych agentów wykorzystuje mechanizm regionalnej rejestracji (Regional Registration).

Mobilność w systemie Linux

Linux od wersji 2.1.90 posiada możliwość korzystania z protokołu IPv6. W jądro wbudowane są mechanizmy umoż1iwiające komunikacje zarówno poprzez protokół IPv4 jak i IPv6. Standardowo nie posiada natomiast żadnego wsparcia dla Mobile-IP. Jest wiele projektów zajmujących się zagadnieniem implementacji tego protokołu. Do testów została wybrana implementacja MIPL w wersji 0.9 rozwijana na HUT (Helsinki University of Technology) przez grupę GO/Project, udostępniona na zasadach licencji GPL. Składa się on z dwóch części: łatki (patch) do jądra oraz programu mipdiag, umożliwiającego diagnostykę oraz konfigurację modułu. Dołączone są również przykładowe pliki konfiguracyjne oraz skrypt startowy dla dystrybucji RedHat, SuSe oraz Debian.

Zmiany w jądrze systemu

Poprawna instalacja i konfiguracja pakietu wymaga posiadania źródeł jądra systemu. W zależności od posiadanej wersji wybieramy z pośród dwóch obecnie dostępnych instalacji mipv6-0.9-v2.4.7 (dla jąder 2.4.4 do 2.4.7) lub mipv6-0.8.1-v2.4.2 (dla jąder 2.4.0 do 2.4.2). Pliki pakietu rozpakowujemy w dowolnej lokalizacji, następnie zakładamy łatę na jądro 'root> patch -p1 < . ./mipv6-0.9-v* .patch'. Możemy teraz przystąpić do konfiguracji jądra 'make config', a po ustawieniu parametrów dotyczących mobile IPv6, rekompilacji i instalacji nowe jądra.

Konfiguracja IPv6

Konfigurację rozpoczynamy od ustawienia parametrów router na którym działa agent domowy (HA) oraz drugiego komputera będącego hostem mobilnym. Dla celów testowych można wykorzystać komputer router wyposażając go w dwa interfejsy sieci przewodowej, jednak ciekawsze rezultaty uzyskuje się z zastosowaniem kart bezprzewodowych. Przykładowe komendy konfiguracyjne zamieszczono w ramkach. Poprawność konfiguracji sprawdzamy testując komunikację pomiędzy hostem mobilnym a drugim interfejsem routera, komendą root> ping6 3ffd:1300:b: :1.

Instalacja i konfiguracja MIPL

W katalogu w którym został on rozpakowany znajduje się katalog userspace. Uruchamiamy w nim skrypt configure, a następnie mobile-ip6. Komendami make, make install odpowiednio kompilujemy i instalujemy narzędzia, manuale i pliki konfiguracyjne. Musimy też stworzyć odpowiednie urządzenie w katalogu /dev, komenda root> mknod /dev/mipv6 dev c 0xf9 0. Konfiguracja pakietu jest zawarta w trzech plikach. Najważniejsze parametry, w tym typ hosta - mobilny lub agent, znajdują się w /etc/network-mip6.conf. Jeśli podczas kompilacji wybraliśmy opcję obsługi autentykacji w pliku /etc/mipv6_sas.conf możemy umieścić odpowiednie wartości. Trzeci z plików /etc/mipv6_ad.conf jest istotny dla hosta typu agent, zawiera bowiem listę adresów hostów mobilnych mogących się z nim łączyć. Domyślnie wszystkie adresy są zabronione. Zawartość plików w konfiguracji agenta wraz z komentarzami znajduje się w ramkach, dużo łatwiejszą konfigurację hosta mobilnego bez problemów uzyskujemy modyfikując odpowiednie wartości. Na jednym z komputerów został również skonfigurowany demon radvd. Służy on do dynamicznego przydzielania adresów IP w wersji szóstej, a także do tworzenia dynamicznych tablic rutingu.

Demon radvd

Protokół IPv6 posiada zaawansowane mechanizmy autokonfiguracji. W celu uzyskania adresu host wysyła zapytania - RS (router solicitations), które są odbierane przez router lub host spełniający jego rolę. Wysyłana odpowiedź - RA (router advertisement) zawiera wszystkie informacje potrzebne hostowi do poprawnej konfiguracji interfejsu sieciowego. W systemie Linux rolę routera odpowiadającego na zapytania RS może pełnić demon radvd. Plik konfiguracyjny demona /etc/radvd.conf zawiera informacje opisujące wartości prefiksów dla poszczególnych interfejsów routera, czasy odświeżania adresów itp.

Uruchomienie

Moduły MIPL aktywujemy za pomocą skryptu startowego mobile-ip6 wygenerowanego podczas kompilacji. Sprawdźmy jednak wcześniej czy moduł jest poprawnie zainstalowany root> ./mobile-ip6 status, komunikat "mobile ip6 module installed…" informuje, że wszystko jest w porządku, napiszmy root> ./mobile-ip6 start. Stan i akcje podejmowane przez moduł możemy teraz śledzić w logach systemowych /var/log/debug. Powyższe operacje musimy oczywiście wykonać na wszystkich komputerach mających działać w ramach naszej struktury mobilnej.

Bibliografia

Autor

Mgr inż. Dominik Radziszowski jest pracownikiem Grupy Systemów Rozproszonych Katedry Informatyki AGH. Od kilku lat prowadzi laboratoria z zakresu sieci komputerowych. Swoje naukowe wysiłki koncentruje obecnie na adaptacji urządzeń PDA dla potrzeb telemedycyny, ze szczególnym uwzględnieniem dostępu bezprzewodowego oraz protokołu IPv6.