Na początek będziemy potrzebowali małej podbudowy wiedzy. Otóż musimy wiedzieć trochę o budowie sieci i protokołu IP. Obiecuję, że będę się starał mówić jasno.

Na początek o adresowaniu. Na ten temat napisano dużo grubych książek i nie będę się zbytnio zagłębiał w ten temat. Dla nas istotne będzie, że adres internetowy składa się z rzędu cyferek (jak przystało na komputer z jedynek i zer) w liczbie 32. Na przykład

11000000 10101000 00000001 00000011
Adres ten celowo podzieliłem na oktety (sekwencje po osiem cyfr 0-1). Otóż obliczając wartość dziesiętną poszczególnych oktetów otrzymalibyśmy (o ile się nie pomyliłem):

192 168 1 3

Są to poszczególne człony adresu IP ! :

192.168.1.3

Przyjmuje się, że pewna początkowa część adresu dwójkowego ( na przykład pierwsze trzy oktety ) stanowi adres sieci komputerów, druga (np. ostatni oktet) to adres komputera w tej sieci. W powyższym przykładzie mamy sieć o adresie 192.168.1, komputer o numerze 3. Jeżeli teraz będziemy mieli komputer o numerze 192.168.2.5, to taki komputer nie będzie mógł się bezpośrednio skontaktować z naszą 'trójką'. Dzieje się tak dlatego, że bezpośrednio komputery mogą się kontaktować tylko w obrębie JEDNEJ sieci. A w naszym przykładzie mamy dwie.

Tutaj zaczyna się gwóźdź programu, czyli routing. W uproszczeniu można powiedzieć, że ruting pozwala na wymianę informacji pomiędzy komputerami w różnych sieciach. Protokół IP składa się z małych paczek danych zwanych też czasem datagramami, albo pakietami. Taki pakiet wysyłany jest z komputera nadawcy i posiada zapisany adres IP odbiorcy. Jeżeli komputer-adresat znajduje się w tej samej sieci, pakiet zostaje do niego bezpośrednio dostarczony. Jeżeli natomiast odbiorca znajduje się (jak w naszym przykładzie) w innej sieci, pakiet zostaje przekazany do lokalnego routera. Taki router jest fizycznie połączony z siecią nadawcy. Wyobraźmy sobie taką sieć :

192.168.1 ------| (192.168.1.1) Router (192.168.2.1) |-----192.168.2

W obu sieciach znajdują się komputery. Maszyna routera posiada w tym wypadku dwie karty sieciowe i z obu sieci jest widziana jako 'swoja', czyli należąca do tej samej sieci. Dla sieci 192.168.1 jest to adres 192.168.1.1 a dla sieci 192.168.2 jest to adres 192.168.2.1. Czyli z obu sieci router jest osiągalny, może on dalej przesyłać je do drugiej sieci. Czyli sieci mogą się już komunikować. Oczywiście jest to duże uproszczenie. W prawdziwej sieci na trasie pakietu występuje kilka, kilkanaście routerów. Routery przesyłają taki pakiet z jednej sieci do drugiej, aż datagram dotrze do adresata. Każdy router musi podjąć decyzję, czy pakiet osiągnął docelową sieć (i wtedy go dostarczyć do komputera docelowe to), czy też przesłać go do kolejnego routera na trasie pakietu. Takiego wyboru dokonuje router na podstawie tablicy routingu. Spróbujmy wydać polecenie 'route -n':

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.2.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
default 192.168.1.240 255.255.255.0 UG 0 0 0 eth0

Pola najbardziej nas interesujące to : Destination, czyli adres docelowy, Gateway (brama), czyli adres routera. Czyli widzimy pary : adres sieci i adres routera, do którego powinien zostać przesłany pakiet adresowany do tej sieci. Jeżeli w polu Gateway znajduje się adres '0.0.0.0' lub znak '*', to znaczy że pakiety adresowane do danej sieci nie są przekazywane dalej, tylko przesyłane bezpośrednio. Dla przykładu : jeśli otrzymamy pakiet o adresie docelowym 192.168.1.11, to w tabeli routingu dla sieci 192.168.1 odpowiada Gateway '0.0.0.0'. Czyli router nie przesyła pakietu do innego routera, tylko wysyła je bezpośrednio do maszyny 192.168.1.11. Jest on bowiem przyłączony fizycznie do tej samej sieci. Jeżeli natomiast otrzyma pakiet o adresie odbiorcy 192.168.2.213, to zostanie on przesłany do routera 192.168.1.1.

Wiersz :

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

opisuje tzw. loopback, czyli adres zwrotny. Potrzebny on jest dla wewnętrznych mechanizmów komunikacyjnych każdego systemu linuksowego. Ostatni wiersz natomiast :

default 192.168.1.1 255.255.255.0 UG 0 0 0 eth0

opisuje adres domyślny routera. Jeżeli adres docelowy pakietu nie spełnia poprzednich warunków, zostaje przekazany pod adres 192.1168.1.240.

Pozostałe pola w powyższych listingach oznaczają :

Genmask - maska sieci
Flags - flagi opisujące trasę : U - trasa działająca, G - trasa używająca bramy zewnętrznej. Istnieją jeszcze mniej istotne flagi H oraz D.
Metric - koszt routingu dla trasy
Ref - ilość odwołań do trasy
Iface - nazwa interfejsu sieciowego. Powyżej mamy eth0 (czyli karta sieciowa ethernet, może być także eth1, eth2 itd...), lo (loopback - patrz wyżej). Jeżeli korzystamy z modemu możemy tam również zobaczyć interfejsy PPP : ppp0, ppp1 itd.
Omawiany tutaj routing nosi miano routingu statycznego. Każdy system linuksowy posiada statyczną tabelę routingu przynajmniej dla loopback oraz routing skierowany do macierzystej sieci. Aby utworzyć trasę routingu taką jak ta z naszego przykładu :

192.168.2.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth0

należy użyć polecenia route z parametrami :

route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 eth0

Czyli podajemy kolejno adres sieci, maskę sieciową (nie koniecznie) i adres routera, na koniec nazwę interfejsu sieciowego. Aby usunąć taki wpis należy użyć 'route delete'. Dla zdefiniowania trasy domyślnej użyjemy składni

route add default gw 192.168.1.240 eth0

Taka statyczna realizacja routingu spisuje się dobrze dla mniejszych, rzadko zmieniających swoją architekturę sieci. Dla bardziej skomplikowanych sieci używa się routingu dynamicznego. Ale to już zupełnie inna historia.