Spis rzeczy Dalej: Podsumowanie Wstecz: Opis programu

Rozdział 4

Rozszerzenie funkcjonalności programu

4.1 Tworzenie map
4.1.1 Konstrukcja topologii sieci
4.1.2 Wstępna konfiguracja mapy
4.1.3 Przykład konstrukcji mapy
4.2 Implementacja protokołu informowania o trasach
4.3 Wizualizacja protokołu TCP

Program zaprojektowano w taki sposób, by umożliwić jego łatwą rozbudowę. W prosty sposób, posługując się przygotowaną biblioteką metod, można stworzyć aplet symulujący sieć IP o dowolnej topologii. Najpoważniejszym ograniczeniem jest tu wielkość ekranu i moc obliczeniowa komputera, na którym aplet będzie wykonywany. Większego nakładu pracy wymaga napisanie modułów symulujących inne protokoły rodziny TCP/IP. Wydaje się, że najciekawsza byłaby symulacja protokołu dynamicznego informowania o trasach lub protokołu TCP.

4.1 Tworzenie map

Program został tak zaprojektowany, by umożliwić ułożenie mapy o dowolnej topologii. Podczas realizacji powstało jednak kilka ograniczeń poprawiających czytelność mapy: Najwiekszą trudnością przy tworzeniu mapy jest właściwe rozmieszczenie elementów, tak by nie zachodziły one na siebie. Aplikacja nie potrafi wykryć błędnego rozłożenia elementów mapy. Użyteczna byłaby więc realizacja graficznego narzędzia typu WYSIWYG (What You See Is What You Get) pozwalającego w łatwy sposób zaplanować wygląd mapy.

Tworzenie mapy można podzielić na dwa zadania:

Spis rzeczy  Początek rozdziału

4.1.1 Konstrukcja topologii sieci

Aby utworzyć własną mapę należy napisać klasę dziedziczącą po klasie Framework. Nowy obiekt musi posiadać metodę
      public void arrangeMap()
w której należy użyć opisanych poniżej metod klasy Framework.
 

Metoda createHost()

Składnia:
      public Host
      createHost(String name, int nEthernet, int nSerial, int x, int y)
Parametry: Opis:
Metoda służy do stworzenia elementu symulującego węzeł sieci. Przy tworzeniu węzła należy określić rodzaj i maksymalną liczbę portów, którą ma on posiadać. Ikona symbolizująca węzeł jest kwadratem o boku 30 pikseli. Jej rodzaj zależy od liczby zadeklarowanych portów. Węzły posiadające dokładnie jeden port są symbolizowane przez ikonę przedstawiającą komputer typu PC, a węzły o większej liczbie portów (rutery) -- przez ikonę z krzyżującymi się strzałkami. Metoda przekazuje dowiązanie do stworzonego węzła.
 
 

Metoda createBus()

Składnia:
      public EtherNet
      createBus(String name, int buflen, boolean isveritcal,
                int lowend, int highend, int position)
Parametry: Opis:
Metoda służy do stworzenia elementu symulującego sieć rozgłoszeniową. Interpretacja parametrów
lowend, highend, position zależy od parametru isvertical. Jeśli szyna jest pionowa, to jej końce mają współrzędne (position,lowend) i (position, highend), w przeciwnym przypadku odpowiednio (lowend, position) i (highend, position). Metoda przekazuje dowiązanie do stworzonego obiektu.
 
 

Metoda createLine()

Składnia:
      public SerialLine
      createLine(String name, int buflen, Host end1, Host end2)
Parametry: Opis:
Metoda tworzy obiekt SerialLine symulujący linię szeregową, łączący ze sobą dwa węzły. Linia symbolizująca obiekt na mapie jest położona na odcinku łączącym środki dwu węzłów. Jeżeli któryś z węzłów nie posiada wolnego portu szeregowego, to jest generowany wyjątek IllegalArgumentException. Metoda przekazuje dowiązanie do utworzonego obiektu.
 
 

Metoda connectToBus()

Składnia:
      public Port
      connectToBus(EtherNet net, Host host)
Parametry: Opis:
Metoda łączy węzeł z szyną ethernetu. Jeżeli węzeł nie posiada wolnego portu ethernetowego, to jest generowany wyjątek IllegalArgumentException. Należy zadbać o to, by odpowiednia współrzędna (x dla szyn poziomych, y dla pionowych) środka węzła zawierała się pomiędzy współrzędnymi końców szyny. Metoda przekazuje dowiązanie do portu łaczącego węzeł z ethernetem.

Spis rzeczy  Początek rozdziału


4.1.2 Wstępna konfiguracja mapy

Konfiguracja mapy sprowadza się do dwu czynności: zaadresowaniu portów i modyfikacji tablicy tras węzłów. Pierwsza z nich wymaga posiadania dowiązania do portu, który ma zostać zaadresowany. W przypadku portów dołączonych do ethernetu dowiązanie takie przekazuje omawiana wyżej metoda
connectToBus(). Aby znaleźć port łączący węzeł z linią szeregową należy użyć metody findPort() zdefiniowanej w klasie Host. Następnie dla znalezionego portu należy wywołać setAddress().

Metoda Host.findPort()

Składnia:
      public Port
      findPort(Net net)
Parametry: Opis:
Wynikiem działania metody jest dowiązanie do portu podłączonego do sieci net i należącego do węzła, dla którego metoda została wywołana. Jeśli taki port nie zostanie znaleziony, to jest przekazywana wartość null. Metoda jest uniwersalna -- działa zarówno dla portów szeregowych, jak i ethernetowych.

