Comment savoir si un protocole utilise TCP ou UDP

9

Eh bien, je sais que cela peut sembler une question stupide et je crois que la réponse la plus appropriée sera comme je pourrai le dire à mesure que mon expérience s'accumulera et j'apprends de plus en plus sur les protocoles.

Cependant, je suis étudiant et je n'ai pas beaucoup d'expérience pratique dans le domaine. Bien que je puisse google pour n'importe quel protocole donné, je veux savoir s'il existe une règle d'or. J'ai toujours l'impression que demander une «règle d'or» est stupide, mais j'en cherche toujours une.

J'ai rencontré cette liste sur wikipedia qui répertorie les protocoles et s'ils utilisent TCP ou UDP au format tabulaire. Cependant, je ne peux pas comprendre ce que cela signifie lorsque la ligne d'un protocole particulier contient à la fois TCP et UDP avec un numéro de port unique. Par exemple, dans la ligne Telnet, c'est le cas 23-TCP-UDP. Qu'est-ce que ça veut dire? Telnet peut fonctionner à la fois sur le port TCP 23 et le port UDP 23?

J'ai également trouvé que dans mon manuel, il est dit que TFTP utilise UDP, mais si nous regardons dans le tableau ci-dessus, la ligne TFTP l'est 69-TCP-UDP. Il suffit donc de deviner ce qui se passe dans le tableau ci-dessus.

Maha
la source

Réponses:

9

Vous avez posé une bonne question. Ne laissez personne vous dire le contraire.

Malheureusement, il n'y a pas de règle empirique pour les types de protocoles qui utilisent TCP et les types de protocoles qui utilisent UDP.

La décision si un protocole utilise l'un ou l'autre revient à celui qui a écrit / créé le protocole pour commencer.

S'ils ne voulaient pas se soucier d'écrire leur propre système de «livraison fiable», ils peuvent simplement utiliser TCP qui fournit toute la fiabilité de manière innée.

S'ils pensaient (connaissant leur propre protocole de manière innée) qu'ils pourraient écrire un système de «livraison fiable» meilleur ou plus approprié, alors ils peuvent l'intégrer dans le protocole lui-même et simplement utiliser UDP comme moyen de transport.

À titre d'exemple, jetez un œil à une capture d'échantillon UDP TFTP , vous remarquerez qu'il existe des systèmes d'accusé de réception intégrés dans TFTP lui-même - les avoir à la fois et les systèmes d'accusé de réception supplémentaires dans TCP seraient simplement redondants.

Alors que FTP, qui s'exécute sur TCP, n'a pas de système de reconnaissance intégré. Un utilisateur demande simplement un fichier et l'expéditeur l'envoie. Il y a une notification "transfert de fichier terminé", mais rien ne garantit d'avoir reçu chaque bit du fichier. FTP s'appuie sur la fiabilité de TCP pour garantir que le fichier est transmis de manière complète.

Cela dit, j'ai parcouru la liste des ports sur la page wiki que vous avez liée et j'ai vu une quantité surprenante de protocoles qui utiliseraient soi-disant TCP et UDP. Cela m'était étranger, et je ne connais que très peu de ceux qui utilisent les deux (à savoir, DNS). Mais il se peut qu'il existe une implémentation TFTP qui utilise TCP, et si c'est le cas, je crains de ne pas y être exposé.

Le système de noms de domaine (DNS) est traditionnellement le protocole auquel il est fait référence lors de l'examen des protocoles qui utilisent à la fois TCP et UDP. Il ne les utilise pas en même temps, faites attention. Mais différentes fonctions au sein du DNS peuvent nécessiter TCP contre UDP.

Par exemple, lors d'une simple demande de résolution d'enregistrement A, la «demande» et la «réponse» sont très légères, nécessitant toutes deux un seul paquet. En tant que tel, cela se fait généralement via UDP.

Mais si une demande ou une réponse nécessite un transfert plus important (au-dessus d'un certain nombre d'octets), DNS choisit d'utiliser TCP pour garantir que «tous les bits» y parviennent. Ceci est courant avec les demandes de transfert de zone complètes.

