Protokół ICMP

Materiały edukacyjne z informatyki

Protokół ICMP (Internet Control Message Protocol) – to protokół kontrolny transportowany w datagramach IP. Steruje przepływem danych; informuje o niemożliwości dostarczenia danych (Destination Unreachable, typ 3) ze względu na błąd docelowego adresu IP (Host-unreachable (kod 0), Protocol-unreachable (kod 2), Port-unreachable (kod 3)), błąd adresu docelowej sieci (Network-ureachable (kod 0)), niemożności fragmentacji (kod 4) lub problemów z routingiem (kod 5); przekierowuje trasy; testuje osiągalność hostów w sieci (ping, komunikat Echo Message, odpowiedź Echo Request); informuje host źródłowy o usunięciu datagramu z powodu wyzerowania pola TTL (komunikat Time-exceeded).

Format nagłówka ICMP

MAC header IP header ICMP header DANE

Wiadomości ICMP transportowane są wewnątrz datagramów IP, których pola przyjmują wtedy określone wartości: Typ usługi (TOS) = 0; Protokół = 1; Adres źródła – adres bramki lub hosta, który utworzył komunikat; Adres przeznaczenia – adres bramki lub hosta, do którego komunikat powinien dotrzeć.

8 bitów 8 bitów 16 bitów
Typ Kod Suma kontrolna
Nie używane
Nagłówek IP + 64 bity pierwotnego datagramu, którego dotyczy aktualny pakiet ICMP
  • Typ (Type) = 3 (destination unreachable, cel nieosiągalny). Inne możliwe wartości to np.: 0 – echo reply; 5 – redirect; 8 – echo request; 11- time exceeded itd.
  • Kod (Code, przykładowe wartości dla typu 3): 0 = net unreachable (sieć nieosiągalna); 1 = host unreachable (host nieosiągalny); 2 = protocol unreachable (host docelowy nie obsługuje protokołu warstwy wyższej); 4 = fragmentation needed and DF set (datagram nie może zostać sfragmentowany w celu dostarczenia do sieci docelowej); 5 = source route failed (dtagram nie może zostać dostarczony z powodu problemów z routingiem);
  • Nie używane (Unused) – wypełnione zerami.

Polecenia korzystające z tego protokołu to ping i traceroute (tracert). Ping korzysta z komunikatów Echo (typ 0) i Echo Reply (typ 8), wysyła datagramy o domyślnym rozmiarze 56 bajtów (+ 8 bajtów nagłówka ICMP daje 64 bajty), np.:
> ping -t www.onet.pl [213.180.130.200]
# ping -n 213.180.130.200 – odpytywanie bez rozwiązywania nazwy DNS

Polecenie traceroute (tracert) wyświetla w kolejnych wierszach odpowiedzi listę nazw DNS (jeżeli udało się je uzyskać) kolejnych routerów oraz czasy przejścia trzech kolejnych datagramów wysłanych do każdego kolejnego routera. Traceroute wysyła po trzy na raz datagramy do docelowego hosta. Datagramy te zawierają pakiet UDP skierowany na port 33434 (nr ten jest zwiększany o 1 dla kolejnych routerów), a wartość w polu TTL ustawiana jest począwszy od 1 do liczby, która wyznacza ostatni router przekazujący datagram hostowi docelowemu (+1). Proces kończy się w momencie dostarczenia datagramu do hosta docelowego, który odpowiada komunikatem ICMP Port unreachable (ponieważ datagram skierowany jest do nieużywanego portu UDP). Za każdym razem traceroute odbiera od routerów pakiet ICMP (z komunikatem Time Exceeded i informacją o ich adresie IP) oraz odnotowuje czas transmisji datagramu IP i powrotu komunikatu ICMP. Uzyskana w odpowiedzi * oznacza, że dany router nie odpowiedział. Np.:
# traceroute -n [-p port] 213.180.130.200
> tracert host

Na skróty
Kontakt