ping —
invia
pacchetti ICMP ECHO_REQUEST agli host della rete
ping
[
-Rdfnqrv]
[
-c
count]
[
-i
wait]
[
-l
preload]
[
-p
pattern]
[
-s
packetsize]
host
Ping usa il datagramma imperativo ECHO_REQUEST del
protocollo ICMP per ottenere una ICMP ECHO_RESPONSE da un host o gateway. I
datagrammi ECHO_REQUEST (``ping'') hanno un'intestazione IP e ICMP, seguita da
un “struct timeval” e quindi un numero arbitrario di byte
``pad'' usati per completare il pacchetto. Le opzioni sono le seguenti:
-
-c
count
- Stop l'invio (e ricezione) di pacchetti
count ECHO_RESPONSE
- -d
- imposta l'opzione
SO_DEBUG
sul socket usato.
- -f
- Flood ping. Emette pacchetti alla stessa velocità
del loro ritorno o cento volte al secondo, il maggiore tra i due. Per
ciascun invio ECHO_REQUEST viene stampato un punto ``.'', mentre per ogni
ECHO_REPLY ricevuto viene stampato un backspace. Questo fornisce una
rapida visualizzazione di quanti pacchetti sono stati scartati. Solo il
super-utente può usare questa opzione.
-
-i
wait
- Aspetta wait secondi
tra gli invii dei pacchetti. Il default
è di aspettare per unsecondo tra ciascun pacchetto. Questa opzione
è incompatibile con l'opzione -f.
-
-l
preload
- Se è specificato
preload ping
invia tutti questi pacchetti il più velocemente possibile prima di
tornare al suo normale modo di comportamento.
- -n
- Solo output numerico. Non verrà fatto nessun
tentativo di cercare nomi simbolici per gli indirizzi dell'host.
-
-p
pattern
- Si possono specificare fino a 16 byte ``pad'' per
completare il pacchetto da inviare. Questo è utile per
diagnosticare i problemi dipendenti dai dati in una rete. Per esempio
“
-p ff
” farà sì che il
pacchetto inviato venga rimepito con deli uno.
- -q
- Output silenzioso. Non è visualizzato nulla tranne
le linee di sommario all'avvio e quando termina.
- -R
- Registra la strada. Include l'opzione RECORD_ROUTE nel
pacchetto ECHO_REQUEST e visualizza il buffer dell'instradamento sui
pacchetti restituiti. Notare che l'intestazione IP è solo
abbastanza grande per nove di tali strade. Molti host ignorano o scartano
questa opzione.
- -r
- Bypassa le normali tabelle di instradamento e invia
direttamente a un host su una rete collegata. Se l'host non è su
una rete collegata direttamente viene restituito un errore. Questa opzione
può essere usata per fare un ping sull'host locale attraverso
un'interfaccia che non ha strada attraverso di esso (es., dopo che
l'interfaccia è stata scartata da .Xr routed 8 ) .
-
-s
dimensione pacchetto
- Specifica il numero di byte di dati da inviare. Il default
è 56, che si traduce in 64 byte di dati ICMP quando combinato con
gli 8 byte dei dati di intestazione di ICMP.
- -v
- Output prolisso. I pacchetti ICMP diversi da ECHO_RESPONSE
che vengono ricevuti sono elencati.
Quando si usa
ping per isolare i guasti, deve prima
essere avviato sull'host locle, per verificare che l'interfaccia della rete
locale sia funzionante. Quindi, host e gateways lontani possono venire
"pingati". Vengono conteggiate le statistiche sui tempi di risposta
e i pacchetti persi Se vengono ricevuti pacchetti duplicati essi non sono
inclusi nel calcolo dei pacchetti persi, sebbene il tempo di risposta di
questi pacchetti sia usato nel calcolare i numeri di minimo/medio/massimo
tempo di risposta. Quando il numero specificato di pacchetti è stato
inviato (e ricevuto) o se il programma è terminato con un
SIGINT
, viene visualizzato un breve
sommario.
Questo programma è pensato per l'uso nel test delle reti, misura e
gestione. A causa del carico che può imporre alla rete, è
sconsigliabile usare
ping durante le normali
operazioni o da script automatizzati.
Un'intestazione IP senza opzioni è di 20 byte. Un pacchetto ICMP
ECHO_REQUEST contiene un'intestazione addizionale ICMP di 8 byte seguita da un
ammontare arbitrario di dati. Quando viene data una
dimensione pacchetto questo indica la
dimensione di questa parte extra di dati (il default è 56). Quindi
l'ammontare di dati ricevuti in un pacchetto IP di tipo ICMP ECHO_REPLY
sarà sempre 8 byte in più dello spazio dati richiesto
(l'intestazione ICMP ).
Se lo spazio dati è grande almeno 8 byte,
ping usa i primi 8 byte di questo spazio per
includere data e ora, che usa nel computo dei tempi di risposta. Se sono
specificati meno di otto byte di cuscinetto, non vengono dati tempi di
risposta.
Ping riporterà i pacchetti duplicati e
danneggiati. Non devono mai esserci pacchetti duplicati, e ciò sembra
causato da ritrasmissioni inappropriate a livello di connessione. Le
duplicazioni possono avvenire in molte situazioni e sono raramente (per non
dire mai) un buon segno, sebbene la presenza di bassi livelli di duplicati
potrebbe non sempre essere causa di allarme.
I pacchetti danneggiati una seria causa di allarme, e spesso indicano hardware
malfunzionante da qualche parte nel percorso dei pacchetti di
ping (nella rete o ngeli host).
Lo strato di (inter)network non deve mai trattare i pacchetti in modo differente
in funzione dei dati contenuti nella porzione dati. Sfortunatamente sono noti
problemi dipendenti dai dati che si infilano nelle reti e rimangono nascosti
per lunghi periodi di tempo. In molti casi il particolare schema che
avrà problemi è qualcosa che non ha sufficienti
"transizioni", come tutti uno o tutti zero, o uno schema al confine,
come uno con quasi tutti zero. Non è necessariamente sufficiente
specificare uno schema dati di tutti zero (per esempio) sulla linea di
comando, perché lo schema di interesse è al livello collegamento
dati, e la relazione tra ciò che si digita e ciò che il
controller trasmette può essere complessa.
Ciò significa che se si ha un problema dipendente dai dati
bisognerà probabilmente fare molti test per trovarlo. Se si è
fortunati si può trovare un file che non può essere inviato
attraverso la propria rete o che impiega troppo tempo per trasferirsi di altri
file di lunghezza simile. Si può quindi esaminare questo file per
trovare gli schemi ripetuti, che si possono testare usando l'opzione
-p di
ping.
Il valore TTL di un pacchetto IP rappresenta il numero massimo di router IP che
il pacchetto può attraversare prima di essere respinto. Nella pratica
corrente ci si può aspettare che ciascun router in Internet decrementi
il campo TTL esattamente di uno.
Le specifiche TCP/IP stabiliscono che il campo TTL per i pacchetti TCP deve
essere impostato a 60, ma molti sistemi usano valori minori ( BSD 4.3 usa 30,
4.2 usava 15).
Il massimo valore possibile di questo campo è 255, e molti sistemi Unix
impostano il campo TTL dei pacchetti ICMP ECHO_REQUEST a 255. Questa è
la ragione per cui si può fare ``ping'' su certi host, ma non li si
può raggiungere con
telnet(1) o
ftp(1).
Nelle operazioni normali ping stampa il valore ttl dal pacchetto che riceve.
Quando un sistema remoto riceve un pacchetto ping, esso può fare una
tra tre cose con il campo TTL in risposta:
- Non lo cambia; questo è ciò che i sistemi
Berkeley Unix systems facevano prima della release
4.3BSD-Tahoe. In questo caso il valore TTL nel
pacchetto ricevuto sarà 255 mano il numero di router nel percorso
di ritorno.
- Impostarlo a 255; questo è ciò che fanno
attualmente i sistemi Berkeley Unix. In questo caso il valore TTL nel
pacchetto ricevuto sarà 255 meno il numero di router nel percorso
dal sistema remoto
al
pinging
host.
- Impostarlo su qualche altro valore. Alcune macchine
usano per i pacchetti ICMP lo stesso valore che usano per i pacchetti TCP,
per esempio o 30 o 60. Altri possono usare valori completamente
casuali.
Molti Host e Gateway ignorano l'opzione RECORD_ROUTE.
La lunghezza massima dell'intestazione IP è troppo piccola per opzioni
come RECORD_ROUTE per essere completamente utile. Tuttavia su questo non si
può fare molto.
Il flood pinging in generale non è raccomandato, e il flood pinging su
indirizzo broadcast deve essere fatto solo sotto condizioni strettamente
controllate.
netstat(1),
ifconfig(8),
routed(8)
Il comando
ping è aparso nella
4.3BSD.