Ping (utilidad de red)
ping
es una utilidad de software de administración de redes informáticas que se utiliza para probar la accesibilidad de un host en una red de Protocolo de Internet (IP). Está disponible para prácticamente todos los sistemas operativos que tienen capacidad de red, incluida la mayoría del software de administración de red integrado.
Ping mide el tiempo de ida y vuelta de los mensajes enviados desde el host de origen a una computadora de destino que se repiten en el origen. El nombre proviene de la terminología de sonar activo que envía un pulso de sonido y escucha el eco para detectar objetos bajo el agua.
Ping funciona mediante paquetes del Protocolo de mensajes de control de Internet (ICMP). Hacer ping implica enviar una solicitud de eco ICMP al host de destino y esperar una respuesta de eco ICMP. El programa informa errores, pérdida de paquetes y un resumen estadístico de los resultados, que normalmente incluye el mínimo, el máximo, los tiempos medios de ida y vuelta y la desviación estándar de la media.
Las opciones de la línea de comandos de la utilidad ping y su salida varían entre las numerosas implementaciones. Las opciones pueden incluir el tamaño de la carga útil, la cantidad de pruebas, los límites para la cantidad de saltos de red (TTL) que atraviesan las sondas, el intervalo entre las solicitudes y el tiempo de espera para una respuesta. Muchos sistemas proporcionan una utilidad complementaria, ping6, para realizar pruebas en redes de protocolo de Internet versión 6 (IPv6), que implementan ICMPv6.
Historia
La utilidad ping fue escrita por Mike Muuss en diciembre de 1983 durante su empleo en el Laboratorio de Investigación Balística, ahora el Laboratorio de Investigación del Ejército de EE. UU. Un comentario de David Mills sobre el uso de paquetes de eco ICMP para el diagnóstico y las mediciones de redes IP llevó a Muuss a crear la utilidad para solucionar problemas de red. El autor lo nombró por el sonido que hace el sonar, ya que su metodología es análoga a la ecolocalización del sonar. El backronym Packet InterNet Groper para PING se ha utilizado durante más de 30 años, y aunque Muuss dice que, desde su punto de vista, PING no pretendía ser un acrónimo, ha reconocido que Mills' expansión del nombre. La primera versión lanzada fue un software de dominio público; todas las versiones posteriores han sido licenciadas bajo la licencia BSD. Ping se incluyó por primera vez en 4.3BSD. La versión FreeDOS fue desarrollada por Erick Engelke y tiene licencia GPL. Tim Crawford desarrolló la versión de ReactOS. Está autorizado bajo la Licencia MIT.
RFC 1122 prescribe que cualquier host debe procesar solicitudes de eco ICMP y emitir respuestas de eco a cambio.
Ejemplo de invocación
El siguiente es el resultado de ejecutar ping en Linux para enviar cinco sondeos (intervalo de 1 segundo predeterminado, configurable a través de la opción -i) al host de destino www.example.com:
$ ping -c 5 www.example.com
PING www.example.com (93.184.216.34): 56 bytes de datos64 bytes de 93.184.216.34: icmp_seq=0 ttl=56 tiempo=11.632 ms64 bytes de 93.184.216.34: icmp_seq=1 ttl=56 tiempo=11.726 ms64 bytes de 93.184.216.34: icmp_seq=2 ttl=56 tiempo=10.683 ms64 bytes de 93.184.216.34: icmp_seq=3 ttl=56 tiempo=9.674 ms64 bytes de 93.184.216.34: icmp_seq=4 ttl=56 tiempo=11.127 ms- www.example.com ping statistics ---5 paquetes transmitidos, 5 paquetes recibidos, 0,0% pérdida de paquetesida y vuelta min/avg/max/stddev = 9.674/10.968/11.726/0.748 ms
La salida enumera cada mensaje de sondeo y los resultados obtenidos. Finalmente, enumera las estadísticas de toda la prueba. En este ejemplo, el tiempo de ida y vuelta más corto fue de 9,674 ms, el promedio fue de 10,968 ms y el valor máximo fue de 11,726 ms. La medida tuvo una desviación estándar de 0,748 ms.
Indicaciones de error
En caso de que el host de destino no responda, la mayoría de las implementaciones no muestran nada o imprimen periódicamente notificaciones sobre el tiempo de espera. Los posibles resultados de ping que indican un problema incluyen los siguientes:
- H, ! N o ! P– host, red o protocolo no accesible
- S– la ruta de origen falló
- F– fragmentación necesaria
- U o ! W– red de destino/host desconocido
- I– host fuente está aislado
- A– comunicación con la red de destino prohibida administrativamente
- Z– comunicación con el host de destino prohibida administrativamente
- Q– para este ToS la red de destino no es accesible
- T– para este ToS el host de destino es inalcable
- X– comunicación administrativamente prohibida
- V- violación de la precedencia del anfitrión
- C– corte de precedencia en efecto
En caso de error, el host de destino o un enrutador intermedio devuelve un mensaje de error ICMP, por ejemplo, host inalcanzable o TTL excedido en tránsito. Además, estos mensajes incluyen los primeros ocho bytes del mensaje original (en este caso, el encabezado de la solicitud de eco ICMP, incluido el valor de extinción), por lo que la utilidad ping puede hacer coincidir las respuestas con las consultas de origen.
Formato de mensaje
Paquete ICMP
Bits 0–7 | Bits 8–15 | Bits 16–23 | Bits 24–31 | |
---|---|---|---|---|
Header (20 bytes) | Versión/IHL | Tipo de servicio (ToS) | Duración | |
Identificación | banderas y offset | |||
Hora de vivir (TTL) | Protocolo | Título del examen | ||
Dirección IP de origen | ||||
Dirección IP | ||||
ICMP header (8 bytes) | Tipo de mensaje | Código | Checksum | |
Datos del encabezado | ||||
ICMP payload ()opcional) | Datos de carga |
Bits 0–3 | Bits 4-7 | Bits 8–11 | Bits 12–15 | Bits 16–23 | Bits 24–31 | |
---|---|---|---|---|---|---|
Header (40 bytes) | Versión | Clase de tráfico | etiqueta de flujo | |||
Longitud de carga | Siguiente encabezado | Límite de Hop | ||||
Dirección fuente (128 bits) | ||||||
Dirección de destino (128 bits) | ||||||
ICMP6 header (8 bytes) | Tipo de mensaje | Código | Checksum | |||
Datos del encabezado | ||||||
ICMP6 payload ()opcional) | Datos de carga |
Composición genérica de un paquete ICMP:
- IPv4 Header (en azul): protocolo establecido en 1 (ICMP) y Tipo de servicio listo para 0.
- IPv6 Header (en azul): Next Header (ICMP6)
- ICMP Cabeza (en rojo):
- Tipo de mensaje ICMP (8 bits)
- Código (8 bits)
- Checksum (16 bits), el complemento de 16 bits de la suma de complemento del paquete. Para IPv4, esto se calcula a partir del mensaje ICMP comenzando con el campo Tipo (el encabezado IP no está incluido). Para IPv6 esto se calcula a partir del mensaje ICMP, prepended with an IPv6 pseudo-cabeza.
- Header Data (32 bits) field, which in this case (ICMP echo request and replies), will be composed of an identifier (16 bits) and sequence number (16 bits).
- ICMP Carga: carga útil para el tipo diferente de respuestas; puede ser una longitud arbitraria, dejada a los detalles de la implementación. Sin embargo, el paquete que incluye cabeceras IP e ICMP debe ser inferior a la unidad de transmisión máxima de la red o al riesgo de ser fragmentado.
Solicitud de eco
La solicitud de eco (ping) es un mensaje ICMP/ICMP6.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo = 8(IPv4, ICMP) 128(IPv6,ICMP6) | Código = 0 | Checksum | |||||||||||||||||||||||||||||
Identifier | Número de secuencias | ||||||||||||||||||||||||||||||
Carga |
El cliente puede utilizar el identificador y el número de secuencia para hacer coincidir la respuesta con la solicitud que provocó la respuesta. En la práctica, la mayoría de los sistemas Linux usan un identificador único para cada proceso de ping y el número de secuencia es un número creciente dentro de ese proceso. Windows usa un identificador fijo, que varía entre las versiones de Windows, y un número de secuencia que solo se reinicia en el momento del arranque.
Respuesta de eco
La respuesta de eco es un mensaje ICMP generado en respuesta a una solicitud de eco; es obligatorio para todos los hosts y debe incluir la carga útil exacta recibida en la solicitud.
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo = 0(IPv4,ICMP) 129(IPv6,ICMP6) | Código = 0 | Checksum | |||||||||||||||||||||||||||||
Identifier | Número de secuencias | ||||||||||||||||||||||||||||||
Carga |
- El Identificador y secuencia puede ser utilizado por el cliente para asociar cada solicitud de eco con su respuesta.
Carga útil
La carga útil del paquete generalmente se llena con caracteres ASCII, como muestra la salida de la utilidad tcpdump en los últimos 32 bytes del siguiente ejemplo (después del encabezado ICMP de ocho bytes que comienza con 0x0800):
16:24:47.966461 IP (tos 0x0, ttl 128, id 15103, offset 0, flags [none],proto: ICMP 1) longitud: 60) 192.168.146.22 ■ 192.168.144.5: ICMP echo solicitud,id 1, seq 38, longitud 40 0x0000: 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E.. 0x0010: c0a8 9005 0800 4d35 0001 0026 6162 6364 ...M5... 0x0020: 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x0030: 7576 7761 6263 6465 6667 6869 uvwabcdefghi
La carga útil puede incluir una marca de tiempo que indica el momento de la transmisión y un número de secuencia, que no se encuentran en este ejemplo. Esto permite que ping calcule el tiempo de ida y vuelta sin estado sin necesidad de registrar el tiempo de transmisión de cada paquete.
La carga útil también puede incluir un paquete mágico para el protocolo Wake-on-LAN, pero la carga útil mínima, en ese caso, es más larga de lo que se muestra. La Solicitud de eco generalmente no recibe ninguna respuesta si el host estaba durmiendo en estado de hibernación, pero el host aún se despierta del estado de suspensión si su interfaz está configurada para aceptar solicitudes de activación. Si el host ya está activo y configurado para permitir respuestas a paquetes ICMP Echo Request entrantes, la respuesta devuelta debe incluir la misma carga útil. Esto puede usarse para detectar que el host remoto se despertó efectivamente, repitiendo una nueva solicitud después de un retraso para permitir que el host reanude sus servicios de red. Si el host estaba durmiendo en estado activo de bajo consumo, una sola solicitud activa ese host lo suficiente como para permitir que su servicio Echo Reply responda instantáneamente si ese servicio estaba habilitado. El anfitrión no necesita activar todos los dispositivos por completo y puede volver al modo de bajo consumo después de un breve retraso. Dicha configuración se puede utilizar para evitar que un host entre en estado de hibernación, con un retraso de activación mucho más largo, después de un tiempo en modo activo de bajo consumo.
Vacíos de seguridad
Para llevar a cabo un ataque de denegación de servicio, un atacante puede enviar solicitudes de ping lo más rápido posible, posiblemente abrumando a la víctima con solicitudes de eco ICMP. Esta técnica se llama inundación de ping.
Las solicitudes de ping a varias direcciones, los barridos de ping, se pueden utilizar para obtener una lista de todos los hosts en una red.
Contenido relacionado
Pipa
Diccionario gratuito en línea de informática
Bash (capa de Unix)