NAZWA¶
ping, ping6 - wysyła pakiety ICMP ECHO_REQUEST do hostów
sieciowych
SKŁADNIA¶
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
OPIS¶
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).
OPCJE¶
- -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-global
- Żądania adresów globalnych IPv6.
- ipv6-sitelocal
- Żądania adresów lokalnych IPv6.
- ipv6-linklocal
- Żądania adresów lokalnych 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
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.
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).
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.
BŁĘDY¶
- •
- 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.
ZOBACZ TAKŻE¶
netstat(1),
ifconfig(8).
HISTORIA¶
Komenda
ping pojawiła się w 4.3BSD.
Niniejsza wersja jest jej następcą charakterystycznym dla Linuksa.
BEZPIECZEŃSTWO¶
ping do wykonania wymaga przywileju CAP_NET_RAW. Może być
używany jako set-uid root.
DOSTĘPNOŚĆ¶
ping jest częścią pakietu
iputils.
Źródła najnowszej wersji można pobrać z
http://www.skbuff.net/iputils/iputils-current.tar.bz2.
TŁUMACZENIE¶
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.