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.
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.
la source
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:
netstat -an
partir d'une invite de commandes Windows.nmap
sur le serveur avec le port en question (par défaut, analyse uniquement les ports TCP)la source
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)
la source