Spis treści

Warstwa sieci

Warstwa łącza danych zapewnia komunikację między bezpośrednio połączonymi urządzeniami.

Warstwa sieci zapewnia komunikację między dowolnymi urządzeniami.

Wiadomości na warstwie sieci nazywa się pakietami.
Urządzenia warstwy sieci to trasowniki (routery).

Na warstwie sieci działają protokoły IPv4 i IPv6

Fragmentacja w IPv4 i IPv6

Protokoły działające na drugiej warstwie (łącza danych) mają górne ograniczenie na wielkość ramek, np. dla Ethernetu to 1500B.

Niektóre protokoły działające na czwartej warstwie (transportu) potrzebują czasami przesłać większe wiadomości – np. w protokole UDP programista może zażądać wysłania wiadomości do rozmiaru 64kB.

Dlatego protokoły trzeciej warstwy (sieci) – takie jak IPv4 i IPv6 – potrafią wykonać fragmentację: podzielić wiadomość warstwy czwartej na fragmenty, przesłać każdy z nich w osobnym pakiecie, a następnie u odbiorcy złożyć te fragmenty w całość.

Fragmentacji, o ile to możliwe, należy unikać – często prowadzi do nieoptymalnego wykorzystania sieci.

ICMP

Protokół IP nie przewiduje informowania nadawcy o problemach.

Funkcje diagnostyczne i kontrolne dla IP spełnia protokół ICMP (Internet Control Message Protocol). ICMP różni się w szczegółach między wersją dla IPv4 (ICMP) i dla IPv6 (ICMPv6). ICMPv6 spełnia też dodatkowe funkcje.

ICMP/v6 pozwala między innymi na:

Trasowanie

Zadaniem warstwy sieci jest dostarczenie danych do dowolnego wskazanego urządzenia w sieci.
Jeśli cel nie jest bezpośrednio połączony, dane (pakiety) trzeba wysłać do wybranego z bezpośrednich sąsiadów.

Zauważ że adres źródłowy i docelowy warstwy sieci (adres IP) zostaje bez zmian od źródła do celu, a adres źródłowy i docelowy warstwy łącza danych (adres MAC) jest ustawiany na nowo przez każde kolejne urządzenie.

Trasowanie (routing) to wyznaczenie następnego urządzenia do którego zostanie wysłany pakiet.
Na każdym urządzeniu wyznaczany jest adres IP następnego skoku i interfejs którym pakiet zostanie wysłany (nigdy cała trasa).

Tablica tras

Urządzenia podejmują decyzję dokąd dalej wysłać pakiet na podstawie tablicy tras (routing table).

Tablicę tras można zbudować ręcznie (trasowanie statyczne), lub skonfigurować i uruchomić protokół trasowania dynamicznego który automatycznie zbuduje taką tablicę.

Tablica tras to lista wpisów na które składają się przynajmniej:

Przykład tablicy tras w Linuksie:

default          via 150.254.32.65  dev br0 proto dhcp
10.0.0.0/8       via 150.254.32.126 dev br0
10.3.0.0/16      via 150.254.32.65  dev br0
10.8.0.0/16      via 172.16.0.1     dev enp1s0 metric 100
10.8.0.0/16      via 150.254.32.88  dev br0    metric 200
150.254.32.64/26 dev br0    proto kernel scope link src 150.254.32.75
172.16.0.0/16    dev enp1s0 proto kernel scope link src 172.16.0.10
172.18.0.0/16    dev enp1s0 scope link

Wybór trasy

Schemat wyboru trasy:

Zwykle definiuje się w tablicy tras trasę domyślną.
Czasami jest ona traktowana "specjalnie" – pokazywana w osobnym miejscu lub opisana jako default (zamiast adresu sieci).
Jeśli nie – do zdefiniowania trasy domyślnej używa się adresu 0.0.0.0/0

Szukanie MAC, przełączanie, trasowanie – ilustracja

Komendy sprawdzające trasę pakietu

