Routery, przełączniki warstwy trzeciej, load balancery czy firewalle – słowem wszystkie urządzenia warstwy trzeciej modelu OSI – routują pakiety. Routing to nic innego jak budowana na urządzeniu logika wyboru trasy dla pakietu z określonym adresem IP odbiorcy. Tablica routingu istnieje także na komputerach osobistych czy zarządzalnych przełącznikach warstwy drugiej. Każda osoba zarządzająca infrastrukturą IT musi znać podstawy tego, w jaki sposób urządzenia, którymi zarządza, budują tablicę routingu oraz w jaki sposób wybierana jest najlepsza ścieżka do sieci docelowej. W tym artykule będę prezentował przykłady korzystając z routerów Cisco.

Tablica routingu

Aby wyświetlić tablicę routingu na większości urządzeń Cisco musimy wydać polecenie show ip route. Do wyświetlenia tablicy routingu dla IPv6 zastosujemy polecenie show ipv6 route. Już samo to pokazuje, że na urządzeniach znajdziemy zazwyczaj więcej niż jedną tablicę routingu budowaną dla każdego z protokołów oddzielnie.

R1#show ip route
Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
            D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
            N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
            E1 – OSPF external type 1, E2 – OSPF external type 2
            i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
            ia – IS-IS inter area, * – candidate default, U – per-user static route
            o – ODR, P – periodic downloaded static route, H – NHRP, l – LISP
            a – application route
            + – replicated route, % – next hop override, p – overrides from PfR

      

Gateway of last resort is 0.0.0.0 to network 0.0.0.0

S*    0.0.0.0/0 is directly connected, Cellular0/2/0
        5.0.0.0/32 is subnetted, 1 subnets
C      5.185.19.72 is directly connected, Cellular0/2/0
        10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
S      10.100.0.0/30 [1/0] via 10.0.12.1
S      10.101.0.0/30 [1/0] via 10.0.12.1
D      10.254.0.0/30 [90/27136000] via 172.25.2.1, 04:17:10, Tunnel2
D      10.255.255.0/32 [90/1664000] via 172.25.2.1, 04:17:10, Tunnel2
D      10.255.255.1/32 [90/27264000] via 172.25.2.1, 04:17:10, Tunnel2
C      10.255.255.12/32 is directly connected, Loopback0
        188.0.0.0/32 is subnetted, 1 subnets
S      188.199.144.250 is directly connected, Cellular0/2/0
        172.25.0.0/16 is variably subnetted, 3 subnets, 2 masks
D      172.25.1.0/24 [90/1792000] via 172.25.2.1, 04:01:37, Tunnel2
C      172.25.2.0/24 is directly connected, Tunnel2
L      172.25.2.12/32 is directly connected, Tunnel2
        85.23.0.0/32 is subnetted, 1 subnets
S      85.23.15.74 is directly connected, Cellular0/2/0

W tablicy routingu zapisane są informacje o podsieciach, wraz z maską, o których wiedzę posiada nasz router. Źródło pozyskania informacji oznaczone jest w pierwszej kolumnie. Przykładowo podsieci skonfigurowane na interfejsie routera oznaczane są literą „C” (connected), z protokołu OSPF literą „O”, zaś z EIGRP literą „D”. W przypadku protokołu OSPF znajdziemy także dodatkowe oznaczona związane z podziałem na obszary. W kolejnej kolumnie znajduje się informacja o samej podsieci i powiązanej z nią maską. Jeżeli zapisana w tablicy routingu informacja nie dotyczy podsieci skonfigurowanej na samym urządzeniu w nawiasach kwadratowych znajdziemy dwa paramery, administrative distance oraz metrykę (o nic których za chwilę). Na końcu każdego wpisu znajduje się adres IP kolejnego urządzenia w ścieżce, do którego nasz router musi wysłać pakiet, aby trafił on do wskazanej podsieci, czas umieszczenia danego wpisu w tablicy routingu oraz interfejs, przez który pakiet będzie wysłany. Domyślna trasa oznaczona jest dodatkowo gwiazdką.

Wybór najlepszej trasy dla pakietu odbywa się w trzech krokach poprzez sprawdzenie trzech zawartych w tablicy routingu informacji:

  1. Wybierana jest najbardziej szczegółowa trasa, czyli ta o przypisanej najdłuższej masce.
  2. Wybierana jest trasa pochodząca z protokołu o najniższej przypisanej wartości adminisrative distance
  3. Wybierana jest trasa o najniższej metryce

