Perché alcune implementazioni traceroute comuni utilizzano automaticamente le sonde UDP?


18

Recentemente stavo risolvendo un meta-problema di connettività di rete, in quanto sapevo che una determinata destinazione era raggiungibile, ma non sono stato in grado di dimostrarlo tracerouteperché il percorso è diventato freddo dopo un certo numero di salti. Dato che l'ultimo hop osservato era appena a monte del nodo di interesse, ho annusato il traffico, aspettandomi di confermare che le sonde lo stavano raggiungendo e di sapere quale regola di filtro li stava bloccando. Abbastanza sicuro, ho imparato che le sonde erano datagrammi UDP destinati a una porta alta (e variabile) che avevo, ovviamente, bloccato al traffico in entrata.

Questo mi sorprende, perché ho supposto che tutte le traceroutesonde sarebbero state impostate su ICMP, poiché le risposte sono ICMP. Ho svolto un sondaggio sulla documentazione e ho scoperto che implementazioni diverse fanno scelte diverse e alcune non consentono all'utente di effettuare una selezione non predefinita.

L'abstract del metodo della sonda Traceroute e l'inferenza del percorso IP in avanti supporta la mia intuizione che le sonde ICMP riusciranno più spesso a raggiungere la destinazione.

Consentire diversi metodi di sondaggio sembra un'ottima idea, ma il default di qualcosa di diverso da ICMP sembra una cattiva idea. Qualcuno potrebbe descrivere la logica alla base del perché è meglio usare UDP di default?

Risposte:


20

La prima versione di è traceroutestata scritta da Van Jacobson e utilizzava ICMP ma non funzionava molto bene. L'interpretazione del fornitore di ICMP in RFC792 era che i router non dovevano inviare un messaggio di errore ICMP in risposta a un pacchetto ICMP (vedere le note di modifica di seguito). Pertanto la maggior parte dei router non invierebbe un messaggio "time overed" in risposta a una richiesta di eco con un TTL di 1 o 0. Quindi lo ha cambiato per usare UDP e lo ed ecco che ha funzionato alla grande e ci sono stati molti rallegramenti (e adozione). Lo traceroutestrumento su Linux e FreeBSD (e presumo Cisco) si basa sul lavoro di Van Jacobson.

La specifica è stata successivamente modificata in "in risposta a un pacchetto di errori ICMP ". Il mondo è progredito, i venditori hanno apportato modifiche alle proprie pile consentendo messaggi di errore ICMP in risposta alle richieste di eco, e con l'ascesa di firewall e ACL, i pacchetti UDP vaganti a volte vengono bloccati, ma la richiesta di eco ICMP potrebbe passare. Certo, il tuo successo su questo oggi varia in modo selvaggio. Mi aspetto che gli tracertaltri strumenti siano stati scritti in un momento in cui l'uso delle risposte dell'eco ICMP non era così problematico.

In questi giorni non puoi davvero dire che UDP è meglio di ICMP. O che uno di questi è meglio di TCP. Dipende completamente dal percorso che stai attraversando e dalle politiche di sicurezza in atto. Potrebbe essere necessario provare una, entrambe o tutte e tre le implementazioni.

fonti:

http://ftp.arl.army.mil/~mike/ping.html http://www.inetdaemon.com/tutorials/tro troubleshooting/ tools/ traceroute/ definition.shtml

Modifica :

Modificato RFC da IP (RFC791) a ICMP (RFC792) che dice nell'introduzione:

Per evitare il regresso infinito di messaggi su messaggi, ecc., Non vengono inviati messaggi ICMP sui messaggi ICMP.

Questo è il bit che ha impedito ai fornitori di non inviare errori "Tempo scaduto" per le richieste di eco.

RFC1122, Requisiti per gli host Internet, nella sezione 3.2.2. è l'aggiornamento che dice che gli host non dovrebbero rispondere ai messaggi di errore ICMP .


FYI ora hai abbastanza reputazione per lasciare commenti sulla domanda che mi hai inviato via email
Mike Pennington

Molto bene. Mi è piaciuta soprattutto la storia nel primo link sul computer che urlava "Ping! Ping! Ping!" nella parte superiore dei suoi polmoni.
Neirbowj,

Mike, sì, sto iniziando a capire come funziona questo sito :-)
karyhead,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.