PING(8)

NAZWA
ping - wysyła pakiety ICMP ECHO_REQUEST do stacji sieciowych

SKŁADNIA

ping [-aAbBdCDfhHLnOqrRUvV346] [-c liczba] [-e identyfikator] [-F etykieta-przepływu] [-i interwał] [-I interfejs] [-l liczba-pakietów] [-m znacznik] [-M opcja-pmtudisc] [-N opcja-nodeinfo] [-w limit] [-W czas-oczekiwania] [-p wzorzec] [-Q tos] [-s rozmiar-pakietu] [-S sndbuf] [-t ttl] [-T opcja-znacznika-czasu] [hop...] {cel}

OPIS

Program ping używa obowiązkowego datagramu protokołu ICMP o nazwie ECHO_REQUEST, wywołującego ICMP ECHO_RESPONSE od stacji lub bramy sieciowej. Datagramy ECHO_REQUEST („pingi”) składają się z nagłówka IP oraz ICMP, za którymi następuje struct timeval oraz określona liczba bajtów wypełnienia, używanych do wypełnienia pakietu.

ping działa z IPv4 oraz IPv6. Można wymusić używanie jednego z nich opcją -4 lub -6.

ping może wysyłać również Node Information Queries (RFC4620) IPv6. Niedozwolone mogą być przeskoki, ponieważ trasowanie źródeł IPv6 zostało oznaczone jako przestarzałe (RFC5095).

OPCJE

-3
    Precyzja RTT (bez zaokrąglania wynikowego czasu).

-4
    Używa wyłącznie IPv4.

-6
    Używa wyłącznie IPv6.

-a
    Ping dźwiękowy.

-A
    Ping adaptowalny. Interwały pomiędzy poszczególnymi pakietami dostosowują się do czasu krążenia w sieci, dzięki czemu w sieci nie pojawi się efektywnie więcej niż jeden pakiet, na który nie udzielono odpowiedzi (lub więcej, jeśli ustawiono liczbę-pakietów). Minimalny interwał wynosi 2 milisekundy; więcej informacji w opisie opcji -i. W przypadku sieci z niskim RTT jest to de facto odpowiednik szybkiego pingowania.

-b
    Pozwala na wysyłanie pingów na adresy rozgłoszeniowe.

-B
    Nie pozwala programowi ping zmieniać źródłowego adresu wysyłanych pakietów. Adres jest przypisywany do wyboru dokonanego przy starcie programu.

-c liczba
    Kończy po wysłaniu liczby pakietów ECHO_REQUEST. Z podanym limitem program ping czeka na liczbę pakietów ECHO_RESPONSE, aż do czasu upłynięcia limitu.

-C
    Wywołuje wywołanie systemowe connect() po utworzeniu gniazda.

-d
    Ustawia opcję SO_DEBUG na używanym gnieździe. Ta opcja gniazda nie jest używana przez jądro Linux.

-D
    Wypisuje znacznik czasowy (w czasie uniksa + mikrosekundy jak w gettimeofday) przed każdym wierszem.

-e identyfikator
    Ustawia pole identyfikacyjne ECHO_REQUEST. Wartość 0 wymusza użycie surowych gniazd (nieobsługiwane w gniazdach datagramowych ICMP). Wartość pola można wypisać przy użyciu opcji -v.

-f
    Tryb szybkiego pingowania („zalania” pakietami). Dla każdego wysłanego ECHO_REQUEST wypisywana jest kropka „.”, a dla każdego odebranego ECHO_REPLY jedna kropka jest kasowana. Daje to dynamiczny obraz zmian liczby opuszczonych pakietów. Jeśli nie podano interwału, jest on ustawiany na zero i pakiety są wysyłane tak szybko, jak powracają lub 100 razy na sekundę, w zależności od tego, która opcja produkuje więcej pakietów. Tylko użytkownik z uprawnieniami administratora może jej używać z zerowym interwałem.

-F etykieta-przepływu
    Tylko IPv6. Przypisuje i ustawia 20-bitową etykietę przepływu (szesnastkowo) w pakietach żądania odpowiedzi. Jeśli wartość wynosi zero, jądro przypisuje losową etykietę przepływu.

