Cała prawda o protokole ICMP

0

Wokół protokołu ICMP (Internet Control Message Protocol) narosło wiele nieporozumień, dlatego administratorzy sieci powinni poznać, czym naprawdę jest ten protokół i do czego służy. Jest to szczególnie istotne w przypadku podejmowania decyzji dotyczących reguł filtrowania ruchu sieciowego. Poza tym dobra znajomość tego protokołu może pomóc w rozwiązywaniu problemów z routingiem.

Protokół IP nie gwarantuje niezawodnej transmisji danych, ale jest niezwykle ważne, żeby w przypadku wystąpienia problemów, nadawca otrzymał jakieś powiadomienie. To właśnie ICMP (Internet Control Message Protocol, Protokół Komunikatów Kontrolnych Internetu) jest mechanizmem używanym do przesyłania informacji zwrotnych o problemach z siecią, które uniemożliwiają dostarczenie pakietów do odbiorcy. Protokoły wyższych warstw, jak TCP, są w stanie rozpoznać, że pakiet nie dotarł do celu, ale ICMP udostępnia sposoby wykrywania bardziej poważnych problemów, jak wyczerpanie się wartości TTL (TTL exceed).

Sporadyczne problemy, jak błędne sumy kontrolne IP, nie są zgłaszane przez ICMP. Założono bowiem, że TCP i inne protokoły odpowiedzialne za niezawodność transmisji poradzą sobie z obsługą uszkodzonych pakietów, natomiast w przypadku użycia protokołu UDP, który nie gwarantuje niezawodności połączenia, utrata niewielkich ilości danych nie stanowi problemu.

Natomiast problemy z siecią są zgłaszane natychmiast. Przykładowo, jeśli wartość TTL osiągnie zero, prawdopodobną przyczyną problemu będzie pętla w routingu uniemożliwiająca pakietom dotarcie do celu. System końcowy musi wiedzieć o występowaniu tego rodzaju problemów. Protokół ICMP jest wykorzystywany do przesyłania różnych komunikatów informujących o stanie sieci, a nie, jak niektórzy sądzą, tylko do pingowania. Żądanie echo jest tylko jedną z wielu wiadomości. Można odfiltrować próby pingowania, ale większość wiadomość ICMP jest konieczna do poprawnego działania TCP/IP i innych protokołów. Dlatego nie można dać sobie wmówić, że ICMP to zagrożenie i należy całkowicie go zablokować.

ICMP powstał, aby umożliwić routerom informowanie o błędach oraz udostępnianie informacji o niespodziewanych sytuacjach. Jednak każda maszyna, nie tylko router, może wysyłać komunikaty ICMP do dowolnego innego urządzenia podłączonego do sieci.

ICMP informuje o występujących problemach, ale nie dla każdego możliwego błędu wyszczególnia środki zaradcze. Gdy pakiet spowoduje błąd, ICMP może jedynie powiadomić nadawcę o przyczynie. Nadawca musi tę informację przekazać danemu programowi użytkownika albo podjąć inne działanie mające na celu wyeliminowanie problemu.

Kiedy komunikaty ICMP nie są generowane?

Należy zauważyć, że jest kilka sytuacji, w których komunikat ICMP o błędzie nie zostanie przesłany. Przykładowo, komunikat ICMP nigdy nie zostanie wygenerowany jako odpowiedź na komunikat ICMP o błędzie. Gdyby komunikaty ICMP były wysyłane w odpowiedzi na inne komunikaty ICMP, wkrótce powieliłyby się szybko i zalały sieć. Poza tym komunikaty ICMP nigdy nie zostaną wysłane w odpowiedzi na pakiety rozgłoszeniowe czy multicast, żeby uniknąć tego samego problemu, co w pierwszym przypadku.

Trasy pakietów przenoszących komunikaty ICMP są wyznaczane tak samo, jak pakietów przenoszących zwykłą komunikację i nie mają żadnych dodatkowych priorytetów czy zabezpieczeń. W efekcie same komunikaty ICMP o błędach mogą zostać zagubione albo zniszczone. Co więcej, w przeciążonej sieci komunikat o błędzie może spowodować dodatkowe przeciążenie. Dlatego procedury obsługi błędów nie tworzą komunikatu o błędach, gdy błąd został spowodowany przez pakiet IP niosący komunikat ICMP.

Komunikaty i kody ICMP
ICMP jest skomplikowanym protokołem. Każdy komunikat ICMP, określany jako „major type,” ma dodatkowo własne kody, tzw. „minor codes”. ICMP działa w warstwie trzeciej (warstwie sieci), więc może być routowany przez Internet. Pakiet ICMP to w rzeczywistości pakiet IP przenoszący w części danych komunikaty ICMP. Z kolei każdy komunikat ICMP zawiera cały nagłówek IP z oryginalnej wiadomości, żeby system końcowy wiedział, który pakiet nie został dostarczony. Poza tym komunikat ICMP będzie zawierać również pierwsze osiem bajtów danych z oryginalnej wiadomości oraz nagłówek TCP lub UDP.

Komunikaty ICMP podróżują w części pakietów IP przeznaczonych na dane. Jednak ich odbiorcą nie jest ani program użytkowy, ani użytkownik, ale oprogramowanie IP na danej maszynie. Przychodzący komunikat błędu ICMP jest obsługiwany przez oprogramowanie ICMP. Gdy ICMP zorientuje się, że problem spowodował protokół wyższego rzędu lub program użytkowy, przekaże informacje dalej, do odpowiedniego modułu.

