ICMP jako system komunikatów zwrotnych
Protokół Internetowy (IP) określa sposób przesyłania datagramów przez internet. Działa w modelu dostarczania "best-effort", więc nie potwierdza dostarczenia i nie zapewnia retransmisji na poziomie IP.
Warstwa IP przenosi datagram na podstawie adresu i trasy. Nie informuje sama nadawcy, gdy trasa nie istnieje, host jest niedostępny albo pakiet przekracza MTU. Szczegóły dostarczania i ewentualne retransmisje pozostają zadaniem protokołów wyższych warstw.
Model "best-effort" ma mały narzut, lecz potrzebuje osobnego mechanizmu raportowania błędów i diagnostyki. Router może nie znaleźć trasy do celu, odrzucić pakiet z powodu MTU albo usunąć go po wygaśnięciu TTL. Te zdarzenia opisuje ICMP.
Do tego służy , czyli Protokół Komunikatów Kontrolnych w Internecie. ICMP przekazuje informacje operacyjne, błędy i odpowiedzi diagnostyczne powiązane z IP. Umożliwia urządzeniom zgłaszanie problemów oraz sprawdzanie osiągalności innych hostów, lecz nie zmienia IP w protokół niezawodny. Dostarczenie komunikatu ICMP również nie jest gwarantowane. Router może ograniczać częstotliwość takich komunikatów, a reguły protokołu zabraniają generowania błędu w odpowiedzi na inny komunikat błędu ICMP. Brak odpowiedzi ICMP nie rozstrzyga więc samodzielnie, czy pierwotny pakiet dotarł do celu.
Jak działa ICMP: komunikat przenoszony w IP
ICMP nie jest protokołem transportowym takim jak TCP czy UDP i nie przenosi danych aplikacji, na przykład stron WWW lub poczty. Działa w warstwie sieciowej, a komunikat ICMP jest przenoszony wewnątrz pakietu IP.
W nagłówku IPv4 pole „Protokół” ma wartość 1, wskazując, że ładunek jest komunikatem ICMP. Odbiorca przekazuje go do obsługi ICMP.
Struktura Komunikatu ICMP
Każdy komunikat ICMP rozpoczyna się od pól wspólnych dla danego formatu:
- Typ (8 bitów): Określa ogólną kategorię komunikatu (np. „Cel nieosiągalny”).
- Kod (8 bitów): Dostarcza bardziej szczegółowych informacji o typie komunikatu (np. dla "Cel nieosiągalny" kod '1' oznacza "Host nieosiągalny").
- Suma kontrolna (16 bitów): Pole do sprawdzania błędów, podobne do sumy kontrolnej nagłówka IP, aby upewnić się, że sam komunikat ICMP nie został uszkodzony w tranzycie.
- Dane/Ładunek: Zawartość zależy od typu komunikatu. W komunikatach o błędach podstawowa specyfikacja ICMPv4 przewiduje nagłówek i pierwsze 8 bajtów oryginalnego pakietu IP, który spowodował błąd. Informacja pozwala hostowi źródłowemu powiązać błąd z transmisją. Pozostała część nagłówka ma znaczenie zależne od typu, na przykład może przechowywać identyfikator i numer sekwencyjny echa.
Kategoria 1: Komunikaty ICMP o Błędach
Routery lub hosty generują te komunikaty, gdy datagram IP nie może zostać dostarczony. Zwykle kierują je do źródła pakietu, z uwzględnieniem reguł ICMP dotyczących między innymi komunikatów błędów, multicastu i broadcastu.
Typ 3: Cel Nieosiągalny
Jest to jeden z podstawowych komunikatów o błędach. Oznacza, że router lub host docelowy nie może dostarczyć pakietu. Pole „Kod” podaje konkretny powód:
- Kod 0: Sieć nieosiągalna. Router nie ma w swojej tablicy routingu trasy do sieci docelowej.
- Kod 1: Host nieosiągalny. Router ma połączenie z siecią docelową, lecz nie może dostarczyć pakietu do konkretnego hosta, na przykład gdy host jest wyłączony lub nie odpowiada.
- Kod 3: Port nieosiągalny. Pakiet dotarł do hosta docelowego, lecz aplikacja wskazana przez port TCP lub UDP nie działa albo nie nasłuchuje połączeń.
- Kod 4: Wymagana fragmentacja, a ustawiono flagę DF. Pakiet przekracza MTU następnego łącza, lecz flaga „Nie fragmentuj” (DF) zabrania routerowi fragmentacji. Router odrzuca pakiet i wysyła ten błąd, a w komunikacie może przekazać wartość następnego MTU.
Typ 11: Przekroczono Czas
Ten komunikat ma między innymi dwa opisane tu zastosowania. Router może wygenerować typ 11 zarówno dla TTL, jak i dla limitu czasu składania fragmentów:
- Kod 0: TTL wygasł w tranzycie. Pole Czas Życia (TTL) w nagłówku pakietu osiągnęło zero. Router zmniejszył TTL do 0 i odrzucił pakiet. Mechanizm ogranicza pętle routingu i stanowi podstawę działania narzędzia
traceroute. - Kod 1: Przekroczono czas ponownego składania fragmentu. Gdy datagram został sfragmentowany, host docelowy oczekuje na wszystkie fragmenty. Po wygaśnięciu licznika odrzuca otrzymane części i może wysłać ten błąd.
Kategoria 2: komunikaty zapytania ICMP i narzędzie ping
Komunikaty zapytania są wysyłane przez hosta lub administratora w celu zebrania informacji albo zdiagnozowania problemu. Najbardziej znanym zastosowaniem jest narzędzie ping.
wysyła żądanie echa do wskazanego hosta i oczekuje odpowiedzi. W IPv4 używa dwóch typów komunikatów ICMP. Żądanie zawiera identyfikator i numer sekwencyjny, które ułatwiają powiązanie odpowiedzi z konkretną próbą.
- Typ 8, Kod 0: Żądanie Echa. To komunikat wysyłany do hosta docelowego.
- Typ 0, Kod 0: Odpowiedź Echa. To odpowiedź hosta docelowego na żądanie, jeśli host ją generuje i pakiet wraca do nadawcy.
Interpretacja Wyniku ping
Poniższy zapis pokazuje format wyniku polecenia ping:
> ping 192.0.2.10
Pinging 192.0.2.10 with 32 bytes of data:
Reply from 192.0.2.10: bytes=32 time=9ms TTL=119
Reply from 192.0.2.10: bytes=32 time=8ms TTL=119
Reply from 192.0.2.10: bytes=32 time=9ms TTL=119
Reply from 192.0.2.10: bytes=32 time=9ms TTL=119
Ping statistics for 192.0.2.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 8ms, Maximum = 9ms, Average = 8ms
Odpowiedź z 192.0.2.10: W rzeczywistym wyniku wskazuje adres, z którego wróciła odpowiedź. Ten blok ma charakter demonstracyjny i używa adresu dokumentacyjnego.bytes=32: Pokazuje rozmiar ładunku ICMP wysłanego w żądaniu echa.time=8ms: To jest Czas Podróży w Obie Strony (RTT). Obejmuje przejście Echo Request do celu i powrót Echo Reply, dlatego opisuje opóźnienie tej konkretnej próby. Wynik może zależeć od obciążenia oraz trasy.TTL=119: Jest to pozostała wartość Czasu Życia z pakietu odpowiedzi. Może służyć do przybliżenia liczby przeskoków, jeśli znana jest wartość początkowa. Przy TTL równym 128 daje to routerów na drodze powrotnej.Utracone = 0: Pokazuje liczbę i procent utraconych prób w tym uruchomieniu. Wartość nie opisuje wszystkich transmisji w sieci.
Mapowanie Trasy: Narzędzie traceroute
Podczas gdy ping mówi czy host jest osiągalny i jak długo trwa podróż w obie strony, narzędzie traceroute (lub tracert w systemie Windows) pokazuje ścieżkę, którą pokonują pakiety, aby tam dotrzeć. Pokazuje ono adres IP każdego routera po drodze.
Traceroute to narzędzie diagnostyczne, które zmienia pole TTL pakietów IP i odbiera komunikaty ICMP „Przekroczono czas”. Konkretna metoda zależy od implementacji. Klasyczny traceroute Unix często używa pakietów UDP, a Windows tracert pakietów ICMP Echo. Brak odpowiedzi na danym przeskoku może oznaczać filtrowanie lub limitowanie ICMP, więc nie zawsze wskazuje awarię przekazywania.
Jak Działa Traceroute
- Wysyłanie Pierwszego Pakietu: Traceroute wysyła pakiet w kierunku celu, ale ustawia jego TTL na 1.
- Odpowiedź Pierwszego Routera: Pierwszy router na ścieżce odbiera pakiet, zmniejsza TTL z 1 do 0 i odrzuca go. Następnie odsyła komunikat ICMP „Przekroczono czas” z powrotem do źródła. Adres źródłowy tego komunikatu ICMP to adres IP pierwszego routera! Traceroute zapisuje ten adres i RTT.
- Wysyłanie Drugiego Pakietu: Następnie traceroute wysyła kolejny pakiet do tego samego celu, ale tym razem ustawia TTL na 2.
- Odpowiedź Drugiego Routera: Pierwszy router odbiera ten pakiet, zmniejsza TTL do 1 i przekazuje go dalej. Drugi router go odbiera, zmniejsza TTL z 1 do 0, odrzuca i odsyła komunikat ICMP „Przekroczono czas”. Teraz traceroute zna adres IP drugiego routera na ścieżce.
- Kolejne wartości TTL: Proces jest kontynuowany z TTL zwiększanym o jeden dla kolejnych pakietów. Router, który zmniejszy TTL do zera, odsyła błąd ICMP, co pozwala narzędziu odczytać jego adres.
- Dotarcie do celu: Gdy TTL wystarczy do dostarczenia pakietu, host docelowy nie wysyła komunikatu „Przekroczono czas”. Dla klasycznego trybu UDP może zwrócić „Port nieosiągalny”, ponieważ narzędzie używa nieaktywnego portu docelowego. Tryb ICMP kończy się odpowiedzią Echa. Otrzymana odpowiedź oznacza koniec śledzenia.
Ewolucja: ICMPv6
ICMPv6 rozszerza ICMP dla IPv6 i używa numeru protokołu 58. Obsługuje raportowanie błędów oraz diagnostykę, w tym ping i traceroute, a także komunikaty wymagane przez działanie IPv6.
Jedną z tych funkcji jest Neighbor Discovery Protocol (NDP), który używa komunikatów ICMPv6 do rozpoznawania adresów sąsiadów, wykrywania routerów, prefiksów i osiągalności. Zarządzanie członkostwem w grupach multicast realizuje osobny mechanizm MLD. NDP zastępuje lokalne zastosowania ARP w IPv6, natomiast MLD nie jest częścią NDP. W ICMPv6 komunikat błędu zawiera tyle początkowej części wywołującego pakietu, ile mieści się przy wymaganym minimum MTU IPv6, a typy poniżej 128 oznaczają błędy, zaś typy od 128 informacje.