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
le inet_csk_get_port()
:
/* Obtain a reference to a local port for the given sock,
* if snum is zero it means select any available local 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:
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = 0;
inet_aton("127.0.0.1", &addr.sin_addr);
if (connect(fd, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
fprintf(stderr,"%s", strerror(errno));
}
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 à:
Où est-ce traité dans le système? Dans la pile TCP du noyau OS?
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.