Każdy komunikat ICMP ma własny format, ale wszystkie zaczynają się trzema takimi samymi, ośmiobitowymi polami. Poprzedzają je informacje protokołu ICMP oraz nagłówek oryginalnej wiadomości IP. Pierwsze osiem bajtów zawiera informacje o typie wiadomości ICMP (major type), następne osiem przenosi kod (minor code), a ostatnie trzy bajty to suma kontrolna komunikatu ICMP.

Najbardziej użytecznym komunikatem ICMP jest Destination Unreachable (major type 3). Komunikaty o błędach są najczęściej generowane przez routery i przesyłane do źródła pochodzenia problemowego pakietu. Większość komunikatów jest przekazywana do aplikacji, która wysłała dany pakiet. W tym kontekście protokół TCP intensywnie wykorzystuje ICMP.

Najczęściej używane typy komunikatów ICMP w protokole IPv4:

  • Echo Reply (typ 0) oraz Echo Request (typ 8) – czyli wszystkim dobrze znany ping;
  • Destination Unreachable (3);
  • Source Quench (4) – komunikat ICMP używany do powiadomienia nadawcy, że router lub host jest przeciążony i nadawca musi zmniejszyć tempo nadawania;.
  • Redirect (5) – komunikat używany do wskazania hostowi, którego routera powinien używać (jeśli host ma dostęp do więcej niż jednego routera);
  • Router Advertisement Reply (9) oraz Router Solicitation (10);
  • Time Exceeded (11) – ten komunikat ma dwa zastosowania: po pierwsze służy do przesyłania komunikatów o wyczerpaniu się wartości TTL, a po drugie informuje nadawcę, że pofragmentowany pakiet IP nie został złożony w zadanym limicie czasu.

Ponadto każdy typ wiadomości ma własne kody. Przykładowo, typ 3, Destination Unreachable, ma aż 15 kodów.

Zastosowania

Komunikaty ICMP, z wyjątkiem pary Echo Request i Echo Reply, mają bardzo ograniczone zastosowanie, gdyż ich funkcje przejęły wyspecjalizowane protokoły: BOOTP i DHCP obsługują konfigurację maszyn bezdyskowych, a NTP jest najbardziej popularnym protokołem synchronizacji czasu. Jest jednak jedno bardzo ważne zastosowanie protokołu ICMP związane z komunikatem typu 3.

Wykrywanie PMTU (Path MTU discovery) to mechanizm, którego protokoły używają do wykrycia, jaki jest największy rozmiar pakietu (MTU) obsługiwany przez daną ścieżkę i pozwalający na transmisję bez fragmentacji pakietów. Proces wykrywania MTU rozpoczyna się od wysłania przez nadawcę pakietu o wielkości MTU jego lokalnego interfejsu i z flagą DF (Don’t Fragment) umieszczoną w nagłówku IP. Taki pakiet dotrze do odbiorcy bez fragmentacji albo nadawca otrzyma komunikat ICMP typ 3 z kodem błędu „Fragmentation Required but the DF Flag is Set.” Jeśli wystąpi ta druga sytuacja, nadawca będzie wiedział, że musi zmniejszyć wartość MTU. Jeśli nie otrzyma komunikatu o błędzie, będzie wiedział, że może nadawać z wielkością MTU swojego lokalnego interfejsu.

Podstawowy problem z wykorzystaniem wykrywania PMTU polega na tym, że administratorzy regularnie blokują ICMP, co uniemożliwia dotarcie komunikatu o błędzie do nadawcy. Wyobraź sobie sytuację, żeby chcesz otworzyć stronę internetową, ale w przeglądarce pojawi się tylko puste okno. Użytkownicy połączeń VPN doświadczają tego efektu częściej, ponieważ w ich przypadku wartość MTU jest nieco niższa niż normalnie ze względu na nagłówek enkapsulacji VPN. Gdy serwer WWW wysyła użytkownikowi żądaną stronę WWW, ostatni z routerów na ścieżce musi dokonać fragmentacji pakietów, jeśli te okażą się zbyt duże. Jeśli ustawiona jest flaga DF, jedyne, co router będzie mógł zrobić, to poinformować nadawcę o konieczności wysyłania mniejszych pakietów. Jednak nadawca blokuje pakiety ICMP, ponieważ ma takie reguły filtrowania. W efekcie strona WWW nigdy się nie otworzy.

Na szczęście jest też dobra wiadomość – większość implementacji TCP jest bardziej “inteligentna”. Jeśli nadawca nigdy nie dostanie pakietu ACK przy próbie zainicjowania komunikacji, rozpocznie retransmisję z mniejszą wartością MTU, choć nie we wszystkich systemach operacyjnych tak to działa.

Jak działa ping?

Program ping wykorzystuje komunikaty Echo Request i Echo Reply. Służą one do określania, czy dany host w sieci jest włączony. Na zapytanie ICMP host powinien odpowiedzieć identycznym pakietem z zamienionym typem na 0. Ilość danych oraz same dane są zależne od implementacji. System operacyjny musi mieć zaimplementowane odpowiadanie na zapytania Echo.

Podsumowanie
Całkowite blokowanie ICMP ma negatywne wpływ na działanie sieci, ponieważ zakłóci nie tylko działanie poleceń ping, ale również wielu protokołów. Protokół ICMP jest traktowany jako obowiązkowy element protokołu IP i musi być uwzględniony w każdej implementacji IP. Dlatego zaleca się selektywne blokowanie ICMP, np. komunikatów Source Quench (typ 4).

BRAK KOMENTARZY

ZOSTAW ODPOWIEDŹ