Pozwól, że spróbuję odpowiedzieć na to pytanie, ponieważ jest to trochę bardziej skomplikowane, że może początkowo wyglądać.
Wygląda na to, że znasz już podstawowe działanie, traceroute
ale przede wszystkim tutaj jest bardzo małe podsumowanie:
traceroute
próbuje określić wszystkie pośrednie kroki od hosta do hosta docelowego lub po prostu odległość, tj. liczbę przeskoków, od hosta do hosta docelowego. Aby to zrobić, zaczyna wysyłać pakiety do hosta docelowego z „losowym” numerem portu docelowego i wartością TTL, która zaczyna się od 1 i stale rośnie.
Chodzi o to, że każdy router pomiędzy obniża TTL o 1. Zatem jeśli TTL osiągnie 0 (w rzeczywistości nigdy tak się nie dzieje, ponieważ router, który ma zamiar ją zmniejszyć do 0, powoduje błąd wcześniej), router zwróci ICMP „ Time-to-live przekroczony ” komunikat o błędzie, np pakiet numer 24 w pliku przechwytywania. To, co otrzymujesz, to fakt, że miejsce docelowe jest dalej i dlatego ciągle zwiększasz TTL.
Gdy pakiet ma czas TTL, który jest wystarczająco duży, aby dotrzeć do miejsca docelowego, pojawi się inny komunikat o błędzie ICMP: „ Miejsce docelowe nieosiągalne (nieosiągalny port) ”, np. Pakiet 208 w pliku przechwytywania. Z tego wynika, że ostatnio używany TTL jest rzeczywiście liczbą przeskoków między tobą a węzłem docelowym. Przyczyną tego błędu jest po prostu to, że wysyłasz wiadomość do „losowego” portu, którego węzeł docelowy (mam nadzieję) nie słucha.
Teraz przejdźmy do szczegółów pliku przechwytywania:
Ze strony podręcznika traceroute
możemy zobaczyć, że każdy TTL jest używany 3 razy (opcja „-q”), a domyślnym protokołem jest UDP (opcja „-P”). Analizując pierwsze 3 pakiety UDP, tj. Pakiety 8-9-10 , możemy rzeczywiście stwierdzić, że TTL wynosi 1 . Następne 3, tj. 11-12-13 , mają TTL 2 i tak dalej. Więc z perspektywy źródła wszystko wydaje się dobrze.
Następnie, po pewnym czasie zależnym od opóźnienia sieci, zaczynamy otrzymywać oczekiwane komunikaty o błędach. Widzimy zatem, że pakiety 24–25–26 to pakiety błędów „ Czas życia przekroczył ”, co oznacza, że miejsce docelowe jest dalej.
To powtarzanie prób i błędów trwa, aż w końcu pakiet 208 i dalej pojawiają się komunikaty o błędach „ Port Unreachable ”, co oznacza, że osiągnięto miejsce docelowe.
Licząc wysłane pakiety i odpowiedzi, możesz dowiedzieć się nawet ze śladu, który TTL faktycznie działał, ale jest to żmudne zadanie :)
Mam nadzieję, że to pomogło
Twój klient wysyła tylko pierwsze trzy pakiety z TTL równym 1. Następne trzy są wysyłane z TTL równym 2. Kolejne trzy są wysyłane z TTL równym 3. I tak dalej i tak dalej.
Łatwiejszym sposobem na to jest ustawienie pola TTL IP jako własnej kolumny w Wireshark. Po prostu kliknij prawym przyciskiem myszy wartość TTL w dowolnym pakiecie i wybierz „Zastosuj jako kolumnę”:
Stamtąd widać, że pakiety 8,9,10 mają TTL równy 1. A pakiety 11,12,13 mają TTL równy 2. I tak dalej i tak dalej.
Dzieje się tak, ponieważ tak działa Traceroute. Wykorzystuje to, co robi router, gdy zmniejsza TTL do 0. Zamiast kontynuować przesyłanie pakietu, wysyła z powrotem do oryginalnego klienta komunikat ICMP TTL wygasł w transporcie (patrz pakiet nr 24 w twoim przechwytywaniu) .
Zatem jako klient, gdy wysyłasz pierwszy zestaw pakietów z TTL równym 1, pierwszy router na ścieżce odpowiada komunikatem o wygasłym TTL. Następnie mierzysz, ile czasu upłynęło, zanim otrzymałeś wiadomość TTL Expired, kiedy wysłałeś początkowe wiadomości, i to daje ci pierwsze trzy wartości w danych wyjściowych Traceroute.
Następnie wysyłasz kolejny zestaw trzech pakietów o TTL równym 2. Pierwszy router na ścieżce zmniejsza to do 1, a następnie przekazuje go do następnego routera na ścieżce. Po otrzymaniu, gdy ten drugi router go otrzyma, zmniejsza TTL do 0, co powoduje, że upuszcza on pakiet i wysyła TTL Upłynął w drodze.
Proces ten trwa, dopóki klient nie otrzyma (dobrze, trzech) komunikatu o wygasłym TTL z każdego routera w drodze między tobą a ostatecznym miejscem docelowym, z którym uruchamiasz traceroute.
źródło