L'écoute du port TCP 0 me donne un numéro de port libre sur le système.
Mais que se passe-t-il lorsque j'essaie de me connecter au port TCP 0? La réponse évidente est: "ça ne marche pas":
$ nc localhost 0
nc: port number too small: 0
Où est-ce traité dans le système? Dans la pile TCP du noyau OS? Existe-t-il des systèmes Unix pour lesquels la connexion au port TCP 0 fonctionnerait?
networking
tcp
nh2
la source
la source
Réponses:
Juste pour nous assurer que nous sommes sur la même page (votre question est ainsi ambiguë), demander de lier TCP sur le port 0 indique une demande pour générer de manière dynamique un numéro de port inutilisé. En d'autres termes, le numéro de port sur lequel vous écoutez réellement après cette demande n'est pas zéro. Il y a un commentaire à ce sujet dans
[linux kernel source]/net/ipv4/inet_connection_sock.c
leinet_csk_get_port()
:Ce qui est une convention standard Unix. Il pourrait y avoir des systèmes permettant l'utilisation du port 0, mais cela serait considéré comme une mauvaise pratique. Ce comportement n'est toutefois pas officiellement spécifié par les protocoles POSIX, IANA ou TCP. 1 Vous pouvez trouver cela intéressant .
C'est pourquoi vous ne pouvez pas établir une connexion TCP avec le port zéro.
nc
Je suis probablement au courant de cela et vous informe que vous faites une demande non sensuelle. Si vous essayez ceci en code natif:Vous obtenez la même erreur que si vous essayiez de vous connecter à un autre port non disponible:
ECONNREFUSED
"Connexion refusée". Donc en réponse à:Probablement pas; il ne nécessite pas de traitement spécial. Par exemple, si vous pouvez trouver un système permettant la liaison et l'écoute sur le port 0, vous pouvez probablement vous y connecter.
1. Mais IANA ne se réfère à elle comme « réservé » ( voir ici ). Sens, ce port ne doit pas être utilisé en ligne. Cela convient à la convention d’affectation dynamique (car elle ne sera pas utilisée). Définir cela spécifiquement comme un objectif irait probablement au-delà de la portée de l'IANA; Essentiellement, les systèmes d'exploitation sont libres de faire ce qu'ils veulent, y compris rien.
la source
INADDR_ANY
, ce à quoi richard fait référence (le système le remplacera par un défaut). Mais, en réalité, utiliser les adresses sur un réseau semble avoir les implications mentionnées par Andrea (sauf si elle est considérée comme une "émission"): en.wikipedia.org/wiki/0.0.0.0L'utilisation du port 0 déclenche le système d'exploitation pour rechercher et allouer le prochain port disponible. Cela vous évite d'avoir à coder en dur un port spécifique ou à rechercher un port disponible. Le retour de mon système Linux Mint
à
la source
nc -l 0
demandera à l'OS d'écouter sur le port 0. Mais comme cela a été mentionné ci-dessus, la plupart des systèmes d'exploitation verront le 0 et invoqueront leurs coutumes particulières pour choisir un port à numéro positif pour votre applicationnc
.la source