===== Konfiguracja do zajęć ===== ~~Zadanie.#~~ Na początku zajęć, pracując w grupach, połączcie cztery komputery jak na schemacie:
┌───┐       p4p1┌───┐       p4p1┌───┐       p4p1┌───┐
│PC1├···········┤PC2├···········┤PC3├···········┤PC4│
└───┘p4p1       └───┘p4p2       └───┘p4p2       └───┘
~~Zadanie.#~~ Następnie skonfigurujcie każdy z tych komputerów poniższymi gotowymi komendami: \\ (można je po prostu skopiować i wkleić do powłoki pracującej z uprawnieniami roota): ethtool --offload p4p1 gro off gso off tso off ufo off ip link set p4p1 address 02:00:00:00:01:01 ip link set p4p1 up ip address add 10.1.2.1/24 dev p4p1 ip address add fd00:1:2::1/64 dev p4p1 ip route add 10.2.3.0/24 via 10.1.2.2 ip route add 10.3.4.0/24 via 10.1.2.2 ip route add fd00:2:3::/64 via fd00:1:2::2 ip route add fd00:3:4::/64 via fd00:1:2::2 ethtool --offload p4p1 gro off gso off tso off ufo off ethtool --offload p4p2 gro off gso off tso off ufo off ip link set p4p1 address 02:00:00:00:02:01 ip link set p4p1 up ip link set p4p2 address 02:00:00:00:02:02 ip link set p4p2 up ip address add 10.1.2.2/24 dev p4p1 ip address add fd00:1:2::2/64 dev p4p1 ip address add 10.2.3.2/24 dev p4p2 ip address add fd00:2:3::2/64 dev p4p2 sysctl net.ipv4.conf.all.forwarding=1 sysctl net.ipv6.conf.all.forwarding=1 ip route add 10.3.4.0/24 via 10.2.3.3 ip route add fd00:3:4::/64 via fd00:2:3::3 ethtool --offload p4p1 gro off gso off tso off ufo off ethtool --offload p4p2 gro off gso off tso off ufo off ip link set p4p1 address 02:00:00:00:03:01 ip link set p4p1 up ip link set p4p2 address 02:00:00:00:03:02 ip link set p4p2 up ip address add 10.2.3.3/24 dev p4p1 ip address add fd00:2:3::3/64 dev p4p1 ip address add 10.3.4.3/24 dev p4p2 ip address add fd00:3:4::3/64 dev p4p2 sysctl net.ipv4.conf.all.forwarding=1 sysctl net.ipv6.conf.all.forwarding=1 ip route add 10.1.2.0/24 via 10.2.3.2 ip route add fd00:1:2::/64 via fd00:2:3::2 ethtool --offload p4p1 gro off gso off tso off ufo off ip link set p4p1 address 02:00:00:00:04:01 ip link set p4p1 up ip address add 10.3.4.4/24 dev p4p1 ip address add fd00:3:4::4/64 dev p4p1 ip route add 10.2.3.0/24 via 10.3.4.3 ip route add 10.1.2.0/24 via 10.3.4.3 ip route add fd00:2:3::/64 via fd00:3:4::3 ip route add fd00:1:2::/64 via fd00:3:4::3 Komenda ''ethtool --offload …'' użyta w powyższych poleceniach konfiguruje kartę sieciową tak by ta przekazywała do systemu operacyjnego takie ramki ethernetowe jak przyszły z sieci. Karty sieciowe potrafią dla popularnych protokołów warstwy sieci i transportu rozpoznać że jedna wysłana wiadomość aplikacyjna została podzielona na kilka ramek i zamiast przekazać te prawdziwe ramki, przekazują sztucznie stworzoną, nierzeczywistą ramkę z tą samą wiadomością aplikacyjną. To zmniejsza ilość ramek które musi przetworzyć system operacyjny, dzięki czemu potrzeba cykli procesora do przetworzenia tych samych danych. ===== Użycie adresów MAC i IP przy przesyłaniu pakietów ===== ~~Zadanie.#~~ Uruchom program ''wireshark'' na każdym z komputerów dla każdego wcześniej skonfigurowanego interfejsu sieciowego (czyli np. PC2 musi uruchomić raz program ''wireshark'' dla //p4p1// i drugi raz dla //p4p2//). \\ Z PC1 wykonaj ''ping -c1 10.3.4.4'' lub ''ping -c1 fd00:3:4::4'', a następnie sprawdź jakie adresy MAC i IP ma ta sama wiadomość ping (ICMP echo request) na każdej karcie sieciowej każdego z komputerów. \\ Czy adresy IP się zmieniają? Czy adresy MAC się zmieniają? ==== Szukanie MAC dla IP ==== Aplikacje informują system operacyjny tylko z jakim adresem IP chcą się komunikować. Wysyłając ramkę, system operacyjny musi sam uzupełnić pole adresu MAC odbiorcy. \\ W tym celu najpierw system operacyjny przegląda tablicę tras i ustala która trasa zostanie użyta, tj. wykonuje trasowanie (//routing//). Po wybraniu trasy ustala adres IP bezpośrednio połączonego urządzenia które ma dostać tę wiadomość i interfejs którym ją wyśle. \\ Następnie musi znaleźć adres MAC tego bezpośrednio połączonego urządzenia (na razie ustalił tylko jego adres IP). Zauważ że tym urządzeniem będzie albo odbiorca, albo kolejny router na trasie do odbiorcy. Do znajdowania adresów MAC dla podanego adresu IPv4 służy protokół [[https://en.wikipedia.org/wiki/Address_Resolution_Protocol|ARP]].\\ Do znajdowania adresów MAC dla podanego adresu IPv6 służy protokół [[https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol|NDP]]. System operacyjny trzyma odwzorowania adresów IP na adresy MAC przez określony czas w pamięci podręcznej (żeby nie musieć ciągle wyszukiwać MAC dla IP z którym często wymienia dane). Informacje o tym jakie odwzorowania IP na MAC zna system operacyjny można wyświetlić komendą **''ip neighbour''** (działa też pisownia ''ip neighbor''). \\ Do wyświetlenia odwzorowań adresów IPv4 na MAC można użyć starszej komendy ''arp''. \\ Listę znanych odwzorowań można wyczyścić komendą ''ip neighbour flush {all|dev }''. ~~Zadanie.#~~ Upewnij się że wiresharkiem przechwytujesz pakiety sieciowe na //p4p1// / //p4p2//. Następnie: * wyczyść listę odwzorowań IP na MAC na każdym komputerze, * wykonaj z PC4 ''ping -c1 10.1.2.1'' oraz ''ping -c1 fd00:1:2::1'', * wyświetl listę odwzorowań adresów IP na adresy MAC po wykonaniu tych komend * znajdź w przechwyconych wiresharkiem pakietach te odpowiadające za wyszukanie adresów MAC dla wskazanych IP.
O adresy MAC odpowiadające jakim adresom IP pytał PC4 i PC3? Dlaczego pytał konkretnie o te adresy IP? Komenda ''arping'' pozwala wysłać żądanie protokołu ARP:\\ ''**arping** -I '' \\ np. ''arping -I p4p2 10.2.3.3'' Komenda ''ndisc6'' pozwala wysłać wiadomość //Neighbor Solicitation// protokołu NDP:\\ ''**ndisc6** '' \\ np. ''ndisc6 fd00:2:3::2 p4p1'' ~~Zadanie.#~~ Ręcznie odpytaj o adres MAC urządzenia o adresie IPv4 osoby siedzącej obok, a następnie o MAC urządzenia o adresie IPv6 tej samej osoby siedzącej obok. ~~Zadanie.#~~ Kiedy można używać komendy ''ping'' i ''arping''/''ndisc6'' praktycznie wymiennie do sprawdzania czy jest łączność? \\ Kiedy jednej z nich nie da się do tego wykorzystać? \\ Czy sieć może działać jeżeli komenda ''ping'' wykonana dla adresu sąsiedniego urządzenia nie dostaje odpowiedzi? \\ Czy sieć może działać jeżeli komenda ''arping'' wykonana dla adresu sąsiedniego urządzenia nie dostaje odpowiedzi? ==== Szukanie MAC, przełączanie, trasowanie – ilustracja ==== ===== Protokoły warstwy transportu ===== Protokoły warstwy sieci (np. IPv4 czy IPv6) zapewniają komunikację między dowolnymi urządzeniami w sieci. Jednym z głównych zadań protokołów warstwy transportu jest dostarczenie wiadomości sieciowych do właściwego procesu (czyt. uruchomionego programu) działającego na docelowym urządzeniu (i zapewnienie żeby odpowiedzi też wracały do właściwego procesu). W internecie na warstwie transportu używa się głównie protokołów TCP i UDP. ==== Model klient-serwer ==== Programy sieciowe zwykle pełnią rolę serwera lub klienta. Serwer to program który czeka (nasłuchuje) na nowe połączenia lub wiadomości od nowych klientów. Klient to program który łączy się do serwera lub pierwszy wysyła do niego wiadomość. Program może jednocześnie pełnić rolę serwera i klienta – czekać na połączenia od klientów, ale też samemu inicjować komunikację. Np. serwer WWW czeka na połączenie od klientów (przeglądarek internetowych), ale do obsługi niektórych zapytań może potrzebować połączyć się (jako klient) z serwerem bazy danych. ==== Adresacja na warstwie transportowej ==== Protokoły warstwy transportowej spójnie używają 16-bitowej liczby jako adres. \\ Adres warstwy transportowej nazywa się **numerem portu**. System operacyjny po otrzymaniu wiadomości biorąc pod uwagę: * adresu warstwy sieci (np. IP) źródłowy (zdalny), * adresu warstwy sieci (np. IP) docelowy (lokalny), * użyty protokół warstwy transportowej, * adresu warstwy transportowej (np. port) źródłowy (zdalny), * adresu warstwy transportowej (np. port) docelowy (lokalny),
sprawdza czy wiadomość należy do już istniejącego połączenia (i wtedy dostarcza dane do tego połączenia), a jeśli nie, to czy jakiś program czeka na nowe połączenie / wiadomości pod docelowym adresem IP i docelowym portem użytego protokołu warstwy transportowej. === Znane numery portów === Konkretne numery portów są zwyczajowo używane do adresowania konkretnych programów. \\ Np. port 80 i 443 jest używany przez serwery stron internetowych, a porty 25, 465 lub 587 przez serwery poczty internetowej (e-mail). \\ Lista takich numery portów, wraz z przypisanymi do nich słownymi nazwami i informacją do czego są (albo były w przeszłości) używane [[http://www.iana.org/assignments/service-names-port-numbers|jest utrzymywana]] przez organizację IANA. \\ W Linuksie dodatkowo taka lista jest tradycyjnie dostępna w pliku ''/etc/services''. === Zakresy numerów portów === Zakres numerów portów jest podzielony na porty [[https://tools.ietf.org/html/rfc6335#section-8.1.2|[RFC6335]]]: * uprzywilejowane (system / well-known / privileged) – 1**÷1023** \\ jako lokalne porty mogą być używane tylko przez uprzywilejowanego użytkownika (root / administrator), * //zarejestrowane// ((czy ktoś zna jakieś lepsze tłumaczenie na polski nazwy "user ports" lub "registered ports"?)) (user / registered) – **1024÷**49151 \\ mogą zostać zarejestrowane (tzn. przypisane do konkretnego zastosowania w rejestrze utrzymywanym przez IANA), * efemeryczne (dynamic / private / ephemeral) – 49152÷65535 \\ używane kiedy program nie potrzebuje stałego numeru portu (czyli zwykle kiedy program nawiązuje połączenie).
W implementacjach systemów operacyjnych zwykle granica między user ports a ephemeral jest niższa, np. w Linuksie zakres portów efemerycznych można odczytać wykonując jedną z komend:   ''sysctl net.ipv4.ip_local_port_range''   /   ''cat /proc/sys/net/ipv4/ip_local_port_range''. ==== Monitorowanie bieżących połączeń ==== Polecenia ''**netstat**'' i ''**ss**'' wyświetlają listę połączeń (nie tylko sieciowych) których stroną jest ten komputer oraz (po podaniu odpowiedniej opcji) informacje na jakich adresach IP i portach procesy na tym komputerze czekają na połączenia bądź wiadomości. \\ Oba programy domyślnie pokazują też [[https://en.wikipedia.org/wiki/Unix_domain_socket|połączenia uniksowe do komunikacji międzyprocesowej]], więc **używając tych programów prawie zawsze warto dodawać przełącznik ''-t'' i/lub ''-u''**. \\ Pliki ''/proc/net/(tcp|udp|…)'' zawierają informacje o połączeniach w formacie przystępnym dla maszynowego przetwarzania.
Wybrane przełączniki dla netstat / ss:
┌      (domyślnie) tylko już nawiązane połączenia
│ -l   nasłuchujące porty (procesy czekające aż ktoś do nich się połączy)     
└ -a   nasłuchujące porty + nawiązane połączenia
┌      (domyślnie) wszystkie wspierane protokoły sieciowe
│ -t   połączenia protokołu TCP
└ -u   połączenia protokołu UDP
┌ -4   wybiera IPv4
└ -6   wybiera IPv6
  -p   nazwa i pid programu do którego należy połączenie
  -n   pokazywanie wszystkich wartości numerycznie, np. '22' zamiast 'ssh'
  -W   [tylko netstat] wyłącza przycinanie adresów IP / nazw domenowych do szerokości kolumny
Dodatkowo ''ss'' pozwala filtrować wyniki między innymi po adresach ip (''src'' i ''dst'') oraz numerach portów (''sport'' i ''dport''), np: \\ ''ss -t dport 443''           ''ss -aut src 127.0.0.1 or src 150.254.0.0/24'' \\ Więcej opcji znajdziesz w pomocy wbudowanej (''netstat -h'' / ''ss -h'') i podręczniku systemowym (''man netstat'' / ''man ss''). Przykładowy wynik polecenia ''netstat'':
# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      13830/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      28693/exim4
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      26745/cupsd
tcp        0    780 10.0.1.1:22             150.254.33.66:38126     ESTABLISHED 19424/sshd: usernam
tcp        0      0 10.0.1.1:38596          150.254.30.199:443      ESTABLISHED 19481/weechat
tcp6       0      0 :::22                   :::*                    LISTEN      13830/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           14541/dhclient
udp        0      0 10.0.1.1:53             0.0.0.0:*                           22173/named
udp      768      0 0.0.0.0:35722           0.0.0.0:*                           21533/snmpwalk
==== Testowanie łączności na warstwie aplikacji ==== ''[[https://en.wikipedia.org/wiki/Netcat|netcat]]'' (czasami dostępny jako ''nc'') to szeroko rozpowszechnione narzędzie potrafiące nawiązać proste połączenia sieciowe bądź stworzyć prosty serwer (używając protokołu TCP bądź UDP). \\ Uwaga: netcat ma wiele wersji różniących się możliwościami, przełącznikami i zachowaniem! ''[[http://www.dest-unreach.org/socat/|socat]]'' to rozbudowany i wciąż rozwijany program pozwalający testować rozmaite "połączenia" sieciowe. \\ ''socat'' zawsze łączy dwa "strumienie" ze sobą np. standardowe wejście/wyjście z połączeniem sieciowym. \\ Można też łączyć np. jedno połączenie sieciowe z drugim, czy połączenie sieciowe z programem. | ^ Serwer ^ Klient ^ ^ TCP|''nc -l -p //12345//'' |''nc //10.0.0.1// //12345//'' | ^ :::|''socat TCP-LISTEN:12345 STDIO'' |''socat STDIO TCP:10.0.0.1:12345'' | ^ UDP (pseudo-połączeniowe)|''nc -u -l -p //12345//'' |''nc -u //10.0.0.1// //12345//'' | ^ :::|''socat UDP-LISTEN:12345 STDIO'' |''socat STDIO UDP:10.0.0.1:12345'' | ^ UDP (zorientowane na wiadomość)|''socat UDP-RECV:12345 STDIO'' |''socat STDIO UDP-SENDTO:10.0.0.1:12345'' | Komendy dla UDP zorientowanego na wiadomość pozwalają tylko wysyłać albo tylko odbierać dane. Możesz dodać przełącznik ''-u'' żeby wyciszyć ostrzeżenia i błędy przy próbie komunikacji w drugą stronę. ''netcat'' nie potrafi korzystać z UDP w trybie zorientowanym na wiadomość. W programie ''socat'' zamiast ''STDIO'' można podać ''-'' (dodatkowo w większości dystrybucji można też skorzystać z ''readline''). \\ ''socat'' nie rozróżnia wielkości liter, pozwala na skróty – np. ''udp-l'' jako ''udp-listen'' czy ''tcp'' jako ''tcp-connect'' \\ Adresy IPv6 podaje się w nawiasach kwadratowych, np. [::1] ~~Zadanie.#~~ Pracując w parach: * jedna osoba uruchamia dwa serwery TCP na dwóch różnych portach (programem ''netcat'' lub ''socat''), * sprawdzacie (np. programem ''netstat'') jak informacje o tych serwerach są widoczne w systemie, * druga osoba łączy się do jednego z tych serwerów (też programem ''netcat'' lub ''socat'') podając odpowiedni adres IP i port, a następnie przesyła dane (wpisując je z klawiatury i wciskając enter), * bez przerywania połączenia sprawdzacie (np. programem ''netstat'') jak informacje o tym połączeniu są widoczne w systemie. ~~Zadanie.#~~ Połącz się (programem ''netcat'' lub ''socat'') po TCP na adres 150.254.30.26 i port 80, a następnie wyślij GET /SK/ HTTP/1.0 i pustą linię. Co dostajesz w odpowiedzi? \\ To zadanie da się wykonać tylko z sal laboratoryjnych. ~~Zadanie.#~~ Z uprawnieniami roota uruchom serwer TCP (programem ''netcat'' lub ''socat'') działający na porcie 80. Następnie w przeglądarce internetowej wejdź na adres [[http://localhost/plik.txt]]. Co pojawiło się po stronie serwera? Odpisz coś przeglądarce i przerwij połączenie ze strony serwera. Co pojawiło się po stronie przeglądarki? Po zapewnieniu łączności między procesami (czyli na warstwie transportowej) kończy się rola systemu operacyjnego – to jak przesyłane dane są interpretowane zależy już od twórcy aplikacji. Aplikacje nie są w stanie stwierdzić jaki program jest po drugiej stronie połączenia – widzą tylko przesyłane dane. ===== Skąd wiadomo które protokoły są używane ===== Dane odebrane przez ethernetową kartę sieciową mogą być tylko [[https://en.wikipedia.org/wiki/Ethernet_frame|ramką ethernetową]] (o z góry znanej strukturze). W ramce ethernetowej jest miejsce na wpisanie jaki protokół warstwy sieci (np. IPv4, IPv6, ARP, …) jest używany w danych tej ramki. Jeżeli dane z ramki używają protokołu IPv4 lub IPv6, to w nagłówku tego protokołu jest miejsce określające jaki protokół warstwy transportowej ma być użyty do zinterpretowania danych (np. TCP, UDP, …). Protokoły warstwy transportu wskazują z kolei numerem portu który proces działający w systemie ma dostać dane do dalszego zinterpretowania. ~~Zadanie.#~~ Znajdź w wiresharku wiadomość protokołu HTTP (możesz ją wygenerować wchodząc na http://sirius.cs.put.poznan.pl/~jkonczak/hello.html). Określ jakie protokoły warstwy łącza danych, sieci, transportu i aplikacji używa ta wiadomość. ===== 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.
~~Zadanie.#~~ Uruchom na jednym z komputerów (np. PC4) komendę czekającą na wiadomości UDP na wybranym porcie:
Duża wiadomość UDP \\ do skopiowania:
0...................................................................................................100.................................................................................................200.................................................................................................300.................................................................................................400.................................................................................................500.................................................................................................600.................................................................................................700.................................................................................................800.................................................................................................900.................................................................................................1000................................................................................................1100................................................................................................1200................................................................................................1300................................................................................................1400................................................................................................1500................................................................................................1600................................................................................................1700................................................................................................1800................................................................................................1900................................................................................................2000................................................................................................2100................................................................................................2200................................................................................................2300................................................................................................2400................................................................................................2500................................................................................................2600................................................................................................2700................................................................................................2800................................................................................................2900................................................................................................3000................................................................................................3100................................................................................................3200................................................................................................3300................................................................................................3400................................................................................................3500................................................................................................3600................................................................................................3700................................................................................................3800................................................................................................3900................................................................................................
''socat -u udp6-recv:2222 stdout'' \\ Następnie wyślij do tego komputera (np. z PC1) dużą wiadomość UDP – linię zawierającą ponad 3000 znaków, kolejno komendami: \\ ''socat stdin udp-sendto:10.3.4.4:2222'' \\ ''socat -u stdin udp-sendto:[fd00:3:4::4]:2222'' \\ Obejrzyj wygenerowany ruch w programie wireshark. ===== Pętle w sieci; TTL / Hop Limit ===== Jednym z błędów konfiguracji w sieciach jest stworzenie pętli – zmuszenie wiadomości do krążenia w zamkniętym cyklu. Wykonanie takiej [[https://en.wikipedia.org/wiki/Switching_loop|pętli]] między switchami (czyli w jednej domenie rozgłoszeniowej) jest katastrofalne w skutkach – każda ramka wysłana na adres rozgłoszeniowy będzie krążyć w tej pętli w nieskończoność, zapychając sobą sieć. (Na taki adres są wysyłane np. wiadomości szukające adresu MAC dla podanego adresu IP.) \\ Jedynym sposobem na przywrócenie normalnej pracy jest zlikwidowanie pętli, zwykle przez wypięcie jednego z tworzących ją kabli. \\ Powstawaniu pętli mają zapobiegać [[http://en.wikipedia.org/wiki/Spanning_tree_protocol|protokoły drzewa rozpinającego]] (STP, RSTP, PVSTP (cisco), MSTP), które automatycznie wykrywają czy każde nowe połączenie może stworzyć pętle i jeżeli tak, to wyłączają to połączenie. Innym rodzajem [[https://en.wikipedia.org/wiki/Routing_loop|pętli]] jest ustawienie tablic tras na różnych urządzeniach w taki sposób, że pakiet IP "wraca" do urządzenia które wcześniej już minął na trasie. \\ Żeby taki pakiet IP nie krążył w nieskończoność, w nagłówkach protokołów IPv4 / IPv6 jest pole TTL / hop limit. Kiedy router przekazuje przez jeden interfejs pakiet otrzymany wcześniej na innym interfejsie, to zmniejsza o jeden wartość tego pola. Kiedy wartość TTL / hop limitu spadnie do 0, pakiet nie jest dalej przekazywany. ~~Zadanie.#~~ Wykonaj z PC1 ''ping -c1 10.3.4.4'' oraz ''ping -c1 fd00:3:4::4'' i zobacz jak zmienia się wartość TTL / hop limit na kolejnych komputerach. ===== 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 [[https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol|IPv4 (ICMP)]] i dla [[https://en.wikipedia.org/wiki/ICMPv6|IPv6 (ICMPv6)]]. ICMPv6 spełnia też dodatkowe funkcje. ICMP/v6 pozwala między innymi na: * wysłanie informacji zwrotnej o niedostarczeniu pakietu, z podaniem powodu, np: * nie ma takiej sieci, komputera, programu docelowego, … (//destination unreachable//) * zabroniono fragmentacji, a pakiet był za duży żeby go przesłać dalej (//packet too big//) * pakiet zrobił za dużo skoków i skończył się TTL/hop limit (//time exceeded//) * testowanie łączności (ping – //echo request// i //echo reply//) ~~Zadanie.#~~ Uruchom nasłuchiwanie programem wireshark na interfejsie ''br0''. Następnie zobacz jakie pakiety protokołu ICMP pojawią się przy próbie wykonania polecenia: * ''ping -c1 1.1.1.1'' * ''ping -c3 150.254.32.180'' * ''ping -c3 2001:808:201:101::2'' * ''socat shell:echo udp-sendto:150.254.32.65:13'' * ''traceroute -nTN 1 -q 1 man.poznan.pl''