ping, ping6 - wysyła pakiety ICMP ECHO_REQUEST do
hostów sieciowych
ping [-aAbBdDfhLnOqrRUvV] [-c liczba]
[-F etykieta-przepływu] [-i
interwał] [-I interfejs] [-l
liczba-pakietów] [-m znacznik] [-M
opcja-pmtudisc] [-N opcja-nodeinfo] [-w
limit] [-W oczekiwanie] [-p
wzorzec] [-Q tos] [-s
rozmiar-pakietu] [-S sndbuf] [-t ttl]
[-T opcja-znacznika-czasu] [przeskok ...]
cel
Program ping używa obowiązkowego datagramu
protokołu ICMP o nazwie ECHO_REQUEST, wywołującego ICMP
ECHO_RESPONSE od hosta 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.
ping6 jest wersją ping zgodną z IPv6,
która może wysyłać również Node
Information Queries (RFC4620). Niedozwolone mogą być
przeskoki, ponieważ trasowanie źródeł
IPv6 zostało oznaczone jako przestarzałe (RFC5095).
- -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
200 milisekund dla użytkownika bez uprawnień administratora.
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.
- -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.
- -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 ping6. 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.
- -i
interwał
- Czeka interwał sekund pomiędzy wysłaniem
kolejnych pakietów. 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 sekundy.
- -I interfejs
- Interfejs może być adresem lub nazwą
interfejsu. 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. W przypadku polecenia ping6, przy wykonywaniu pinga do
adresu lokalnego dla łącza, wymagane jest określenie
łącza (notacją "%" w celu lub
tą opcją).
- -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
rozgłoszeniowych. Opcja ta ma znaczenie jedynie gdy adresem
docelowym jest adres rozgłoszeniowy.
- -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.
- -M
opcje-pmtudisc
- Wybiera strategię Path MTU Discovery (badania MTU
ścieżki). opcja-pmtudisc może być
jedną z następujących: do (zapobiega
fragmentacji, nawet lokalnej), want (wykonuje badanie MTU
ścieżki, następuje lokalna fragmentacja gdy rozmiary
pakietów są znaczne) lub dont (nie ustawia flagi
DF).
- -N
opcje-nodeinfo
- Tylko polecenie ping6. Wysyła ICMPv6 Node Information
Queries (RFC4620), zamiast Echo Request.
- help
- Pokazuje pomoc do obsługi NI.
- name
- Zapytania nazw węzłów.
- ipv6
- Zapytania adresów IPv6. Istnieje kilka flag dotyczących
wyłącznie 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-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).
- -n
- Tylko wyjście numeryczne. Nie będą dokonywane
próby odczytania nazw symbolicznych adresów
hostów.
- -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 etykieta
- 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 hosta w przyłączonej sieci.
Jeśli host nie jest w sieci podłączonej
bezpośrednio, zwracany jest błąd. Opcja ta
może być używana do pingowania hosta lokalnego
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 hostów 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.
- -S sndbuf
- Ustawia sndbuf 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 opcje
znacznika-czasu
- Ustawia specjalne opcje znacznika czasu IP. opcje znacznika-czasu
mogą przyjąć jedną z
następujących wartości: tsonly (tylko
znaczniki czasu), tsandaddr (znaczniki czasu i adresy) lub
tsprespec host1 [host2 [host3 [host4]]]
(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
- Tryb szczegółowy
- -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.
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 hosty 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. Po
nadaniu (i odebraniu) określonej liczby pakietów, lub po
zakończeniu programu przez SIGINT, wyświetlane jest
krótkie podsumowanie. Krótsze statystyki bieżące
można uzyskać bez przerywania procesu za pomocą
sygnału SIGQUIT.
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 host odpowiada,
czy też nie.
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.
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).
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.
Specyfikacja TCP/IP określa, że pole TTL pakietu TCP
powinno być ustawiane na 60, lecz wiele systemów używa
mniejszych wartości (4.3 BSD używa 30, 4.2
używało 15).
Maksymalna możliwa wartość tego pola to 255 i
większość systemów uniksowych ustawia
wartość TTL pakietów ICMP ECHO_REQUEST na 255. Oto
dlaczego da się pingować pewne hosty, lecz nie można
ich osiągnąć poprzez telnet(1) czy
ftp(1).
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 hosta pingującego.
- •
- 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 hostów 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.
ping do wykonania wymaga przywileju CAP_NET_RAW.
Może być używany jako set-uid root.
ping jest częścią pakietu
iputils. Źródła najnowszej wersji można
pobrać z http://www.skbuff.net/iputils/iputils-current.tar.bz2.
Autorami polskiego tłumaczenia niniejszej strony
podręcznika man są: Przemek Borys (PTM)
<pborys@dione.ids.pl> i Michał Kułach
<michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią
projektu manpages-pl; uwagi, pomoc, zgłaszanie
błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
20121221 oryginału.