Czy traceroute używa UDP lub ICMP, czy obu?

24

Kiedy wykonuję śledzenie w domenie www.google.com z mojego laptopa, czy używam icmp lub udp?
Myślałem, że to icmp typ 11, ale szukając czegoś innego natknąłem się na reguły, w których zastosowano icmp typ 30 i zobaczyłem reguły, w których użyto udp.
Czy ktoś może mi wyjaśnić, jak to działa?
Pracuję na zaporze ogniowej (iptables) dla wirtualnego serwera dedykowanego.

Kris
źródło

Odpowiedzi:

26

Rodzaj wysyłanego pakietu różni się w zależności od implementacji. Domyślnie Windows tracertużywa ICMP, a zarówno Mac OS X, jak i Linux tracerouteużywają UDP. Nie mam pod ręką maszyn BSD, Solaris ani żadnego innego systemu operacyjnego, ale strona podręcznika dla wersji Mac OS X wspomina, że ​​pochodzi z BSD 4.3.

Wersje Mac i Linux Mam możliwość wyboru różnych protokołów, w tym pakietów ICMP, TCP, UDP i GRE. Inne protokoły można określić na podstawie ich nazwy lub numeru, ale traceroute nie wie nic o działaniu innych protokołów. Po prostu ślepo je wysyła.

Mogą także zmienić ładunek oraz porty źródłowy i docelowy, aby uniknąć zapór ogniowych lub dowiedzieć się, który router na ścieżce upuszcza pakiety o określonym rozmiarze.

Wszystkie wersje traceroute opierają się na odpowiedziach ICMP typu 11 (Przekroczono czas) z każdego przeskoku na trasie. Jeśli zapora sieciowa blokuje odpowiedzi ICMP typu 11, traceroute nie będzie działać. Te pakiety są przychodzące, a nie wychodzące.

ICMP typ 30 jest specjalnie wyznaczony dla traceroute i jest oznaczony jako „Żądanie informacji”. Nie byłem w stanie znaleźć nigdzie, gdzie jest to faktycznie używane. Strona podręcznika dla wersji Mac OS X i Linux mówi, że -Iwyśle ICMP typu 8 (żądanie echa). Wikipedia twierdzi, że Windows tracertużywa również żądań echa ICMP. ICMP typu 30 lub typu 8 to pakiety wychodzące, a nie przychodzące.

ICMP typu 0 (odpowiedź echa) może wrócić jako ostatni pakiet, gdy TTL dokładnie równa się liczbie przeskoków. Traceroute będzie wiedział, że zakończyło się, gdy otrzyma jeden z nich. To jest pakiet przychodzący.

Pakiety TCP SYN spowodują albo RSTpakiet, albo SYN ACKpakiet w odpowiedzi, gdy dotrą do miejsca docelowego. Jeśli otrzymasz SYN ACKpakiet, uprzejmie jest kontynuować RSTprzesyłanie pakietu, aby nie pozostawić półotwartego połączenia na serwerze.

Możliwe jest uzyskanie odpowiedzi kodu 4 typu ICMP z powrotem zamiast odpowiedzi ICMP typu 11, jeśli wyślesz duży pakiet z ustawioną flagą „Nie fragmentuj”, ale prawdopodobnie pozwoli to na znalezienie przeskoku przy najmniejszej MTU . Zazwyczaj taką odpowiedź otrzymujesz tylko z jednego przeskoku na trasie. Nie wszyscy z nich.

Ladadadada
źródło
8

Tradycyjny traceroute używa protokołu UDP do zwiększania portów dla każdego skoku.

Aby go zaimplementować, możesz użyć dowolnego pakietu - ICMP, TCP SYN itp. Wystarczy, że pakiet IP wygasa i jesteś złoty.

Różne implementacje, takie jak MacOS, oferują obsługę wielu typów traceroute, a także tryby, które nie zwiększają portów itp. W celu ominięcia ograniczeń zapory.

Daniel Pittman
źródło
7
Domyślny port UDP w implementacji uniksowej to od 33434 do 33534. Implementacje ICMP używają „żądania echa” (typ 8).
Ouki