Czy istnieje równoważne narzędzie do ścieżki śledzenia systemu Linux dla systemu OS X?

6

Próbuję ustalić ścieżkę MTU z mojego komputera Mac do różnych witryn i nie mogę znaleźć wbudowanego narzędzia do osiągnięcia tego celu.

W systemie Linux użyłbym narzędzia takiego jak tracepath , ale zastanawiam się, czy istnieje jakiś odpowiednik dla systemu OS X.

reedog117
źródło

Odpowiedzi:

10

Możesz użyć standardu pingdostarczonego z Mac OSX, aby znaleźć pmtu.

ping -D -s <size> <host>powinienem załatwić sprawę. Uwaga: rozmiar jest tylko wielkością ładunku datagramu ICMP. Aby zobaczyć jednostkę MTU IP, musisz dodać 8 bajtów nagłówka ICMP i 20 bajtów nagłówka IP (tak na przykład, aby wysłać pakiet IP o długości 1500 bajtów, musisz podać rozmiar 1472). Uwaga, -Djest tutaj ważna, ponieważ ustawia flagę Dont-Fragment na.

Możesz także użyć ping -D -g <minsize> -G <maxsize> -h <sizeincr> <host>do uruchomienia operacji ping. To pingi hosta pakietami począwszy od minsizemaksymalnie maxsizew sizeincrodstępach. Ponownie, ta sama reguła dotyczy twoich rozmiarów - są one tylko dla ładunku ICMP (więc musisz dodać 28 bajtów do podanego tutaj rozmiaru dla pełnego rozmiaru MTU IP).

To, czego szukasz, to nieosiągalna wiadomość ICMP z podtypem „Konieczna fragmentacja, ale nie fragmentuj flagi”. Adres IP nadawcy powyższej wiadomości ICMP to host lub router, którego MTU jest ustawiony na wartość niższą niż rozmiar pakietu, w łączu, którego użyłby do przekazania dalej pakietu w kierunku miejsca docelowego.

Należy również pamiętać, że czasami (źle źle skonfigurowane) zapory ogniowe lub filtry ruchu blokują wszystkie wiadomości ICMP, w takim przypadku po prostu nie zobaczysz odpowiedzi. Aby sprawdzić, który host upuścił pakiet, możesz uruchomić polecenie traceroute do miejsca docelowego, a następnie wielokrotnie pingować każdy przeskok po drodze za pomocą „-D” oraz rozmiaru lub zakresu, aby odkryć lokalną MTU łącza, z którym przeskok jest połączony. Będzie to połączenie między ostatnim hostem, którego możesz pingować, a pierwszym hostem, którego nie możesz mieć, będzie miał mniejszy MTU.

Znowu - wszystko to zależy od routerów obsługujących ICMP, co może nie być możliwe.

Protokół PMTUD (Path MTU Discovery) działa w ten sam sposób. Używa pakietów TCP z włączoną flagą DF. Punkty końcowe sesji TCP zgadzają się na ich MSS (Maksymalny rozmiar segmentu, czyli MTU bez adresów IP i nagłówków TCP, 40B) - wybierają mniejszą z wartości MSS reklamowanych przez każdego hosta w uzgadnianiu TCP. Następnie wysyłają cały ruch z włączonymi flagami DF i czekają, aż ICMP będzie nieosiągalny lub TCP ACK. To drugie oznacza, że ​​PMTU jest wystarczające, drugie oznacza, że ​​muszą upuścić MSS.

Mam nadzieję, że to pomaga!

mikrofon
źródło
Zdecydowanie tego szukałem! Szkoda, że ​​wersja ping linuksa nie ma takich samych przełączników, ponieważ uważam, że jest to bardziej dokładne niż używanie tracepath na linuksie.
reedog117
tak naprawdę możesz zrobić to samo w Linuksie (z wyjątkiem zamiatania). Możesz użyć ping -M do -s <size> <host>- -Mflaga jest wskazówką dla PMTUD ( -M dooznacza, że ​​zabrania fragmentacji nawet lokalnie, -M wantoznacza wykrywanie MTU ścieżki uruchamiania, ale umożliwia fragmentację, gdy lokalnie, i -M dontoznacza, że ​​nie rób pmtud i zezwala na fragmentację).
Mike
4

traceroutejest dostępny na komputerze Mac. Traceroute to właściwie bardziej funkcjonalna wersja tracepath.

man traceroutepoda ci szczegóły, ale traceroute <host>robi to samo co tracepath <host>.

Tony Williams
źródło
Chciałbym znaleźć ścieżkę MTU dla połączenia, a nie opóźnienie ms spowodowane przez każdy przeskok. Nie rozumiem, jak tracepath i traceroute są tym samym.
reedog117
4
To nie to samo, a traceroute nie określa MTU. Ta odpowiedź jest błędna, zakładając, że. Użyjping -g 1444 -G 1508 -c 2 -h 1 -D example.com
l'L'l
Właściwie nie wydaje mi się, że traceroutemam komputer Mac (Mojave 10.14.3). Czy powinienem? FWIW jest tcptraceroutenapar.
PapaFreud
0

robi ping -DRo <hostname| IPAddr>tak prosty tracepath dla mnie

Stworzyłem również prosty skrypt powłoki o nazwie tracepath i wygląda następująco:

#!/bin/sh
#ping -D -g <minsize> -G <maxsize> -h <sizeincr>
echo "tracepath to $1 \n"
ping -DRo $1

Nie tak ładna jak prawdziwa ścieżka

Gość
źródło