En un programa de traceroute, ¿cómo sabe el host que un mensaje ICMP corresponde a una solicitud UDP que envía ya que el ICMP solo incluye 8 bytes de UDP?

Convirtió un par de métodos diferentes para implementar trace-route con su pregunta.

ICMP no usa UDP: ICMP no usa ningún protocolo de transporte. Es su propio “protocolo de mensajes de control de Internet” y no necesita uno.

Hay más de una forma de implementar una aplicación traceroute. Los sistemas Windows generalmente usan solicitudes de eco ICMP (también conocido como paquetes “ping”). Los sistemas Linux usaban un datagrama UDP.

En ambos casos, el host envía una serie de mensajes (ya sea ICMP “ping” o algún datagrama UDP inocuo) con su valor Time-To-Live (TTL) aumentando de 1 a ###. Para mayor claridad, TTL también se llama “límite de salto”, es decir, no es tiempo en términos de segundos, sino tiempo en términos de [cuántas veces se puede reenviar este paquete a través de un salto antes de que necesitemos descartarlo].

Cuando un enrutador obtiene el datagrama, disminuye el valor TTL en 1 y lo activa. Si el TTL es 0 después de la disminución, descarta el datagrama y responde al host con un mensaje de límite de TTL excedido. De esta manera, el host recibe un mensaje del enrutador intermedio más cercano al más alejado. Utiliza estos mensajes para rastrear la ruta entre sí mismo y su destino deseado.

Entonces, el flujo es así:

  1. enviar un datagrama a la dirección de host remota abcd con un TTL de 1
  2. primer enrutador obtiene el datagrama, disminuye el valor TTL
  3. El valor TTL resultante es 0
  4. el primer enrutador responde al host con un mensaje de sí mismo que dice “límite de TTL excedido”
  5. primer enrutador descarta el datagrama
  6. el host toma nota de la dirección IP de ese enrutador
  7. host envía otro datagrama a la dirección de host remota abcd con un TTL de 2
  8. el primer enrutador disminuye el valor TTL a 1 … y como no es 0, lo reenvía
  9. repita esta secuencia hasta que reciba una respuesta del host remoto

Todo esto supone:

  • Los dispositivos remotos e intermedios deben responder a estos datagramas.
  • no hay rutas de red que cortafuegos estos mensajes o el protocolo UDP o puertos UDP específicos que se utilizan.

Traceroute – Wikipedia