Wstęp Niezależnie od tego czy warstwa sieci świadczy usługę opartą na datagramach czy wirtualnych obwodach aby zrealizować ją poprawnie musi być w stanie określić ścieżkę z której mają korzystać pakiety w drodze od nadawcy do odbiorcy. Oczywiście samo znalezienie ścieżki nie gwarantuje efektywnej komunikacji, ważne jest aby była to dobra ścieżka. Zupełnie inną sprawą jest wyjaśnienia pojęcia dobra. Czasami chodzi nam o ścieżki o najniższym koszcie, innym razem istotne jest opóźnienie a jeszcze innym niezawodność łącza. Czasami trzeba uwzględnić także pewne ograniczenia takie jak to, że router należący do organizacji Z nie powinien przesyłać żadnych pakietów należących do organizacji Y. Jednym ze sposobów klasyfikowania algorytmów routingu jest podzielenie ich ze względu na poziom wiedzy (globalny lub lokalny):
Innym sposobem klasyfikacji algorytmów routingu jest podział na statyczne, w których trasy bardzo wolno ulegają zmianom (najczęściej są one powodowane interwencjami użytkownika; ręczną edycją tabel routingu) i dynamiczne, w których tablice routingu zmieniane są automatycznie i na bieżąco wraz ze zmianami topologii sieci. Algorytmy dynamiczne choć charakteryzują się większą szybkością dostosowywania się do zmian są jednocześnie bardziej podatne na pętle routingu i wahania związane z trasami. Algorytm Dijkstra Algorytm Dijkstra został opracowany przez holenderskiego matematyka Edsgera Dijkstrę (ur. 1930, zm. 2002). Służy on do znajdowania najtańszych ścieżek w grafie łączących jeden, wybrany węzeł ze wszystkimi pozostałymi węzłami. Nie można go stosować do grafów, których krawędzie mają ujemne wagi. W takim wypadku należy użyć bardziej ogólnego algorytmu Bellmana-Forda. Jeśli wszystkie krawędzie w grafie mają wartość 1 to istnieje prostszy algorytm znajdowania najkrótszej ścieżki algorytm przeszukiwania grafu wstecz. Jako efekt działania algorytmu otrzymujemy najkrótsze ścieżki tylko i wyłącznie z węzła, który wybraliśmy jako startowy, a nie wszystkie najkrótsze ścieżki pomiędzy dowolnymi dwoma węzłami w grafie. Sposób działania algorytmu Rysunek 1 przedstawia przykładowy graf. Załóżmy, że szukamy najkrótszych ścieżek z węzła A (nie jest to wcale regułą i zamiast A moglibyśmy wybrać dowolny inny węzeł, z którego chcielibyśmy znaleźć najkrótsze ścieżki). Rozwiązania zadania zostało przedstawione w tabelce 1. W pierwszym kroku obliczamy odległość do węzłów, do których możemy dotrzeć bezpośrednio z A. Wyniki wpisujemy w tabelkę. Dla pierwszego wiersza mamy w kolejnych kolumnach:
W ten sposób udało się nam wypełnić pierwszy wiersz tabelki. W kolejnym kroku wybieramy węzeł, do którego mamy najbliżej (jeśli do dwóch węzłów odległość jest taka sama możemy wybrać dowolny z nich). W naszym zadaniu jest to węzeł B, bo 2 jest mniejsze od 10. Po wybraniu kolejnego węzła dodajemy go do ścieżki, która jest wpisana w kolumnę węzły. Ponownie obliczamy odległość do pozostałych węzłów, tym razem jednak nasz zasięg rozszerzył się o możliwość przejścia przez węzeł, który właśnie dodaliśmy do ścieżki (w tym przypadku B). W związku z tym dla drugiego wiersza kolejno od lewej mamy:
W kolejnym kroku wybieramy węzeł C ponieważ odległość do niego (4) jest najmniejsza. W związku z tym mamy w kolumnie węzły wpis ABC. Obliczamy dystans do poszczególnych węzłów. Warto zauważyć, że po raz pierwszy możemy dojść do węzła D poprzez węzły B i C. W czwartym wierszu wybieramy węzeł F, bo 5 jest mniejsze od 10 i 12. W związku z tym dla czwartego węzła mamy odpowiednio:
W kolejnym kroku wybieramy węzeł E, a jeszcze następnym F. Procedurę powtarzamy, aż dołączymy wszystkie węzły do ścieżki. Wtedy w ostatnim wierszu muszą pojawić się same kreski. Otrzymaliśmy tablicę, która umożliwi wyznaczenie nam najkrótszej ścieżki (zarówno jeśli chodzi o jej długość jak i węzły przez które przechodzi) pomiędzy węzłem A i dowolnym innym węzłem w grafie. Znajdowanie najkrótszej drogi pomiędzy węzłem A a węzłem D odbywa się w sposób następujący:
Rys.1. Przykładowa sieć
|