Les sockets TCP et UDP peuvent-ils utiliser le même port?

104

Tout d'abord, y a-t-il un problème avec l'utilisation à la fois d'UDP et de TCP sur le même serveur?

Deuxièmement, puis-je utiliser le même numéro de port?

user800799
la source

Réponses:

110

Oui, vous pouvez utiliser le même numéro de port pour TCP et UDP. De nombreux protocoles le font déjà, par exemple DNS fonctionne sur udp / 53 et tcp / 53.

Techniquement, les pools de ports pour chaque protocole sont complètement indépendants, mais pour les protocoles de niveau supérieur qui peuvent utiliser TCP ou UDP, il est conventionnel qu'ils utilisent par défaut le même numéro de port .

Lors de l'écriture de votre serveur, gardez à l'esprit que la séquence d'événements pour une socket TCP est beaucoup plus difficile que pour une socket UDP, car en plus des appels normaux socketet des bindappels, vous devez également listenet accept.

De plus, cet acceptappel renverra une nouvelle socket et c'est cette socket que vous devrez ensuite interroger également pour recevoir des événements. Votre serveur doit être prêt à continuer acceptles connexions sur le socket d'origine tout en desservant simultanément plusieurs clients dont chacun déclenchera des événements de réception sur ses propres sockets.

Alnitak
la source
2
@Eric Fortis RFC 1700 regorge d'exemples, ne les listons pas tous, d'accord? ;-)
Marquis of Lorne
2
@Eric Fortist pourquoi exactement «tout le monde devrait-il connaître» les numéros de port NetBIOS?
Marquis of Lorne
4
S'il vous plaît postez-le comme une question afin que vous puissiez m'accorder la réponse
Eric Fortis
6
Quelque chose que cette réponse n'explique pas: la sémantique «port» est spécifique à chaque protocole (mais certains peuvent ne pas avoir cette sémantique) du niveau de transport (modèle OSI niveau 4). TCP a donc ses propres ports, qui sont interprétés par la pile TCP; UDP a ses propres ports, qui sont interprétés par la pile UDP. Ainsi, les ports ne sont pas partagés entre UDP et TCP; il se trouve juste que les deux protocoles ont la même définition de «ports» et que pour simplifier, nous utilisons la même valeur de port pour plusieurs connexions de types différents au même service.
moala
2
@EricFortis Parce qu'une telle question ne m'intéresserait ni moi ni personne d'autre, tout comme vos raisons de la considérer comme intéressante, et même vos objections à citer la seule RFC qui est ici précisément dans le but dont nous discutons.
Marquis of Lorne
8

Premièrement, il n'y a aucun problème à utiliser à la fois tcp et udp sur le serveur.

Deuxièmement, nous pouvons avoir à la fois des requêtes UDP et TCP sur le même port, car chaque requête est identifiée par un quintuple contenu par IP source, IP de destination, port source, port de destination, PROTOCOLE (car le protocole peut être TCP ou UDP).

aMooly
la source
3
La raison pour laquelle vous dites est souvent donnée, mais elle n'a vraiment aucun sens. Il n'y a pas de connexion UDP, ni de contexte dans lequel les connexions sont prises en compte quel que soit le protocole associé. Le fait est que les ports sont des artefacts de TCP et UDP séparément, et il n'y a donc aucune possibilité de jamais les confondre.
Marquis of Lorne
Merci d'avoir signalé ma faute, c'est vrai qu'il n'y a pas de connexion avec UDP.
aMooly