PING(8)

NAZWA
ping - wysyła pakiety ICMP ECHO_REQUEST do hostów sieciowych

SKŁADNIA
ping [-dfnqrvR] [-c liczba] [-i oczekiwanie] [-l preload] [-p wzorzec] [-s rozmiarpakietu]

Opcje zmienione: -I <nazwa urządzenia> może zostać wykorzystane do ustawienia interfejsu wyjściowego.

Nowe opcje: -T [tylko ping]: opcja wysłania pieczątki czasowej IP. -T tsonly --- tylko pieczątki czasowe -T tsandaddr --- pieczątki i adresy -T tsprespec host1 [host2 [host3 [host 4]]] --- przejścia pieczątek czasowych

Udoskonalenia: - rozumie komunikaty błędów icmp i prawidłowo na nie odpowiada. - sprawdza sumę icmp i reaguje prawidłowo na uszkodzone pakiety. - potrafi prawidłowo pingować loopback linuksowy. itd.

OPIS
Ping używa obowiązkowego datagramu ICMP o nazwie ECHO_REQUEST, wywołującego ICMP ECHO_RESPONSE od hosta lub bramki. 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. Opcje są następujące: Inne opcje to:

-c liczba
    Zakończ po wysłaniu (i odebraniu) liczba pakietów ECHO_RESPONSE

-d  Ustaw na używanym gnieździe opcję SO_DEBUG

-f  Produkuje pakiety tak szybko, jak powracają, lub 100 razy na sekundę, zależnie od tego, czego jest więcej. Dla każdego wysłanego ECHO_REQUEST drukowana jest kropka ``.'', a dla każdego odebranego ECHO_REPLY drukowane jest backspace. Daje to dynamiczny obraz zmian ilości opuszczonych pakietów. Opcji tej może używać jedynie superużytkownik. Może to być bardzo ciężkie w sieci i powinno być używane ostrożnie.

-i oczekiwanie
    Czekaj oczekiwanie sekund między wysłaniem kolejnych pakietów. Domyślnie czeka się jedną sekundę. Opcja ta jest niekompatybilna z opcją -f

-l preload
    Jeśli podany jest preload, ping jak najszybciej wysyła tyle pakietów, po czym przechodzi do normalnego trybu działania. Opcji tej używać może jedynie superużytkownik.

-n  Tylko wyjście numeryczne. Nie będą dokonywane próby odczytania nazw symbolicznych adresów hostów.

-p wzorzec
    Możesz 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 liniami podsumowania na starcie/końcu nic nie jest wyświetlane.

-R  Nagrywaj trasę. Zawiera w pakiecie ECHO_REQUEST opcję RECORD_ROUTE i wyświetla bufor trasy zwróconych pakietów. Zauważ, że nagłówek IP wystarcza jedynie na 9 takich tras. Wiele hostów ignoruje lub zarzuca tę opcję.

-r  Pomiń normalne tabele trasowania i wysyłaj 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 (np. po jego porzuceniu przez routed(8)).

-s rozmiarpakietu
    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.

-v  Wyjście gadatliwe. Odbierane pakiety ICMP inne niż ECHO_RESPONSE są listowane.

Przy używaniu pinga do izolowania błędów, należy go najpierw zapuścić na hoście 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.

Jeśli ping nie odbierze żadnych pakietów odpowiedzi, to zakończy działanie z kodem wyjścia 1. W przypadku błędu kod ten wynosi 2. W przeciwnym razie zwracane jest 0. Umożliwia to używanie kodu wyjścia do sprawdzania czy hosty żyją, czy gryzą ziemię.

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 ze 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 rozmiarpakietu, 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 8 bajtów, to ping używa pierwszych 8 bajtów do włączania pieczątki czasowej, której 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
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 pinga.

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 linii poleceń, gdyż interesujący wzorzec jest na poziomie połączenia i związek między tym co wpiszesz i tym co transmituje kontroler może być złożony.

Znaczy to, że jeśli masz problem zależny od danych, to będziesz potrzebować wielu testów do jego izolacji. Jeśli masz szczęście, to może znajdziesz 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żesz następnie taki plik przetestować w poszukiwaniu powtarzalnych wzorców z użyciem opcji -p pinga.

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 zdekrementuje 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 Unixowych ustawia wartość TTL pakietów ICMP ECHO_REQUEST na 255. Oto dlaczego możesz pingować pewne hosty, lecz nie możesz ich osiągnąć poprzez telnet(1) czy ftp(1).

W normalnym działaniu, ping drukuje 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 maszyny używają dla pakietów ICMP tej samej wartości co dla pakietów TCP, np. 30 lub 60. Inni mogą używać jeszcze bardziej dzikich 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 (flood pinging) nie jest ogólnie zalecanie, a w szczególności pingowanie adresu rozgłoszeniowego.

ZOBACZ TAKŻE
netstat(1), ifconfig(8)

HISTORIA
Komenda ping pojawiła się w 4.3BSD.