-h
    Wyświetla pomoc.

-H
    Wymusza translację nazw DNS dla wyjścia. Przydatne przy celach numerycznych lub z opcją -f, która domyślnie go nie przeprowadza. Może również pomóc obejść problemy z translacją DNS. Przesłania ustawioną wcześniej opcję -n.

-i interwał
    Czeka interwał sekund pomiędzy wysłaniem kolejnych pakietów. Dozwolona jest liczba rzeczywista, z kropką jako znakiem oddzielającym część dziesiętną (niezależnie od ustawień językowych). Domyślnie czeka się jedną sekundę lub - w trybie szybkiego pingowania - wcale. Jedynie użytkownik z uprawnieniami administratora może ustawić interwał mniejszy niż 0.2 ms. Ping grupowy (multicast) i rozgłoszeniowy (broadcast) ma jeszcze ściślejszy limit dla zwykłego użytkownika: 1 sekunda.

-I interfejs
    Interfejs może być adresem, nazwą interfejsu lub nazwą VRF (ang. Virtual Routing and Forwarding). Jeśli interfejs jest adresem, ustawia się w ten sposób adres źródłowy określonego adresu interfejsu. Jeśli interfejs jest nazwą interfejsu, ustawia interfejs źródłowy na podany interfejs. Jeśli interfejs jest nazwą VRF, każdy pakiet jest trasowany za pomocą odpowiadającej tabeli trasowania, w takim przypadku można podać opcję -I wielokrotnie, aby określić adres źródłowy. UWAGA: W przypadku IPv6, przy wykonywaniu pinga do adresu segmentowego (ang. link-local), można określić łącza (notacją „%” w celu lub tą opcją), lecz nie jest to już obecnie wymagane.

-L liczba-pakietów
    Jeśli podana jest liczba-pakietów, ping wysyła tyle pakietów, nie czekając na odpowiedź, po czym przechodzi do normalnego trybu działania. Tylko użytkownik z uprawnieniami administratora może wybrać więcej niż 3 pakiety.

-L
    Uniemożliwia powracanie zapętlonych pakietów grupowych (multicast). Opcja ta ma znaczenie jedynie gdy adresem docelowym jest adres grupowy.

-m znacznik
    Używa znacznika do oznaczenia wychodzących pakietów. Jest to przydatne w wielu przypadkach dotyczących jądra, takich jak używanie zasad trasowania do wybrania określonego przetwarzania danych wychodzących. Wymagany jest przywilej CAP_NET_ADMIN lub CAP_NET_RAW (od Linuksa 5.17), zob. socket(7).

-M opcja-pmtudisc
    Wybiera strategię Path MTU Discovery (badania MTU ścieżki). opcja-pmtudisc może być jedną z następujących: do (ustawia flagę flagę DF, ale jest przedmiotem sprawdzeń PMTU jądra, zbyt duże pakiety będą odmawiane), want (wykonuje badanie MTU ścieżki, następuje lokalna fragmentacja gdy rozmiary pakietów są znaczne) probe (ustawia flagę DF i pomija sprawdzenia PMTU, przydatne przy sondowaniu) lub dont (nie ustawia flagi DF).

-N opcja-nodeinfo
    Tylko IPv6. Wysyła IPv6 Node Information Queries (RFC4620), zamiast Echo Request. Wymagany jest przywilej (ang. capability) CAP_NET_RAW.

    help
        Pokazuje pomoc do obsługi NI.

    nazwa
        Zapytania nazw węzłów.

    ipv6
        Zapytania adresów IPv6. Istnieje kilka flag dotyczących wyłącznie IPv6.

        ipv6-global
            Żądania adresów globalnych IPv6.

        ipv6-sitelocal
            Żądania adresów lokalnych IPv6.

        ipv6-linklocal
            Żądania adresów segmentowych dla łącza IPv6.

        ipv6-all
            Żądanie adresów IPv6 na innych interfejsach.

    ipv4
        Żądanie adresów IPv4. Istnieje jedna flaga dotycząca wyłącznie IPv4.

        ipv4-all
            Żądanie adresów IPv4 na innych interfejsach.

    subject-ipv6=adres-ipv6
        Przedmiotowy adres IPv6.

    subject-ipv4=adres-ipv4
        Przedmiotowy adres IPv4.

    subject-name=nazwa-węzła
        Przedmiotowa nazwa. Jeśli zawiera więcej niż jedną kropkę, zakłada się że jest to pełna, jednoznaczna nazwa domenowa (FQDN).

    subject-fqdn=nazwa-węzła
        Przedmiotowa nazwa. Zawsze zakłada się że jest to pełna, jednoznaczna nazwa domenowa (FQDN).

