Do budowy sieci lokalnych (ale nie tylko) używa się głównie dwóch typów urządzeń: przełączników (ang. switch) i trasowników (ang. router).
Dwa urządzenia połączone ze sobą kablem lub połączone za pośrednictwem samych switchy mogą wysłać bezpośrednio do siebie ramki ethernetowe.
Jeżeli na ścieżce między urządzeniem źródłowym SRC a urządzeniem docelowym
DST jest router R, to urządzenie SRC nie może wysyłać ramki
ethernetowej do urządzenia DST. Zamiast tego, SRC może wysłać ramkę
ethernetową do routera R, który patrząc na dane zawarte w ramce (zwykle
adresy IP) prześle ją dalej do urządzenia DST.
Do adresowania ramek ethernetowych – wiadomości przesyłanych między urządzeniami
bezpośrednio połączonymi lub połączonym tylko switchami – używa się
adresów MAC (adresów fizycznych).
Adres MAC ma 48 bitów i jest zapisywany szesnastkowo, w 6 grupach po 8 bajtów
oddzielonych dwukropkiem.
Przykład adresu: 5c:f9:dd:78:3d:88.
Adresy MAC są wykorzystywane też w innych sieciach niż Ethernet – przykładowo są tak samo używane w sieciach Wi-Fi.
Adres MAC używany domyślnie (tzn. używany jeśli administrator nie wybierze innego)
jest ustawiany w nienadpisywalnej pamięci karty sieciowej przez jej producenta.
Taki adres MAC jest podzielony na dwie części: pierwsza połowa to
identyfikator producenta (OUI), druga połowa to numer karty.
Producenci sprzętu muszą wykupić pulę adresów.
Lista zajętych początków adresów jest dostępna publicznie,
razem z informacją kto ma który OUI.
System operacyjny musi sam wpisać adres MAC do każdej ramki, adres MAC używany przez kartę można zmienić na inny.
Adresy MAC z ustawionym bitem 0x01 w pierwszym bloku to adresy multicastowe (i adres rozgłoszeniowy, ff:ff:ff:ff:ff:ff).
Adresy użyte przez IPv4 do multicastu zaczynają się od 01:00:5e:…, a IPv6 od 33:33:…
Adresy MAC z ustawionym bitem 0x02 w pierwszym bloku to adresy lokalnie administrowane (nieunikalne). Można je nadawać np. urządzeniom wirtualnym.
| odczyt adresów MAC | zmiana adresu MAC |
ip link [show dev eth0] | ip link set dev eth0 address 12:34:56:78:90:ab |
ifconfig [eth0] | ifconfig eth0 hw ether 12:34:56:78:90:ab |
Większość sterowników kart pozwala zmieniać MAC tylko na wyłączonych kartach.
Urządzenia połączone ze sobą kablem lub połączone za pośrednictwem switchy mogą wysyłać do siebie wiadomości bezpośrednio, więc nadaje im się adresy z tej samej podsieci IP.
Połączone ze sobą bezpośrednio switche razem z bezpośrednio połączonymi do tych
switchy urządzeniami tworzą segment sieci
nazywany domeną rozgłoszeniową.
Nadanie adresów IP z tej samej podsieci na urządzeniach podłączonych do
różnych takich segmentów sieci jest nieprawidłową konfiguracją!
Komunikacje między takimi segmentami (domenami rozgłoszeniowymi) realizują routery.
Spójrz na sieć z ilustracji. Zauważ, że cokolwiek PC1 chce przesłać przez sieć,
może przesłać jedynie kablem do urządzenia R1 – bo tylko takie połączenie ma.
Ale co z PC2? Jeżeli chce wysłać dane do PC1 albo do PC3, to skąd ma wiedzieć
czy przesłać je kablem "w lewo" czy "w prawo"?
I skąd ma wiedzieć czy podać te dane do przekazania dalej urządzeniu R1 czy R2
(na "lewym" kablu), bądź R3 czy R4 (na "prawym" kablu)?
Wszystko to musi ustawić administrator tworząc tablicę tras.
Urządzenia podejmują decyzję dokąd dalej wysłać pakiet na podstawie
tablicy tras (routing table).
Taką 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 które określają do jakich adresów IP ten komputer
zna drogę i wskazuje jak/którędy można się do tych adresów dostać.
W tablicy tras są zarówno informacje o adresach IP z którymi urządzenie może
się bezpośrednio komunikować (trasy bezpośrednie), jak i informacje o adresach
do których można się dostać tylko za pośrednictwem innych urządzeń.
Na każdy wpis w tablicy tras składa się:
Zwykle definiuje się w tablicy tras też 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
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
Trasowanie (routing) to wyznaczenie następnego urządzenia do którego
zostanie przesłana wiadomość kierowana pod wskazany w tej wiadomości docelowy
adres IP.
Na każdym kolejnym urządzeniu wyznaczany jest adres IP następnego skoku
i interfejs którym pakiet zostanie wysłany (nigdy cała trasa).
Schemat wyboru trasy na podstawie tablicy tras:
172.21.0.0/16 via 172.16.0.16 dev eth2 172.21.0.0/24 via 172.16.0.24 dev eth2 172.21.0.0/28 via 172.16.0.28 dev eth2
150.254.44.0/23 dev wlan0 proto kernel scope link src 150.254.45.39 metric 2003 150.254.44.0/23 dev wlan1 proto kernel scope link src 150.254.44.149 metric 1002
default via 150.254.44.1 dev wlan0 default via 150.254.130.42 dev eth0
Do sprawdzania trasy którą idą dane do wskazanego adresu IP (czy nazwy domenowej), czyli do sprwdzenia przez jakie routery IP przechodzą dane na drodze do podanego celu, można użyć poleceń:
traceroute {-I|-T} <cel> -I lub -T, która go skutecznie omijamtr <cel>Zauważ, że urządzenia na trasie mogą:
Domyślnie Linux nie pozwala na przekazywanie pakietów które przyszły na
jednym interfejsie do wysłania innym interfejsem (ang. packet forwarding).
Żeby zmienić to zachowanie, czyli pozwolić Linuksowi pracować jako router,
należy zmienić parametry jądra wykonując komendy:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv6.conf.all.forwarding=1
Komenda sysctl zmienia opcje jądra systemu operacyjnego. Więcej informacji
znajdziesz w dokumentacji jądra.
Zamiast komendy sysctl 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 przepuszczania ruchu
Wypisanie trasy (uwaga, komendy wypisują zwykle osobno trasy do IPv4 i IPv6):
ip [-6] route [list|show] ip routeroute [-6] (komenda ze starszej paczki narzędzi – net-tools – tej z której jest ifconfig)ip route show table all pokaże wszystkie trasy narazWyświetlenie adresu następnego skoku do podanego adresu docelowego na podstawie skonfigurowanej tablicy tras:
ip route get <addr>
| 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. |
| 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
Wireshark to narzędzie, które pozwala między innymi wyświetlić
i analizować wiadomości wysłane przez karty sieciowe.
W tym celu, po uruchomieniu należy wybrać kartę i rozpocząć przechwytywanie.
Następnie wyświetli się lista przechwyconych wiadomości. Zaznaczenie jednej z
nich spowoduje wyświetlenie jej w postaci rozkodowanej – rozwijalnego
drzewa dla każdego z kolejnych użytych na różnych warstwach sieci protokołów.
Dodatkowo treści wiadomości pokazywana jest szesnastkowo.
route (uwaga, wsparcie tylko dla IPv4)route printroute add <SIEĆ> mask <MASKA> <NEXT_HOP> route add 192.168.1.0 mask 255.255.255.0 10.0.0.1route delete <SIEĆ> tracert1 typu DWORD do HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter