Ping test

Co to jest ICMP

ICMP (ang. Internet Control Message Protocol) jest jednym z protokołów warstwy sieciowej w modelu ISO/OSI. Jego zadaniem jest obsługa funkcji kontroli poprawności działania sieci, za jego pomocą przesyłane są wszelkiego rodzaju niskopoziomowe komunikaty o wykrytych nieprawidłowościach podczas połączeń sieciowych. Praktycznie cała komunikacja pomiędzy dlanymi komputerami lub innymi urządzeniami przy użyciu protokołu ICMP odbywa się w sposób niewidoczny dla użytkownika końcowego, jedynymi wyjątkami są tutaj narzędzia ping i traceroute.

Komunikacja z wykorzystaniem protokołu ICMP polega na przesyłaniu odpowiednich informacji o błędach wykrytych podczas połączenia pomiędzy dwoma urządzeniami. Pojedyncza informacja ma postać odpowiednio sformowanego pakietu (ang. Datagram), który następnie zostanie poddany enkapsulacji w ramce protokołu IP. Protokół ICMP wbrew powszechnemu mniemaniu nie wykorzystuje do swej pracy protokołów TCP, ani UDP, nie korzysta więc z żadnych portów sieciowych.

Budowa pakietu ICMP jest następująca:

  • Nagłówek o długości 4 bajtów – pierwszy bajt określa typ pakietu, drugi kod operacji, trzeci i czwarty stanowią sumę kontrolną.
  • Pole danych o długości zależnej od typu pakietu i jego funkcji, w niektórych przypadkach może być ustalane z poziomu narzędzia – np. domyślnie polecenie ping w Windows ustala rozmiar danych pakietu ECHO_REQUEST na 32 bajty, a wersja spotykana w systemach unixowych na 56 bajtów.

Wykaz niektórych typów komunikatów protokołu ICMP:

Typ  Znaczenie
0  Echo Reply (zwrot echa – "odpowiedź na ping")
1 - 2  Zarezerwowane
3  Destination Unreachable (nieosiągalność miejsca przeznaczenia)
4  Source Quench (tłumienie nadawcy)
5  Redirect Message (zmień trasowanie)
6  Alternate Host Address (alternatywny adres hosta)
7  Zarezerwowane
8  Echo Request (żądanie echa)
9  Router Advertisement (ogłoszenie routera)
10  Router Solicitation (wybór routera)
11  Time Exceeded (przekroczenie limitu czasu)
12  Parameter Problem (Problem z parametrem)
13  Timestamp (żądanie sygnatury czasowej)
14  Timestamp Reply (zwrot sygnatury czasowej)
15  Information Request (żądanie informacji)
16  Information Reply (zwrot informacji)
17  Address Mask Request (żądanie maski adresowej)
18  Address Mask Reply (zwrot maski adresowej)
19  Zarezerwowane dla bezpieczeństwa
20-29  Zarezerwowane
30  Traceroute (śledzenie trasy)
31  Datagram Conversion Error (błąd konwersji datagramu)
32  Mobile Host Redirect (zmiana adresu ruchomego węzła)
33  IPv6 Where-Are-You (Pytanie IPv6 "gdzie jesteś")
34  IPv6 Here-I-Am (Odpowiedź IPv6 "tu jestem")
35  Mobile Registration Request (prośba o rejestrację węzła ruchomego)
36  Mobile Registration Reply (odpowiedź na prośbę o rejestrację węzła ruchomego
37  Domain Name Request (żądanie nazwy domeny)
38  Domain Name Reply (zwrot nazwy domeny)
39  SKIP Algorithm Discovery Protocol
40  Photuris, Security failures
41-255  Zarezerwowane

Pole kodu operacji w nagłówku pakietu ICMP określa rodzaj treści zawartej w komunikacie, uzależnionej od jego typu. Dla przykładu pakiet typu 3, czyli Destination Unreachable może zawierać następujące kody operacji w drugim bajcie nagłówka:

0  Sieć docelowa jest nieosiągalna
1  Urządzenie (host) docelowe jest nieosiągalne
2  Protokół docelowy jest nieosiągalny (lub nieobsługiwany)
3  Port docelowy jest nieosiągalny
4  Pakiet musi zostać poddany fragmentacji, a ustawiono flagę DF („nie fragmentuj”)
5  Trasa routowania nieprawidłowa
6  Nieznana sieć docelowa
7  Urządzenie (host) docelowe nieznane
8  Niedostępny host nadawcy
9  Dostęp do sieci zabroniony
10  Dostęp do urządzenia (hosta) zabroniony
11  Ustawienia pola Type of Service (w nagłówku IP) uniemożliwiają dostęp do sieci docelowej
12  Ustawienia pola Type of Service (w nagłówku IP) uniemożliwiają dostęp do sieci docelowej
13  Komunikacja zabroniona

Przykłady działania protokołu ICMP:

  • Ping  - jedno z narzędzi występujących w praktycznie każdym systemie operacyjnym obsługującym protokół TCP/IP. Za jego pomocą wysyłane są do komputera docelowego pakiety ICMP ECHO_REQUEST, zdalna maszyna po odebraniu takiego komunikatu powinna odpowiedzieć za pomocą ECHO_REPLY. Na tej podstawie można określić, czy konfiguracja sieci umożliwia połączenie się z ze zdalną maszyną oraz oszacować jej obciążenie na podstawie informacji dotyczących liczby zagubionych pakietów oraz czasu odpowiedzi.
  • Traceroute – narzędzie umożliwiające określenie, przez jakie routery przechodzi pakiet na drodze do zdalnego komputera. Na początku komputer lokalny wysyła pakiet ECHO_REQUEST do urządzenia zdalnego, z parametrem TTL (Time to Live) ustawionym na 1. Pierwszy router zmniejsza TTL o jeden, czyli do zera, usuwa pakiet i odsyła do adresata komunikat ICMP TIME_EXCEEDED. Komputer docelowy po odebraniu takiej informacji ponawia wysyłkę ECHO_REQUEST, ale z TTL ustawionym na wartość 2. Pierwszy z routerów zmniejsza TTL na 1, drugi zrobi to samo ustawiając 0, więc ponownie usunie pakiet i odeśle komunikat TIME_EXCEEDED. Ta sytuacja powtarza się tak długo, aż pakiet dotrze do komputera zdalnego, który wtedy odeśle do nadawcy komunikat ECHO_REPLY.