-n
    Tylko wyjście numeryczne. Nie będą dokonywane próby odczytania nazw symbolicznych adresów stacji (brak odwrotnej translacji DNS). Jest to zachowanie domyślne dla celów numerycznych oraz z opcją -f. Przesłania zdefiniowaną wcześniej opcję -H. Zob. również zmienna środowiskowa IPUTILS_PING_PTR_LOOKUP.

-O
    Zgłasza bieżącą odpowiedź ICMP ECHO przed wysyłaniem następnego pakietu. Jest to przydatne razem ze znacznikiem czasu -D do zapisywania wyniku programu do pliku diagnostycznego w celu wyszukania brakujących odpowiedzi.

-p wzorzec
    Można podać do 16 bajtów „wypełnienia” wysyłanego pakietu. Jest to przydatne do diagnozowania w sieci problemów związanych z danymi. Np. -p ff spowoduje wysyłanie pakietu wypełnionego jedynkami.

-q
    Ciche wyjście. Poza wierszami podsumowania na starcie/końcu nic nie jest wyświetlane.

-Q tos
    Ustawia bity związane z funkcją Quality of Service (jakość usługi). tos może być liczbą dziesiętną (tylko ping) lub szesnastkową.

    W RFC2474, pola te są interpretowane jako ośmiobitowe Differentiated Service (DS), składające się z : bitów 0-1 (2 najniższe bity) oddzielnych danych i bity 2-7 (najwyższe 6 bitów) Differentiated Services Codepoint (DSCP). W RFC2481 i RFC3168 bity 0-1 są używane do ECN.

    Historycznie (RFC1349, zastąpione przez RFC2474) były one interpretowane jako: bit 0 (najniższy) - zarezerwowany (obecnie: kontrola ograniczenia przesyłu), 1-4 jako Type of Service (typ usługi), a bity 5-7 (najwyższe) jako Precedence (pierwszeństwo).

-r
    Pomija normalne tabele trasowania i wysyła pakiety bezpośrednio do stacji w przyłączonej sieci. Jeśli stacja nie jest w sieci podłączonej bezpośrednio, zwracany jest błąd. Opcja ta może być używana do pingowania stacji lokalnej poprzez interfejs, przez który nie ma trasy, o ile użyto również opcji -I.

-R
    Tylko program ping. Nagrywa trasę. Zawiera w pakiecie ECHO_REQUEST opcję RECORD_ROUTE i wyświetla bufor trasy zwróconych pakietów. Proszę zauważyć, że nagłówek IP wystarcza jedynie na 9 takich tras. Wiele stacji ignoruje lub zarzuca tę opcję.

-s rozmiar-pakietu
    Określa liczbę wysyłanych bajtów danych. Domyślną wartością jest 56, co tłumaczy się na 64 bajty ICMP po połączeniu z 8 bajtami nagłówka ICMP. Maksymalna dopuszczalna wartość to 65507 w przypadku IPv4 (65467 z opcją -R lub -T lub przy przeskokach) albo 65527 w przypadku IPv6, lecz większość systemów ogranicza ją do mniejszej wartości, zależnej od systemu.

-S sndbuf
    Ustawia sndbuf (bufor wysyłania) gniazda. Jeśli nie określono dokładniej, buforowany jest nie więcej niż jeden pakiet.