Eddie
la source
2
Oui, + 1, les requêtes DNS consistent en une seule demande UDP du client suivie d'une seule réponse UDP du serveur. Le protocole TCP (Transmission Control Protocol) est utilisé lorsque la taille des données de réponse dépasse 512 octets, ou pour des tâches telles que les transferts de zone.
Ijaz Ahmad Khan
@IjazKhan, il n'y a plus de distinction de ce genre. Voir RFC 7766 : " Ce document spécifie la nécessité de prendre en charge TCP comme protocole de transport pour les implémentations DNS et fournit des directives vers des performances DNS sur TCP comparables à celles de DNS sur UDP. Ce document obsolète la RFC 5966 et met donc à jour RFC 1035 et RFC 1123. "et" Ce document met donc à jour les spécifications du protocole DNS de base de sorte que la prise en charge de TCP est désormais une partie OBLIGATOIRE d'une mise en œuvre complète du protocole DNS. "
Ron Maupin
6

La page Wikipedia n'est pas la meilleure. L'IANA gère le registre des numéros de port (attention, il s'agit actuellement de 138 pages): Nom du service et registre des numéros de port du protocole de transport

Un protocole de couche d'application est libre d'utiliser n'importe quel protocole de couche de transport et numéro de port. Par convention, la plupart utilisent des numéros de port spécifiques dans le registre, mais cela ne signifie pas qu'ils ne peuvent pas en utiliser d'autres également. Par exemple, un serveur Web utilise par défaut le port TCP 80, mais il peut être configuré pour utiliser n'importe quel autre numéro de port, et un navigateur Web peut toujours l'utiliser s'il reçoit le numéro de port sur l'URI.

Il existe de nombreuses applications qui peuvent être configurées pour utiliser TCP ou UDP, et les numéros de port peuvent être modifiés. Cela offre une certaine flexibilité lors du traitement des conflits et des implémentations étranges.

Ron Maupin
la source
5

Dans la vraie vie, vous constaterez qu'il est très facile de savoir quel protocole de transport est utilisé. Aussi, si vous cherchez une "règle d'or", pensez à ceci:

UDP est un protocole `` sans connexion '' / peu fiable, il ne récupère pas les paquets perdus comme le fait TCP, et a beaucoup moins de surcharge que TCP, il est donc utilisé comme transport pour les applications sensibles au retard (comme le streaming audio / vidéo).

TCP est un protocole «orienté connexion» / fiable, il récupère les paquets lorsqu'ils sont perdus et a une surcharge plus élevée, mais est utilisé là où la perte de paquets entraînerait des problèmes.

Voici un certain nombre de méthodes que vous pouvez utiliser pour déterminer dans la vie réelle le protocole de couche de transport utilisé par une application:

  • Exécutez à netstat -anpartir d'une invite de commandes Windows.
  • Téléchargez et exécutez TCPView (qui répertorie également UDP) pour une vue GUI.
  • Exécutez Wireshark
  • Exécuter nmapsur le serveur avec le port en question (par défaut, analyse uniquement les ports TCP)
crrimson
la source
0

La source de la liste wikipedia semble être principalement https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt avec la ligne occasionnelle mise à jour en fonction des références spécifiques au protocole.

Il semble que pour les allocations plus anciennes, les numéros de port TCP et UDP ont été alloués à un protocole même si le protocole n'utilisait que l'un ou l'autre. Par exemple, FTP a des entrées dans la table IANA pour TCP et UDP. Ces entrées font référence à la fois à la RFC 959, mais la RFC 959 ne mentionne pas l'UDP.

Généralement, la ressource de référence pour découvrir quels protocoles sous-jacents un protocole d'application utilise réellement serait la norme définissant le protocole.

Certains protocoles peuvent utiliser TCP ou UDP soit au choix de l'utilisateur (par exemple NFS) ou en fonction des détails de la demande (par exemple DNS)

Peter Green
la source