Emulator bezprzewodowych mobilnych sieci ad
Transkrypt
Emulator bezprzewodowych mobilnych sieci ad
Marcin Frąckowiak Radosław Olgierd Schoeneich Jarosław Domaszewicz Michał Koziuk Instytut Telekomunikacji Politechnika Warszawska Emulator bezprzewodowych mobilnych sieci ad-hoc oparty na sterowniku TUN/TAP W artykule przedstawiono emulator dla bezprzewodowych mobilnych sieci ad-hoc umoŜliwiający łatwe i szybkie przeprowadzanie testów protokołów rutingu projektowanych dla tych sieci. W rozwiązaniu wykorzystano sterownik TUN/TAP, umoŜliwiając stworzenie wirtualnej infrastruktury sieciowej w środowisku systemu operacyjnego Linux. Artykuł opisuje architekturę i funkcjonalność emulatora. 1. Wprowadzenie Testowanie protokołów rutingu dla bezprzewodowych mobilnych sieci ad-hoc (ang. Mobile Ad-hoc Network, MANET) stanowi waŜną część procesu projektowania oprogramowania. Specyficzne cechy sieci jak częste zmiany topologii spowodowane mobilnością węzłów, czy brak stałej infrastruktury muszą być uwzględniane od najwcześniejszych stadiów projektowania. Dostępność łatwych w uŜyciu i skutecznych narzędzi do przeprowadzania testów w trakcie procesu tworzenia, jest krytycznym czynnikiem, który decyduje o poprawności działania protokołu w jego ostatecznym kształcie. Ma to równieŜ wpływ na czas i koszt potrzebny do osiągnięcia satysfakcjonującego rezultatu. Częścią procesu tworzenia jest bieŜące analizowanie i porównywanie dopuszczalnych alternatyw, sprawdzanie skutków przyjętych rozwiązań, sprawdzanie czy spełniane są zakładane oczekiwania w sensie ilościowym i jakościowym, czy porównywanie rezultatów z innymi, pokrewnymi rozwiązaniami. MoŜna wyróŜnić trzy sposoby przeprowadzania testów, które spełniają te zadania [1]: faktyczna implementacja i testy w rzeczywistym środowisku (testy polowe), wykorzystanie symulatora, wykorzystanie emulatora. Zasadniczą przewagą wykorzystania emulatora nad pozostałymi dwoma rozwiązaniami jest moŜliwość testowania kodu w wersji, która moŜe być od razu uruchomiona w rzeczywistym systemie, przy jednoczesnym zachowaniu kontroli nad parametrami środowiska testowego (powtarzalność eksperymentów) i niskich kosztach realizacji. W artykule tym opisano emulator stworzony na potrzeby przeprowadzenia testów protokołu rutingu dla sieci MANET zaprojektowanego i zaimplementowanego przez Zespół Aplikacji Mobilnych i Wbudowanych IT PW [2] w ramach projektu EU 6FP MIDAS [3,4] (ang. Middleware Platform for Developing Advanced Mobile Services). W dwóch kolejnych rozdziałach artykułu opisano motywację dla stworzenia nowego emulatora. W rozdziale 4 został opisany sposób dostarczania funkcjonalności sieci MANET testowanym protokołom. 2. Wymagania dla Emulatora Wymagania postawione projektowanemu emulatorowi moŜna ująć w punktach: a) Minimalny "wkład początkowy" uŜytkownika – emulator łatwy do uruchomienia i korzystania, posiadający interfejs graficzny. b) Niski koszt korzystania – aplikacja działająca na pojedynczym komputerze osobistym klasy PC z systemem operacyjnym Linux. c) Skalowalność – aplikacja umoŜliwiająca emulację sieci zarówno małych jak i o duŜej liczbie węzłów. d) Przenośność kodu – kod testowanych protokołów moŜliwy do uruchomienia w rzeczywistych urządzeniach z minimalnymi zmianami. Emulator ma dostarczać standardowych interfejsów systemowych, do których procesy protokołów rutingu mogą wysyłać i odbierać dane za pośrednictwem standardowego API gniazd surowych (ang. raw socket) systemu Linux. e) MoŜliwość porównywania rezultatów emulacji z symulacjami przeprowadzanymi z uŜyciem narzędzia Network Simulator (ns-2) [5] – wykorzystanie standardowego formatu pliku scenariusza symulatora ns-2 do opisu mobilności węzłów emulowanej sieci. f) Emulacja na poziomie warstwy łącza danych modelu OSI – aplikacja ma wykorzystywać sterownik TUN/TAP [6] do dostarczania funkcjonalności oraz odzwierciedlania charakterystyki warstwy łącza danych mobilnej sieci ad-hoc. Emulacja na poziomie warstwy łącza danych ma umoŜliwić testowanie protokołów warstwy sieciowej (protokołów rutingu). Działanie Emulatora oparte jest na wykorzystaniu sterownika TUN/TAP do stworzenia na pojedynczym komputerze zestawu wirtualnych urządzeń sieciowych. Reprezentują one urządzenia poszczególnych węzłów sieci rzeczywistej. Procesy protokołów rutingu kaŜdego z węzłów uruchamiane są jednocześnie w przestrzeni uŜytkownika systemu. KaŜdemu z nich dedykowany jest konkretny, pojedynczy interfejs wirtualnego urządzenia. Procesy kaŜdego węzła wysyłają i odbierają dane z interfejsu za pośrednictwem standardowego API gniazd sieciowych. Odbywa się to w taki sam sposób, w jaki miałoby to miejsce w przypadku ich działania na osobnej platformie sprzętowej. Emulator, na podstawie informacji ze scenariusza mobilności węzłów, przesyła dane pomiędzy wirtualnymi urządzeniami, co odzwierciedla istnienie (lub brak) bezprzewodowych połączeń w sieci rzeczywistej. Zarys koncepcji działania aplikacji przedstawiony został na rys. 1. a) b) Procesy protokołów rutingu Urządzenie sieciowe węzła Procesy protokołów rutingu Procesy protokołów rutingu Urządzenie sieciowe węzła Urządzenie sieciowe węzła Procesy protokołów rutingu Urządzenie sieciowe węzła Procesy protokołów rutingu Procesy protokołów rutingu Wirtualne urządzenia sieciowe Procesy protokołów rutingu Procesy protokołów rutingu Wirtualne urządzenia sieciowe Emulator Rys. 1. Zarys działania Emulatora: a) sieć rzeczywista, b) sieć emulowana. 3. Emulator na tle istniejących rozwiązań W związku z testowaniem powstałych implementacji protokołów rutingu, stworzonych zostało kilka emulatorów sieci bezprzewodowych. śadna z dostępnych aplikacji nie spełniała jednak jednocześnie wszystkich z przedstawionych w poprzednim punkcie wymagań. Zadecydowało to o konieczności stworzenia naszego narzędzia. Emulatory MNE [7] i EMWIN [8] wykorzystują statyczną infrastrukturę sieciową do emulowania sieci MANET. Zakładają istnienie połączonego w lokalną sieć zestawu komputerów, w których kaŜde z urządzeń reprezentuje pojedynczy węzeł sieci emulowanej. Urządzenia sieciowe posiadają po dwa interfejsy, gdzie jeden z nich wykorzystywany jest jako kanał kontrolny emulacji (do przesyłania informacji o zmianach topologii), a drugi do przesyłania danych. Przesyłane w kanale kontrolnym informacje o zmianach połączeń pomiędzy węzłami są wykorzystywane do dynamicznego wprowadzania zmian w tablicach rutingu IP. Pomimo, iŜ EMWIN pozwala na wykorzystanie kilku urządzeń sieciowych w kaŜdym z komputerów (w MNE kaŜdy z węzłów musi być oddzielną maszyną), to i tak prezentowane podejście wymaga wykorzystania znaczącej ilości sprzętu, co czyni je niepraktycznym i drogim. Fizyczna architektura systemu MobiNet [9] składa się z węzłów szkieletowych, wykorzystywanych do emulowania charakterystyki sieci bezprzewodowej oraz węzłów brzegowych. W MobiNet moŜliwa jest emulacja duŜej liczby bezprzewodowych urządzeń dzięki tworzeniu wirtualnych węzłów brzegowych z róŜnymi adresami IP w kaŜdym z fizycznych węzłów brzegowych. W tym przypadku ilość koniecznego do uŜycia sprzętu jest istotnie mniejsza w porównaniu do dwóch poprzednich emulatorów. System ten jest jednak skomplikowany w konfiguracji i korzystaniu. Emulator NEMAN [1] jest aplikacją, która spośród dostępnych, gotowych narzędzi, w największym stopniu spełnia opisane w poprzednim rozdziale wymagania. NEMAN został stworzony do emulowania duŜych sieci bezprzewodowych, z wykorzystaniem pojedynczego komputera osobistego. Zastosowany w aplikacji sterownik TUN/TAP umoŜliwia tworzenie i zarządzanie wirtualnymi urządzeniami sieciowymi. Przyłączane są do nich procesy testowanych protokołów, które w rzeczywistości dedykowane są do działania na osobnych platformach sprzętowych – węzłach sieci MANET. UŜytkownik ma równieŜ do dyspozycji interfejs graficzny. Rozwiązanie, które reprezentuje NEMAN, jest tanie, skalowalne, proste w uŜyciu i gwarantuje przenośność kodu testowanych programów. NEMAN nie mógł jednak zostać uŜyty przez Zespół Aplikacji Mobilnych i Wbudowanych do testowania tworzonego protokołu, poniewaŜ program ten zakłada wykorzystanie protokołu IP jako protokołu rutingu. Ten emulator nie uwzględnia moŜliwości bezpośredniego dostępu do warstwy łącza danych emulowanej sieci z uŜyciem API gniazd surowych. Testowane programy muszą korzystać z dostarczanej przez emulator funkcjonalności na poziomie warstwy sieciowej z protokołem IP. NEMAN nie moŜe zostać uŜyty do testowania protokołów rutingu. Zastosowana w nim koncepcja uŜycia sterownika TUN/TAP do tworzenia wirtualnej infrastruktury sieciowej, została jednak ponownie wykorzystana przy projektowaniu nowego emulatora. 4. Architektura Emulatora W działaniu Emulatora wykorzystano następujące fakty: a) Procesy testowanych protokołów rutingu mają bezpośredni dostęp do interfejsów urządzeń sieciowych swoich węzłów (warstwy łącza danych sieci) oraz mogą wysyłać i odbierać z nich informacje za pośrednictwem API gniazd surowych systemu operacyjnego. b) Wiedza procesów na temat sieci, z której korzystają, ograniczona jest do informacji moŜliwych do uzyskania na poziomie dostępu do warstwy łącza danych (interfejsów urządzeń sieciowych) i nie jest im znany rzeczywisty sposób transmisji informacji. c) Sterownik TUN/TAP umoŜliwia stworzenie wirtualnych urządzeń sieciowych na poziomie warstwy łącza danych i aplikacja działająca w przestrzeni uŜytkownika systemu operacyjnego moŜe przesyłać pomiędzy tymi urządzeniami dane w dowolny sposób kształtując charakterystykę tej komunikacji. Rys. 2 prezentuje główną ideę działania Emulatora. Aplikacja tworzy wirtualne urządzenia TAP, które zastępują fizyczne urządzenia sieciowe Ethernet, z których korzystałyby węzły. KaŜdy węzeł wirtualnej sieci składa się z procesów uruchomionych w przestrzeni uŜytkownika systemu oraz dedykowanego dla niego wirtualnego urządzenia sieciowego, który zastępuje całą infrastrukturę fizyczną węzła. Gniazda sieciowe Procesy protokołów rutingu wirtualnych węzłów Warstwa sieciowa i wyŜsze Warstwa łącza danych Warstwa fizyczna Interfejsy wirtualnych urządzeń TAP Proces Emulatora Rys. 2. Idea działania Emulatora. Tak jak w przypadku rzeczywistej sieci MANET, kaŜdy węzeł identyfikowany jest na podstawie 48-bitowego adresu MAC – w tym przypadku jest to jednak adres MAC urządzenia TAP, a nie fizycznego urządzenia sieciowego Ethernet. PoniewaŜ Emulator jest twórcą wszystkich urządzeń TAP, dane wysyłane na interfejsy przez procesy kaŜdego z węzłów mogą być przez niego odebrane, a następnie moŜe on podjąć decyzję, do których innych interfejsów zostaną dostarczone. Decyzja o tym gdzie dane powinny być przekazane podejmowana jest na podstawie posiadanych przez emulator informacji o bieŜącej topologii emulowanej sieci, które wczytywane są z pliku scenariusza mobilności węzłów. Dane wysłane przez kaŜdy wirtualny węzeł dostarczane są do wszystkich pozostałych, które w prawdziwej sieci MANET byłyby w jego zasięgu. Procesy protokołów testowanych w Emulatorze wykorzystują to samo API gniazd sieciowych, jakie byłoby uŜywane w przypadku działania na osobnych platformach sprzętowych. Wszystkie funkcje tworzenia gniazd oraz wysyłania i odbierania danych (socket(), sendto(), recvfrom() [10]) są takie same. Konieczne jest jednak dodatkowe przywiązanie (funkcja bind()) wykorzystywanych przez procesy gniazd, aby zapewnić, Ŝe dany wirtualny węzeł będzie się komunikował z resztą sieci tylko za pośrednictwem dedykowanego dla niego interfejsu. Procesy protokołów nie są świadome fizycznego przemieszczania się węzłów. O tym, Ŝe węzeł zmienia połoŜenie, proces dowiaduje się na podstawie tego, z którymi innymi węzłami moŜe nawiązać bezpośrednie połączenia oraz Ŝe w róŜnych momentach moŜe nawiązać te połączenia z róŜnymi węzłami. Mobilność węzłów jest równoznaczna ze zmianami moŜliwości nawiązywania połączeń między nimi. Aplikacja przez cały czas trwania emulacji utrzymuje w swojej pamięci tablicę, w której zapisane są statusy bezpośrednich połączeń pomiędzy wszystkimi węzłami – dostępne, niedostępne. Na podstawie informacji zawartych w tej tablicy, Emulator, gdy odbiera z któregoś z wirtualnych urządzeń ramkę, decyduje, do których innych urządzeń powinna być ona przesłana. Jednocześnie jeden z wątków programu wprowadza zmiany w statusach tych połączeń na podstawie scenariusza emulacji, który został zadany przez uŜytkownika aplikacji. Scenariusz emulacji jest plikiem, który jest wczytywany do programu za kaŜdym razem przed rozpoczęciem emulacji i określa, w jaki sposób węzły przemieszczałyby się w rzeczywistej sieci oraz jakie miałoby to konsekwencje dla istnienia połączeń między nimi. Scenariusz mobilności węzłów jest tworzony przez uŜytkownika aplikacji i jest odzwierciedleniem jego zapotrzebowania na przeprowadzenie konkretnego scenariusza testowego. Z uwagi na zunifikowanie formatu wczytywanych scenariuszy z formatem uŜywanym w ns-2, do ich tworzenia moŜna wykorzystać program setdest wchodzący w skład pakietu narzędzi Network Simulator 2. Funkcjonalność Emulatora nie obejmuje zagadnień specyficznych dla warstwy fizycznej mobilnych sieci ad-hoc związanych z propagacją sygnału radiowego. Aplikacja nie emuluje właściwości sieci takich jak istnienie kolizji, problemu ukrytych węzłów, czy parametrów jakościowych sygnału. Uznano, Ŝe zagadnienia te są stosunkowo mało istotne przy testowaniu protokołów rutingu i nie zostały włączone do wymagań aplikacji. Uruchomione w systemie operacyjnym procesy testowanych protokołów, mają do dyspozycji równieŜ inne (niŜ sieciowe) API umoŜliwiające dostęp do pozostałych zasobów systemowych takich jak np. pamięć podręczna i dyskowa. Aplikacja nie emuluje dostępu do tych zasobów, dlatego zagwarantowanie braku konfliktów przy ich wykorzystaniu spoczywa na barkach twórców testowanych protokołów. Architekturę Emulatora przedstawiono na rys. 3. Rys. 3. Architektura Emulatora. Architekturę Emulatora podzielono na trzy elementy składowe: (a) Interakcja programu z uŜytkownikiem za pośrednictwem terminala tekstowego, interfejsu graficznego oraz programu Network Animator (NAM) [5]. (b) Część właściwa programu odpowiedzialna za stworzenie wirtualnej sieci i wykonanie scenariusza emulacji. (c) Procesy testowanego protokołu reprezentujące poszczególne węzły korzystające z wirtualnej infrastruktury sieciowej. Architektonicznie działanie aplikacji podzielono na cztery etapy: (1) Wczytanie oraz sprawdzenie poprawności danych wejściowych. (2) Stworzenie i konfiguracja urządzeń TAP oraz oczekiwanie na przywiązanie do ich interfejsów procesów reprezentujących węzły. (3) Wykonanie scenariusza emulacji – przesyłanie ramek oraz dynamiczne modyfikowanie tablicy połączeń pomiędzy węzłami zgodnie ze scenariuszem. (4) Zakończenie działania programu. Dane wejściowe oraz opcje programu wczytywane są z linii poleceń terminala uŜytkownika (tryb tekstowy) lub z interfejsu graficznego. W skład danych wejściowych wchodzą ustawienia związane ze sposobem prezentowania uŜytkownikowi wyników działania aplikacji oraz dane związane z samym przebiegiem emulacji – w tymi ścieŜka dostępu do pliku, w którym jest zapisany scenariusz mobilności węzłów. Funkcje przetwarzające dane wejściowe sprawdzają czy plik scenariusza jest poprawnie skonstruowany pod względem syntaktyki. Następnie tworzona jest tablica połączeń pomiędzy węzłami (topologia sieci), na jej podstawie Emulator będzie przesyłał ramki pomiędzy urządzeniami TAP, oraz chronologiczna lista zmian w statusach tych połączeń. Lista zdarzeń wykorzystywana jest przez wątek programu, który w czasie trwania emulacji modyfikuje tablicę połączeń. W trakcie wczytywania scenariusza tworzona jest równieŜ jego wizualizacja, która jeszcze przed rozpoczęciem emulacji moŜe zostać odtworzona w programie Network Animator. UmoŜliwia to przejrzenie zawartości scenariusza przed jego wykonaniem. Emulator tworzy taką liczbę wirtualnych urządzeń sieciowych TAP, jaka jest liczba węzłów emulowanej sieci. KaŜdemu z nich przypisywany jest unikalny adres MAC o numerze ab:cd:ef:00:XX:XX oraz interfejs o nazwie „tapXX”, gdzie „XX” jest numerem węzła sieci. Informacja o kaŜdym z urządzeń TAP zapisana zostaje w programie w postać struktury zawierającej numer deskryptora pliku urządzenia, adres MAC oraz nazwę interfejsu. Deskryptory wykorzystywane są do przesyłania ramek pomiędzy urządzeniami, a adresy MAC i nazwy interfejsów do identyfikacji urządzeń oraz przywiązywania do nich procesów. Wykonanie scenariusza emulacji następuje w dwóch wątkach programu. Wątek główny nasłuchuje czy na interfejsach urządzeń TAP pojawiają się ramki danych. JeŜeli tak, ramka zostaje odebrana, a program sprawdza informacje w tablicy połączeń. Dane zostają wysłane do interfejsów wszystkich urządzeń, z którymi istnieje połączenie. Równocześnie z procesem głównym programu działa wątek obsługi zdarzeń – tzw. scheduler. Wątek ten monitoruje na bieŜąco czas, który upłynął od rozpoczęcia emulacji i dokonuje zmian w tablicy połączeń. Wątek obsługi zdarzeń odpowiedzialny jest równieŜ za przesłanie do wątku głównego informacji o upłynięciu zadanego czasu trwania emulacji. Zakończenie działania programu następuje w momencie upłynięcia zadanego czasu emulacji. Wszystkie utworzone przez program wirtualne urządzenia sieciowe zostają usunięte z systemu operacyjnego. Bez wykonywania Ŝadnych dodatkowych czynności program moŜe zostać ponownie uruchomiony. 5. Zastosowanie Emulatora Emulator został wykorzystany w projekcie EU 6FP MIDAS przy testowaniu implementacji elementu składowego warstw pośrednich protokołu rutingu dla adresowania kontekstowego MIDAS Context Based Routing. Z wykorzystaniem emulatora przeprowadzono testy funkcjonalne dla emulowanych sieci bezprzewodowych złoŜonych od kilkunastu do kilkudziesięciu węzłów. 6. Podsumowanie W artykule przedstawiono opis architektury i działanie emulatora bezprzewodowych sieci działających w trybie ad-hoc przeznaczonego do testowania oprogramowania rutującego wykorzystującego interfejs gniazd. Emulator został wykorzystany w praktyce przy testowaniu implementacji elementów oprogramowania warstw pośrednich (ang. middleware) projektu EU 6FP MIDAS. Literatura 1. M. Puzar, T. Plagemann, NEMAN: A Network Emulator for Mobile Ad-Hoc Networks, Technical Report #321, Department of Informatics, University of Oslo, 2005. Dostępny na: http://www.ifi.uio.no/forskning/grupper/dmms/papers/138.pdf 2. Strona domowa Zespołu Aplikacji Mobilnych i Wbudowanych (ang. Mobile and Embedded Application Group), listopad 2006: http://meag.tele.pw.edu.pl/ 3. Strona domowa projektu MIDAS, listopad 2006: http://www.ist-midas.org/ 4. J. Domaszewicz, M. Koziuk, M. Rój, R. Schoeneich, K. Kacperski, Projekt MIDAS: Platforma Programistyczna do Tworzenia i WdraŜania Zaawansowanych Usług Mobilnych, Instytut Telekomunikacji Politechniki Warszawskiej, Warszawa, 2006. Dostępny na: http://kst.tele.pw.edu.pl/kst2006/ref/pm.05.pdf 5. Strona domowa programu Network Simulator (ns-2), listopad 2006: http://www.isi.edu/nsnam/ns/ 6. M. Krasnyansky, Universal TUN/TAP device driver, listopad 2006. Strona domowa projektu: http://vtun.sourceforge.net/tun 7. J. P. Macker, W. Chao, J. W. Weston, A low-cost, IP-based mobile network Emulator (MNE), MILCOM 2003 – IEEE Military Communications Conference, 2003, 22, 481-486. Dostępny na: http://cs.itd.nrl.navy.mil/pubs/docs/mne_milcom03.pdf 8. P. Zheng, L. M. Ni, EMWIN: Emulating a Mobile Wireless Network using a Wired Network, 5th ACM international workshop on Wireless mobile multimedia, Atlanta, Georgia, 2002. Dostępny na: http://gargoyle.arcadia.edu/mathcs/zhengpei/publications/wowMoM02_zheng.pdf 9. P. Mahadevan, A. Rodriguez, D. Becker, A. Vahdat, MobiNet: A Scalable Emulation Infrastructure for Ad Hoc and Wireless Networks, UCSD Technical Report CS2004-0792, 2004. Dostępny na: http://sysnet.ucsd.edu/~pmahadevan/publications/mobinet-mc2r.pdf 10. W. Richard Stevens, UNIX, Programowanie usług sieciowych, Tom 1, Wydawnictwa Naukowo-Techniczne , Warszawa, 2000