-t ttl
    Tylko ping. Ustawia TTL (IP Time to Live).

-T opcja-znacznika-czasu
    Ustawia specjalne opcje znacznika czasu IP. Opcja-znacznika-czasu może przyjąć jedną z następujących wartości: tsonly (tylko znaczniki czasu), tsandaddr (znaczniki czasu i adresy) lub tsprespec stacja1 [stacja2 [stacja3 [stacja4]]] (wstępnie określone przeskoki znacznika czasu).

-U
    Wypisuje pełne opóźnienie użytkownik-użytkownik (stare zachowanie). ping wypisuje zwykle czas podróży pakietu w sieci, który może się różnić np. ze względu na błędy DNS.

-v
    Wyjście szczegółowe. Nie wstrzymuje odpowiedzi DUP przy pingowaniu adresów grupowych (multicast).

-V
    Wyświetla informacje o wersji i kończy działanie.

-w limit
    Określa czas (w sekundach) po jakim ping zakończy pracę niezależnie od liczby wysłanych czy odebranych pakietów. W takim przypadku ping nie wychodzi po liczbie wysłanych pakietów - czeka albo na minięcie limitu albo na liczbę otrzymanych odpowiedzi lub też na jakiś sygnał o błędzie z sieci.

-W czas-oczekiwania
    Czas oczekiwania na odpowiedź, w sekundach. Opcja ta wpływa wyłącznie na czas oczekiwania w razie braku jakiejkolwiek odpowiedzi, w przeciwnym razie ping czeka na dwa RTT. Dozwolona jest liczba rzeczywista, z kropką jako znakiem oddzielającym część dziesiętną (niezależnie od ustawień językowych). 0 oznacza czas nieograniczony.

Przy używaniu pinga do izolowania błędów, należy go najpierw uruchomić na komputerze lokalnym, by sprawdzić czy lokalny interfejs sieciowy jest włączony i czy działa. Potem należy „pingować” coraz to dalsze stacje i bramki. Obliczane są czasy podróży i statystyki utraty pakietów. Jeśli odbierane są pakiety zduplikowane, nie są one włączane do obliczeń strat pakietów, choć ich czas podróży jest używany do obliczania minimalnego/średniego/maksymalnego czasu podróży.

Standardowe odchylenie populacji (mdev) to przeciętna wartość, o jaką każdy ping RTT różni się od średniego RTT. Im wyższe jest mdev, tym bardziej zmienne jest RTT (w czasie). Przy dużej zmienności RTT będą występować problemy szybkości przy dużych transferach (będą zajmowały więcej czasu, niż jest to ściśle potrzebne, jako że zmienność doprowadzi w końcu do konieczności oczekiwania przez wysyłającego na potwierdzenia) oraz jakość rozmów VoIP będzie przeciętna do miernej.

Po wysłaniu (i otrzymaniu) podanej liczby pakietów lub po przerwaniu programem SIGINT, wyświetlane jest zwięzłe podsumowanie. Można też pozyskać bieżące statystyki z krótszego okresu, bez przerywania procesu, sygnałem SIGQUIT.

Program ten jest przeznaczony do testowania sieci, pomiarów i zarządzania. Z powodu obciążenia, jakie może wywołać w sieci, niemądre jest używanie pinga podczas normalnych operacji z zautomatyzowanych skryptów.

ŚRODOWISKO

Zmienna środowiskowa IPUTILS_PING_PTR_LOOKUP ustawiona na 0 domyślnie wyłącza odwrotną translację DNS (wyszukiwanie PTR). Przesłoni ją opcja -H lub -n.

STATUS ZAKOŃCZENIA

Jeśli ping nie otrzyma w ogóle pakietów odpowiedzi zakończy się z kodem 1. Jeśli podano liczbę pakietów oraz limit i są one mniejsze niż liczba pakietów otrzymanych po osiągnięciu limitu kodem zakończenia również będzie 1. W przypadku innego błędu program wychodzi z kodem 2. W przeciwnym wypadku kończy się z kodem 0. W ten sposób można na podstawie kodu zakończenia sprawdzić czy stacja odpowiada, czy też nie.

