Internet Control Message Protocol (ICMP)

Transkrypt

Internet Control Message Protocol (ICMP)
Internet Control
Message Protocol
(ICMP)
Łukasz Trzciałkowski
Czym jest ICMP ?
• Protokół ICMP jest protokołem działającym w
warstwie sieciowej i stanowi integralną część
protokołu internetowego IP, a raczej jest z nim
ściśle związany.
• ICMP jest opakowywany w datagram protokołu IP,
choć został zaprojektowany jako odrębny
protokół.
• Zadaniem ICMP jest sygnalizowanie zaistniałych
błędów podczas dostarczania datagramów IP w
komunikacji host-to-host.
• ICMP został zdefiniowany w RFC-792 (IPv4)
Łukasz Trzciałkowski
2
Kiedy wysyłany jest komunikat ICMP ?
• Komunikaty protokołu ICMP są zwykle przesyłane
automatycznie w następujących sytuacjach:
– Datagram IP nie dociera do miejsca docelowego.
– Nie można przesyłać dalej datagramów za pomocą
routera IP (bramy) przy bieżącej szybkości transmisji.
– Router IP przekierowuje hosta wysyłającego dane na
lepszą trasę wiodącą do miejsca docelowego.
Łukasz Trzciałkowski
3
Budowa komunikatu ICMP
• Nagłówki ICMP nie mają jednolitej struktury, ich
zawartość zależy od dwu 8-bitowych pól:
– typ komunikatu
– kod komunikatu danego typu
• Na podstawie pierwszych 8-bajtów pakietu
obliczana jest jeszcze 16-bitowa suma kontrolna.
0
8
TYP
16
KOD
32
SUMA KONTROLNA
Dane…
Łukasz Trzciałkowski
4
Typy komunikatów ICMP (typ)
• PYTANIE / ODPOWIEDŹ
•
•
•
•
•
Echo request/reply (8/0)
Timestamp request/reply (13/14)
Information request/reply (15/16)
Address mask request/reply (17/18)
Router solicitation/advertisement (10/9)
• BŁĘDY
•
•
•
•
•
Łukasz Trzciałkowski
Destination Unreachable (3)
Time exceeded (11)
Parameter problem (12)
Source Quench (4)
Redirect (5)
5
ZAPYTANIA I ODPOWIEDZI –
komunikaty zapytań i odpowiedzi
Echo request/reply
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Identifier
|
Sequence Number
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Data ...
+-+-+-+-+-
•
•
•
•
Type – typ komunikatu = 8 lub 0
Code – podtyp komunikatu, uszczegółowienie typu = 0
Checksum – suma kontrolna nagłówka
Identifier – identyfikator, służy do odróżniania pakietów
ICMP wysyłanych do różnych hostów
• Sequence number – numer sekwencyjny służy do odróżniania
pakietów ICMP wysyłanych do tego samego hosta
• Data – dane w zależności od typu komunikatu
Łukasz Trzciałkowski
7
Echo request/reply
• Echo służy do stwierdzania czy dany host jest
podłączony do sieci lub czy jest właczony.
• Komunikat musi wrócić jedynie ze zmienionym
typem na 0.
• Treść komunikatu nie może ulec zmianie.
• Identyfikator może być użyty jako port TCP lub
UDP w celu identyfikacji sesji.
• Numer Sekwencyjny może być zwiększony o jeden
przy każdorazowym zapytaniu hosta o ECHO.
Łukasz Trzciałkowski
8
Timestamp request/reply
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Identifier
|
Sequence Number
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Originate Timestamp
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Receive Timestamp
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Transmit Timestamp
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Komunikat używany do sprawdzania sprawności
sieci oraz badania czasu przetwarzania pakietów
oraz opóźnień w ich przesyłaniu
Łukasz Trzciałkowski
9
Timestamp request/reply
•
•
•
•
Type – typ komunikatu = 13 lub 14
Code – podtyp komunikatu, uszczegółowienie typu = 0
Checksum – suma kontrolna nagłówka
Identifier – identyfikator, służy do odróżniania pakietów
ICMP wysyłanych do różnych hostów
• Sequence number – numer sekwencyjny służy do odróżniania
pakietów ICMP wysyłanych do tego samego hosta.
• Originate Timestamp – czas wysłania komunikatu przez
nadawcę
• Receive Timestamp – czas odebrania komunikatu przez
odbiorcę
• Transmit Timestamp – czas odesłania komunikatu nadawcy
Łukasz Trzciałkowski
10
Information request/reply
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Identifier
|
Sequence Number
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Typ = 15 lub 16
Kod = 0
• Komunikat służył stacjom bezdyskowym do
otrzymywania informacji o własnym adresie IP.
• Mechanizm ten jest przestarzały i nie używany.
• Lepszym rozwiązaniem jest RARP, BOOTP, DHCP.
Łukasz Trzciałkowski
11
Address Mask request/reply
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Identifier
|
Sequence Number
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Address Mask
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Typ = 17 lub 18
Kod = 0
• Komunikat służy stacjom bezdyskowym do
otrzymania maski podsieci.
• Tak jak i w poprzednim przypadku lepszym
rozwiązaniem są BOOTP i DHCP.
Łukasz Trzciałkowski
12
Router Solicitation/ Advertisment
• Typ = 10 lub 9
Kod = 0
• Komunikat Router Solicitation jest używany przy
starcie komputera w celu znalezienia bramy.
• Routery co pewien czas ogłaszają się
komunikatami Router Advertisment (broadcast)
w celu powiadomienia innych o swoim istnieniu w
odstepach 5-10 minutowych.
• Ogłoszenie ma ważność 30 i powinno być
odnawiane.
Łukasz Trzciałkowski
13
BŁĘDY – komunikaty błędów
Destination Unreachable
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
unused
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Internet Header + 64 bits of Original Data Datagram
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Unused – ignorowana i nie używana część komunikatu
• Internet Header + 64 bits ... - nagłówk IP pakietu na który
odsyłamy błąd oraz pierwsze 64 bity nagłówka wyższego
protokołu, jeśli protokół wyższej warstwy używa portów,
zakładamy, że numery portów będą ujęte w tych danych.
Dane te służą do określenia procesu któremu należy
przekazać błąd.
• Typ = 3
Kod = 1…15
Łukasz Trzciałkowski
15
Destination Unreachable (KODY)
•
•
•
•
•
0 - net unreachable (sieć nieosiągalna)
1 - host unreachable (host nieosiągalny)
2 - protocol unreachable (protokół nieosiągalny)
3 - port unreachable (port nieosiągalny)
4 - fragmentation needed and DF set (w
odpowiedzi na pofragmentowany pakiet z
ustawioną flagą don't fragment, sytuacja taka
może się zdażyć jeśli pakiet trafi na sieć z
mniejszym MTU, wtedy połowa pola unused
zawiera MTU)
• 5 - source route failed (problem z rutingiem w
routerze)
Łukasz Trzciałkowski
16
Destination Unreachable (KODY)
• 6 – destination network unknown (nieużywany, zamieniony
na kod 0)
• 7 – destination host unknown
• 8 – source host isolated (odpowiedź na pakiety których
router nie ma forwardować)
• 9 – communication with destination network is
administratively prohibited
• 10 - communication with destination host is
administratively prohibited
• 11 – network unreachable for type of service
• 12 - host unreachable for type of service
• 13 – communication administratively prohibited
• 14 – host precedence violation
• 15 – precedence cutoff in effect
Łukasz Trzciałkowski
17
Time Exceeded
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
unused
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Internet Header + 64 bits of Original Data Datagram
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Unused – ignorowana i nie używana część komunikatu
• Internet Header + 64 bits ... - nagłówk IP pakietu na który
odsyłamy błąd oraz pierwsze 64 bity nagłówka wyższego
protokołu, jeśli protokół wyższej warstwy używa portów,
zakładamy, że numery portów będą ujęte w tych danych.
Dane te służą do określenia procesu któremu należy
przekazać błąd.
• Typ = 11
Kod = 0 lub 1
Łukasz Trzciałkowski
18
Time Exceeded (KODY)
• 0 - time to live exceeded in transit - komunikat
zwracany w sytuacji gdy pole TTL w datagramie
osiągnie wartość 0 (pakiet ginie)
• 1 - fragment reassembly time exceeded komunikat zwracany, gdy adresat nie jest w
stanie złożyć ponownie pofragmentowanego
pakietu (brak jakiejś części), nie jest wysyłany gdy
brakuje części pierwszej (numer 0)
Łukasz Trzciałkowski
19
Parameter Problem Message
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Pointer
|
unused
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Internet Header + 64 bits of Original Data Datagram
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Pointer – identyfikuje oktet którego dotyczy błąd
• Jeśli wystąpił problem z nagłówkiem datagramu, który
uniemożliwi poprawne przetworzenie go. Następuje
odrzucenie datagramu i poinformowanie o tym host
źródłowy.
• Typ = 12
Kod = 0
Łukasz Trzciałkowski
20
Source Quench
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
unused
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Internet Header + 64 bits of Original Data Datagram
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Komunikaty (tłumienia źródła) służą do
zarządzania pasmem. Router generuje Source
Quench gdy bufor kolejki jest przepełniony lub dany
host za szybko przysyła pakiety. W takim
przypadku serwer odrzuca nadmiar pakietów i
informuje hosta aby zwolnił.
• Typ = 4
Kod = 0
Łukasz Trzciałkowski
21
Redirect
Łukasz Trzciałkowski
22
Redirect – opis do diagramu
• Brama wysyła wiadomość przekierowującą
(redirect) w następujących sytuacjach: Brama G1
otrzymuje datagram od hosta znajdującego się w
tej samej sieci i sprawdza tablicę routingu w celu
odnalezienia następnej bramy.
• Jeśli host i brama G2 są w tej samej sieci, wtedy
brama G1 wysyła REDIRECT do hosta aby udał się
do bramy G2 jako najkrótszej drogi do celu.
Łukasz Trzciałkowski
23
Redirect
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Type
|
Code
|
Checksum
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Gateway Internet Address
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
Internet Header + 64 bits of Original Data Datagram
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• TYP: 5
• KODY:
•
•
•
•
0
1
2
3
=
=
=
=
Redirect
Redirect
Redirect
Redirect
datagrams
datagrams
datagrams
datagrams
for
for
for
for
the
the
the
the
Network.
Host.
Type of Service and Network.
Type of Service and Host.
Łukasz Trzciałkowski
24
Kiedy ICMP nie zasygnalizuje ?
•
•
•
•
•
Błąd dotyczy ICMP
Błąd jest w pakiecie wysyłanym na broadcast
Adresatem nie jest pojedynczy host
Adres jest zerowy lub loopback
Błąd w ramce wysyłanej na ethernetowy adres
rozgłoszeniowy
Łukasz Trzciałkowski
25
Uwagi
• Zasypania lokalnej sieci (lokalnego hosta) dużą
ilością komunikatów ICMP – nie powinno mieć
miejsca
• Uniemożliwić komputerom spoza sieci lokalnej aby
mogły sprawdzać czy lokalne hosty są osiągalne
(ping)
• Ogólnie: Należy stosować filtrowanie ICMP
•
•
•
•
•
•
Icmp_echo_ignore_all
Icmp_echo_ignore_broadcast
Icmp_ratelimit
Icmp_ignore_bogus_error_responses
Accept_redirect
Ping -R / hping / traceroute
Łukasz Trzciałkowski
26

Podobne dokumenty