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 |
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