CELE ADRESÓW SEGMENTOWYCH IPV6

Przy IPv6, gdy adresem docelowym jest adres segmentowy (ang. link-local) i ping używa gniazd datagramowych ICMP, konieczne jest podanie interfejsu wyjściowego. Gdy ping używa gniazd surowych, nie jest ściśle konieczne podanie interfejsu wyjściowego, ale powinno się to zrobić, aby uniknąć wieloznaczności, gdy występuje wiele możliwych interfejsów wyjściowych.

Istnieją dwa sposoby określenia interfejsu wyjściowego:

• używając notacji %
    Po adresie docelowym dołącza się % i nazwę interfejsu wyjściowego lub indeks interfejsu (ifindex), przykładowo:

    ping fe80::5054:ff:fe70:67bc%eth0

    ping fe80::5054:ff:fe70:67bc%2

• za pomocą opcji -I
    Stosując gniazda datagramowe ICMP, metoda ta jest obsługiwana od następujących wersji jądra: 5.17, 5.15.19, 5.10.96, 5.4.176, 4.19.228, 4.14.265. Nie jest jednak obsługiwana w bilbiotece libc musl.

SZCZEGÓŁY PAKIETU ICMP

Nagłówek IP bez opcji ma 20 bajtów. Pakiet ICMP ECHO_REQUEST zawiera dodatkowych 8 bajtów nagłówka ICMP, za którymi następuje określona ilość danych. Gdy podany jest rozmiar-pakietu, to określa on rozmiar dodatkowego bloków danych (domyślnie 56). Tak więc ilość danych znajdujących się wewnątrz pakietu IP typu ICMP ECHO_REPLY jest zawsze 8 bajtów większa niż żądana ilość danych (nagłówek ICMP).

Jeśli rozmiar danych ma wielkość przynajmniej struktury timeval, ping używa pierwszych 8 bajtów do włączania znacznika czasowego, którego używa do obliczeń czasów podróży. Jeśli podano mniej niż 8 bajtów wypełnienia, nie są podawane czasy podróży.

ZDUPLIKOWANE I USZKODZONE PAKIETY

Program ping zgłasza pakiety uszkodzone i zduplikowane. Pakiety zduplikowane nigdy nie powinny się pojawiać i prawdopodobnie są powodowane przez nieprawidłowe retransmisje poziomu połączenia (link-level). Mogą się one pojawiać w wielu sytuacjach i rzadko są dobrym znakiem, choć obecność niskiej liczby duplikatów nie musi być zawsze powodem alarmu.

Pakiety uszkodzone są oczywiście poważną przyczyną alarmu i często wskazują na uszkodzenie sprzętu na drodze pakietu ping (w sieci lub w komputerze).

KOLIZJE IDENTYFIKATORÓW

W przeciwieństwie do TCP i UDP unikatowo identyfikujących odbiorcę do dostarczenia danych, ICMP używa pola identyfikatora (ID) do celów identyfikacji. Z tego względu, jeśli na tym samym komputerze, w tym samym czasie, istnieją dwa procesy ping używające tego samego ID, odpowiedź echo może trafić do niewłaściwego odbiorcy. To znany problem, ze względu na ograniczony rozmiar 16-bitowego pola ID. Jest to historyczne ograniczenie protokołu, którego nie da się w tym momencie naprawić, chyba że ID zostałby zakodowany we fragmencie payload pakietu ping. ping wypisuje błąd DIFFERENT ADDRESS i utrata pakietów jest ujemna.

ping używa identyfikatora procesu (PID) do pozyskania unikatowego numeru. Domyślną wartością /proc/sys/kernel/pid_max jest 32768. W systemach intensywnie korzystających z programu ping, oraz przy pid_max większym od 65535 kolizje są nieuniknione.

UŻYWANIE RÓŻNYCH WZORCÓW DANYCH