Jak budowana jest sama tablica routingu? Router zbiera informacje o różnych podsieciach z dostępnych mu źródeł. Są nimi przede wszystkim wpisy statyczne i dynamiczne protokołu routingu a także redystrybucje wykonywanie pomiędzy nimi. Administratorzy mają wiele narzędzi do wyboru, dlatego optymalne zarządzanie routingiem w sieci nie jest zadaniem trywialnym. Wartość administrative distance wskazuje na to, z którego protokołu informacja będzie preferowana. Jeżeli router uzyskuje informację o podsieci 10.0.11.0/24 z protokołów OSPF i RIP, to preferować będzie informację z pierwszego z nich. Co do zasady wartości administrative distance nie powinniśmy zmieniać, gdyż nierozważna modyfikacja może spowodować problemy z routingiem w całej sieci. Metryka to wartość liczbowa oznaczająca „koszt” dostarczenia pakietu do wskazanej podsieci. Wartość ta jest różna w zależności od protokołu.

Routery nie wykorzystują tablicy routingu

O ile tablica routingu bardzo przyjaźnie i dość przejrzyście wygląda dla oka administratora, to urządzenia tak naprawdę z niej nie korzystają bezpośrednio. Wynika to z tego, że tablica routingu nie jest optymalna czasowo do wykorzystywania, a mówiąc bardziej wprost jest po prostu wolna i scentralizowana. Dlatego dostawcy urządzeń opracowali bardziej wydajne mechanizmy, które wykorzystują tablicę routingu jako jedno ze źródeł informacji do przełączania (zwróć uwagę, że świadomie nie użyłem słowa routowania) pakietów. Na urządzeniach Cisco mechanizm ten nazywa się Cisco Express Forwarding (CEF). Składa się on z kilku struktur, które zapewniają routerowi zoptymalizowane zarządzanie i dostęp do informacji, gdzie przesłać dalej pakiet. Dwa podstawowe komponenty CEF to tablica forwarding information base (FIB) oraz tablice sąsiedztwa (adjacency tables). Tablica FIB jest dość podobna do tablicy routingu, lecz zwiera informacje zapisane w zoptymalizowanej dla danego urządzenia formie. Tablica sąsiedztwa zwiera zaś informacje w jaki sposób wysłać pakiet do kolejnego urządzenia, na przykład, że jest on dostępny poprzez połączenie Ethernet warstwy drugiej. Co do zasady w tablicy CEF znajdziemy zapisany prefix, adres urządzenia do którego ma zostać wysłany pakiet lub inna akcja (na przykład odrzucenie pakietu) oraz nazwa interfejsu przez który ma on zostać dalej wysłany. Aby wyświetlić tablicę CEF musimy wydać polecanie show ip cef. Poniżej tablica CEF wygenerowana na podstawie tablicy routingu z wcześniejszego przykładu.

R1#show ip cef

Prefix                                                        Next Hop                                                        Interface
0.0.0.0/0                                                   attached                                                         Cellular0/2/0
0.0.0.0/8                                                   drop
0.0.0.0/32                                                 receive
5.185.19.72/32                                        receive                                                            Cellular0/2/0
10.0.12.1/32                                            10.0.12.1                                                         Cellular0/2/0
10.100.0.0/30                                          10.0.12.1                                                         Cellular0/2/0
10.101.0.0/30                                          10.0.12.1                                                         Cellular0/2/0
10.254.0.0/30                                          172.25.2.1                                                       Tunnel2
10.255.255.0/32                                      172.25.2.1                                                       Tunnel2
10.255.255.1/32                                      172.25.2.1                                                       Tunnel2
10.255.255.12/32                                     receive                                                            Loopback0
188.199.144.250/32                                attached                                                          Cellular0/2/0
127.0.0.0/8                                               drop
172.25.1.0/24                                           172.25.2.1                                                       Tunnel2
172.25.2.0/24                                           attached                                                          Tunnel2
172.25.2.0/32                                           receive                                                             Tunnel2
172.25.2.12/32                                         receive                                                             Tunnel2
172.25.2.255/32                                       receive                                                             Tunnel2
85.23.15.74/32                                         attached                                                          Cellular0/2/0
224.0.0.0/4                                                drop
224.0.0.0/24                                              receive
240.0.0.0/4                                                drop
255.255.255.255/32                                 receive