Rodzaj wysyłanego pakietu różni się w zależności od implementacji. Domyślnie Windows tracert
używa ICMP, a zarówno Mac OS X, jak i Linux traceroute
uż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 -I
wyśle ICMP typu 8 (żądanie echa). Wikipedia twierdzi, że Windows tracert
uż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 RST
pakiet, albo SYN ACK
pakiet w odpowiedzi, gdy dotrą do miejsca docelowego. Jeśli otrzymasz SYN ACK
pakiet, uprzejmie jest kontynuować RST
przesył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.