Poziom (inter)sieci nigdy nie powinien traktować pakietów odmiennie w zależności od danych zawartych w części danych. Niestety, problemy zależne od danych, czasem pojawiają się w sieciach i pozostają długo niezauważane. W wielu przypadkach konkretny wzorzec powodujący problemy jest czymś, co nie posiada wystarczającej liczby „zmian”, np. jest samymi jedynkami lub samymi zerami, lub wzorcem na samym krańcu, prawie wypełnionym zerami. Niekoniecznie jednak musi wystarczyć podanie wzorca z samymi zerami w wierszu poleceń, gdyż interesujący wzorzec jest na poziomie połączenia i związek między tym co się wpisze, a tym co transmituje kontroler może być złożony.

Znaczy to, że jeśli występuje problem zależny od danych, to będzie to wymagało wielu testów do jego izolacji. Jeśli ma się szczęście, można znaleźć plik, który nie może być przesłany przez sieć lub który wymaga dużo więcej czasu do przesłania niż inne podobnej długości pliki. Można następnie taki plik przetestować w poszukiwaniu powtarzalnych wzorców z użyciem opcji -p programu ping.

SZCZEGÓŁY TTL

Wartość TTL pakietu IP reprezentuje maksymalną liczbę routerów IP, którą pakiet może minąć nim zostanie wyrzucony. W obecnej sytuacji, można oczekiwać że każdy router internetowy obniży wartość TTL o jeden.

Pole TTL pakietu TCP może przyjąć różne wartości. Maksymalna możliwa wartość tego pola wynosi 255, a zalecana początkowa: 64. Więcej informacji znajduje się w rozdziale „TCP/Lower-Level Interface” w RFC9293.

W normalnym działaniu, ping wypisuje wartości TTL odbieranych pakietów. Gdy system zdalny otrzymuje pakiet ping, może on zrobić jedną z trzech rzeczy z polem TTL:

    • Nie zmienić go; jest to właściwość systemów Berkeley Unix przed wydaniem 4.3BSD Tahoe. W tym wypadku wartość TTL odebranego pakietu wyniesie 255 minus liczba routerów na trasie podróży.

    • Ustawić ją na 255: jest to właściwość obecnego Berkeley Unix. W tym wypadku wartość TTL odebranego pakietu wyniesie 255 minus liczbę routerów na trasie od systemu zdalnego do stacji pingującej.

    • Ustawić na inną wartość. Niektóre komputery używają dla pakietów ICMP tej samej wartości co dla pakietów TCP, np. 30 lub 60. Inne mogą używać jeszcze bardziej abstrakcyjnych wartości.

USTERKI

    • Wiele stacji i bram ignoruje opcję RECORD_ROUTE.

    • Maksymalna długość nagłówka IP jest zbyt mała dla całkowitej użyteczności opcji w rodzaju RECORD_ROUTE. Jednak nie można z tym praktycznie nic zrobić.

    • Szybkie pingowanie nie jest ogólnie zalecanie, a w szczególności pingowanie adresu rozgłoszeniowego powinno być wykonywane w ściśle kontrolowanych warunkach.

ZOBACZ TAKŻE

ip(8), ss(8).

HISTORIA

Komenda ping pojawiła się w 4.3BSD.

Niniejsza wersja jest jej następcą charakterystycznym dla Linuksa.

Według stanu na wersję s20150815, plik binarny ping6 już nie istnieje. Został złączony z ping. Utworzenie dowiązania symbolicznego nazwanego ping6 wskazującego na ping zapewni tę samą funkcjonalność jak wcześniej.

BEZPIECZEŃSTWO

ping wymaga do wykonania przywileju (ang. capability) CAP_NET_RAW 1) jeśli program jest używany do zapytań innych niż echo (zob. opcję -N) lub jeśli pole identyfikacyjne ustawiono na 0 do ECHO_REQUEST (zob. -e) albo 2) jeśli jądro nie obsługuje gniazd datagramowych IMMP albo 3) jeśli użytkownik nie może tworzyć gniazda echo ICMP. Program może być używany z ustawieniem ID roota podczas wykonania (suid).

DOSTĘPNOŚĆ

ping jest częścią pakietu iputils.

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.