W nagłówku każdego pakietu IP jest limit przeskoków (w IPv4: TTL – Time To Live, w IPv6: Hop Limit), zmniejszany przez każdy mijany router. Kiedy licznik spadnie do zera, pakiet nie jest przesyłany dalej, a do nadawcy powinien zostać wysłany pakiet ICMP Time exceeded.

Można wykorzystać ten mechanizm do poznania trasy pakietu – wysyła się pakiety z wartościami limitu przeskoków 1, 2, 3, 4, …, następnie obserwuje skąd przychodzą odpowiedzi o przekroczeniu limitu.

Programy które służą do badania w ten sposób trasy to:

Konfiguracja trasowania statycznego w Linuksie

Wyświetlanie tablic routingu w systemie Linux

Narzędzia route (net-tools) i ip route (iproute2)

Wypisanie trasy (uwaga, komendy wypisują zwykle osobno trasy do IPv4 i IPv6):

Sprawdzenie adresu następnego skoku do podanego adresu docelowego:

Przykłady poleceń

Polityka systemu względem ruchu przechodzącego

Domyślnie Linux nie pozwala na przekazywanie pakietów (packet forwarding).
Aby zmienić to zachowanie, należy zmienić parametry jądra wykonując:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv6.conf.all.forwarding=1
lista dostępnych zmiennych: sysctl -a -r 'ip.*\.forwarding' (więcej informacji: man 8 sysctl oraz man 7 ip)
dla IPv4 będzie też działać starszy parametr: sysctl net.ipv4.ip_forward=1

Alternatywnie można też skorzystać z katalogu /proc:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
dla IPv4 będzie też działać starszy plik: echo 1 > /proc/sys/net/ipv4/ip_forward

Ponadto na większości produkcyjnych systemów firewall domyślnie zabrania na przepuszczanie ruchu

Komendy zmieniające trasy

iproute2

Dodanie trasy ip route add <addr>/<mask> [via <addr>] [dev <ifname>]
Dodanie trasy przez następny skok ip route add <addr>/<mask> via <addr>
np.: ip r add 192.168.5.0/24 via 192.168.0.254
Dodanie trasy przez urządzenie ip route add <addr>/<mask> dev <ifname>
np.: ip r add 192.168.6.0/24 dev tun0
Dodanie trasy domyślnej ip route add default via <następny skok> [dev <urządzenie>]
np.: ip r add default via 192.168.0.1
Usunięcie trasy ip route del <specyfkacja trasy>
np.: ip r del 192.168.5.0/24 via 192.168.0.254
Usunięcie całej tablicy routinug ip route flush
Uwaga! Usuwa też trasy do bezpośrednio połączonych sieci.

net-tools

Dodanie trasy route add [-net|-host] <cel> [netmask <maska>] [gw <brama>] [dev <ifname>] , np.
route add -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254
Usunięcie trasy route del [-net|-host] <cel> [netmask <maska>] [gw <brama>] [dev <ifname>] , np.
route del -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254
Dodanie trasy domyślnej route add default [gw <brama>] [dev <ifname>], np:
route add default gw 192.168.0.1
Uwaga! Starsze wersje nie znają słowa kluczowego default, trzeba ustawiać trasę do 0.0.0.0/0

Komendy ustawiające trasy IPv4 i IPv6 są identyczne, przykłady są tylko dla IPv4 dla zwięzłości materiałów.

Trasa może definiować jednocześnie adres następnego skoku i urządzenie.
Podanie samego urządzenia starczy tylko w specjalnych przypadkach, takich jak np. sieć bezpośrednio połączona.

Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy (metric, src) jak i też na sposób wysyłania nią pakietów (np. mtu, opcje TCP).

W Linuksie istnieją specjalne pseudo-trasy odrzucające pakiety – throw, unreachable, prohibit, blackhole, np:
ip r a blackhole 10.0.0.0/8
ip r a unreachable 10.0.0.0/8

[Ekstra] Komendy dla Windowsa