Est-ce que traceroute utilise UDP ou ICMP ou les deux?

24

Lorsque je fais une trace sur le domaine www.google.com depuis mon ordinateur portable, est-ce que j'utilise icmp ou udp?
Je pensais que c'était icmp type 11 mais en cherchant autre chose, je suis tombé sur des règles où icmp type 30 était utilisé et j'ai vu des règles où udp était utilisé.
Quelqu'un peut-il m'expliquer comment cela fonctionne?
Je travaille sur un pare-feu (iptables) pour un serveur virtuel dédié.

Kris
la source

Réponses:

26

Le type de paquet envoyé diffère selon l'implémentation. Par défaut, Windows tracertutilise ICMP et Mac OS X et Linux tracerouteutilisent UDP. Je n'ai pas de machines BSD ou Solaris ni aucun autre système d'exploitation à vérifier, mais la page de manuel de la version Mac OS X mentionne que sa provenance est BSD 4.3.

Les versions Mac et Linux que j'ai offrent la possibilité de choisir une variété de protocoles différents, y compris les paquets ICMP, TCP, UDP et GRE. D'autres protocoles peuvent être spécifiés par leur nom ou leur numéro, mais traceroute ne sait rien du fonctionnement des autres protocoles. Cela les envoie aveuglément.

Ils peuvent également à la fois modifier la charge utile et les ports source et de destination afin d'éviter les pare-feu ou découvrir quel routeur le long du chemin supprime des paquets d'une certaine taille.

Toutes les versions de traceroute reposent sur les réponses ICMP de type 11 (dépassement de temps) de chaque saut le long de la route. Si les réponses ICMP type 11 sont bloquées par votre pare-feu, traceroute ne fonctionnera pas. Ces paquets sont entrants, pas sortants.

Le type ICMP 30 est spécifiquement désigné pour traceroute et est étiqueté comme "demande d'information". Je n'ai pu trouver nulle part où cela est réellement utilisé. La page de manuel pour les versions Mac OS X et Linux indique que -Iva envoyer ICMP type 8 (demande d'écho). Wikipedia indique que Windows tracertutilise également les demandes d'écho ICMP. ICMP type 30 ou type 8 sont des paquets sortants, pas entrants.

Le type ICMP 0 (réponse d'écho) peut revenir comme le tout dernier paquet lorsque le TTL est exactement égal au nombre de sauts. Traceroute saura qu'elle est terminée lorsqu'elle en recevra une. Il s'agit d'un paquet entrant.

Les paquets TCP SYN provoquent un RSTpaquet ou un SYN ACKpaquet en réponse lorsqu'ils atteignent leur destination. Si vous recevez un SYN ACKpaquet, il est poli de suivre avec un RSTpaquet afin de ne pas laisser une connexion semi-ouverte sur le serveur.

Il est possible d'obtenir des réponses ICMP de type 3 de code 4 au lieu des réponses ICMP de type 11 si vous envoyez un gros paquet avec l'indicateur "Ne pas fragmenter", mais cela ne vous permettra probablement de trouver le saut qu'avec le plus petit MTU . Normalement, vous n'obtiendrez ce type de réponse que d'un bond le long de l'itinéraire. Pas tous.

Ladadadada
la source
8

Le traceroute traditionnel utilise UDP sur l'incrémentation des ports pour chaque saut.

Vous pouvez utiliser n'importe quel type de paquet pour l'implémenter - ICMP, TCP SYN, etc. Tout ce qu'il faut, c'est que le paquet IP expire et vous êtes en or.

Diverses implémentations, comme MacOS, prennent en charge plusieurs types de traceroute, ainsi que des modes qui n'incrémentent pas les ports, etc., pour contourner les restrictions du pare-feu.

Daniel Pittman
la source
7
Le port UDP par défaut sur une implémentation de type Unix va de 33434 à 33534. Les implémentations ICMP utilisent une "demande d'écho" (type 8).
Ouki