ping(8) wysyła pakiety ICMP ECHO_REQUEST do hostów sieciowych

Other Alias

ping6

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.

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) <[email protected]> i Michał Kułach <[email protected]>.

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.