ping - wysyła pakiety ICMP ECHO_REQUEST do stacji
sieciowych
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}
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).
-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. .SH "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.
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.
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).
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.
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.
• 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.
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.
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).
ping jest częścią pakietu
iputils.
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 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.