Metoda Port.setAddress()

Składnia:
      public boolean
      setAddress(String ip, String mask)
Parametry: Opis:
Metoda przypisuje adres IP do interfejsu, dla którego jest wykonywana. Adres nie może być identyczny z już przypisanym do innego interfejsu tego samego węzła. W przypadku podania błędnych parametrów jest generowany wyjątek klasy InvalidArgumentException. Metoda wpisuje pozycje dotyczące konfigurowanej sieci do tabeli tras.
 

Konfiguracji tablicy tras dokonują metody zdefiniowane w klasie Host. Metoda addRoute dodaje zwykłą pozycję, zaś addDefRoute służy do wprowadzenia trasy domyślnej.
 
 

Metoda Host.addRoute() i Host.addDefRoute

Składnia:
      public boolean
      addRoute(String net, String mask, String gateway)

      public boolean
      addDefRoute(String gateway)
Parametry: Opis:
Metody dodają pozycję do tablicy tras węzła. Adres rutera musi być osiągalny bezpośrednio dla węzła, który wykonuje metodę. Dlatego przed jej wywołaniem należy skonfigurować adres IP interfejsu, do którego jest podłączona sieć zawierająca ruter. Jeśli któryś z parametrów nie ma formy notacji kropkowej właściwej dla adresu IP, to metody generują wyjątek IllegalArgumentException, zaś w przypadku podania błędnego bądź nieosiągalnego adresu rutera przekazują wartość false.

Spis rzeczy  Początek rozdziału


4.1.3 Przykład konstrukcji mapy

Poniżej przedstawiono kod klasy tworzący mapę widoczną na rys. 4.1

/*****************************************************************************
 * Demo.java
 * Przykład konstrukcji mapy
 */

import ips.*;

public class Demo extends Framework
{
    Host a1, a2, a3, b1, b2, b3, c1, c2, c3;
    EtherNet a, b, c;
    SerialLine ab, bc, ac;

    public void arrangeMap()
    {
                        // tworzenie węzłów sieci po lewej stronie mapy
        a1= createHost("A1",  1, 0, 40, 190);
        a2= createHost("A2",  1, 0, 40, 280);
        a3= createHost("A3",  1, 2, 90, 270);
                        // tworzenie węzłów sieci u góry mapy
        b1= createHost("B1",  1, 0, 140, 40);
        b2= createHost("B2",  1, 0, 200, 40);
        b3= createHost("B3",  1, 2, 150, 160);
                        // tworzenie węzłów sieci po prawej stronie mapy
        c1= createHost("C1",  1, 1, 250, 160);
        c2= createHost("C2",  1, 1, 260, 270);
        c3= createHost("C3",  1, 0, 330, 200);
                        // tworzenie sieci ethernetowych
        a= createBus("A", 10, true,  160, 300, 65);
        b= createBus("B", 10, false, 120, 220, 80);
        c= createBus("C", 10, true,  120, 300, 300);
                        // tworzenie linii szeregowych
        ab= createLine("AB", 10, a3, b3);
        bc= createLine("BC", 10, b3, c1);
        ac= createLine("AC", 10, a3, c2);
                        // podłączanie węzłów do sieci ethernetowych
        connectToBus(a, a1);
        connectToBus(a, a2);
        connectToBus(a, a3);
        connectToBus(b, b1);
        connectToBus(b, b2);
        connectToBus(b, b3);
        connectToBus(c, c1);
        connectToBus(c, c2);
        connectToBus(c, c3);
    } // arrangeMap()

} // public class Demo

Rysunek 4.1: Obraz mapy tworzonej przez klasę Demo
Okno apletu

Spis rzeczy  Początek rozdziału


4.2 Implementacja protokołu informowania o trasach

Opisywany program warto wzbogacić o symulację protokołu dynamicznego wyznaczania tras. Wymagałoby to dodania dodatkowych wątków czuwających nad aktualizacją tablic tras w węzłach, generujących i odbierających komunikaty aktualizujące trasy.

Program powinien zostać wzbogacony o następujące funkcje:

Ciekawym rozszerzeniem byłaby możliwość konfigurowania jakości protokołów. Dotyczy to szczególnie protokołów wykorzystujących algorytm wektor-odległość, takich jak RIP. W podstawowej wersji protokół ten posiada bowiem wiele wad, eliminowanych przez dodatkowe mechanizmy, np. dzielenie horyzontu (ang. split horizont). Inną możliwością jest porównanie działania algorytów wektor-odległość z algorytmami wyboru najkrótszej ścieżki, w szczególności sposobu reakcji na awarie w sieci.

Symulacja protokołu informowania o trasach wymaga jednak rozwiązania problemów, takich jak wizualizacja procesów przebiegających jednocześnie w całej sieci oraz prezentacja zawartości dużych pakietów.

Spis rzeczy  Początek rozdziału


4.3 Wizualizacja protokołu TCP

Równie interesującym rozszerzeniem funkcjonalności programu może byc wizualizacja protokołu TCP, a przede wszystkim jego mechanizmów: Aby dobrze pokazać sterowanie przepływem należy umożliwić zmienianie przez użytkownika przepustowości i jakości łączy (np. losowo usuwać pakiety przechodzące przez daną sieć, sterować priorytetem wątków i prędkością animacji).

Trudnością w implementacji TCP jest złożoność oprogramowania. Kod realizujący TCP jest dłuższy i posiada dwa razy więcej funkcji i procedur niż kod protokołów IP, ICMP, UDP i ARP razem wziętych [2].


Spis rzeczy Wstecz: Początek rozdziału Dalej: Podsumowanie