Ouvir a porta TCP 0 me aloca um número de porta livre no sistema.
Mas o que acontece quando tento conectar-me à porta TCP 0? A resposta óbvia é: "Não funciona":
$ nc localhost 0
nc: port number too small: 0
Onde isso é tratado no sistema? Na pilha TCP do kernel do SO? Existem Unixes em que a conexão à porta TCP 0 funcionaria?
networking
tcp
nh2
fonte
fonte
Respostas:
Apenas para garantir que estamos na mesma página (sua pergunta é ambígua dessa maneira), pedir para ligar o TCP na porta 0 indica uma solicitação para gerar dinamicamente um número de porta não utilizado. Em outras palavras, o número da porta na qual você está ouvindo após a solicitação não é zero. Há um comentário sobre isso em
[linux kernel source]/net/ipv4/inet_connection_sock.c
eminet_csk_get_port()
:Qual é uma convenção unix padrão. Pode haver sistemas que realmente permitam o uso da porta 0, mas isso seria considerado uma má prática. Esse comportamento não é especificado oficialmente pelo POSIX, IANA ou pelo protocolo TCP, no entanto. 1 Você pode achar isso interessante .
É por isso que você não pode estabelecer uma conexão TCP sensata com a porta zero. Presumivelmente, você
nc
está ciente disso e informa que você está fazendo uma solicitação não sensorial. Se você tentar isso no código nativo:Você recebe o mesmo erro que tentaria conectar a qualquer outra porta indisponível:,
ECONNREFUSED
"Conexão recusada". Então, em resposta a:Provavelmente não; não requer tratamento especial. Ou seja, se você puder encontrar um sistema que permita a ligação e a escuta na porta 0, presumivelmente poderá se conectar a ele.
1. Mas a IANA se refere a ela como "Reservada" ( veja aqui ). Ou seja, essa porta não deve ser usada online. Isso o torna aceitável em relação à convenção de atribuição dinâmica (já que ela não será realmente usada). Estipular que especificamente como um objetivo provavelmente estaria além do escopo da IANA; Em essência, os sistemas operacionais são livres para fazer o que quiserem, incluindo nada.
fonte
INADDR_ANY
, que é o que Richard está se referindo (o sistema o substituirá por um padrão). Mas, na verdade, usar o endereço em uma rede parece ter as implicações que Andrea menciona (exceto que não tão claro que seja considerado "transmissão"): en.wikipedia.org/wiki/0.0.0.0O uso da porta 0 aciona o sistema operacional para procurar e alocar a próxima porta disponível. Isso evita que você precise codificar permanentemente uma porta específica ou procurar uma porta disponível. Meu sistema Linux Mint retorna
para
fonte
nc -l 0
solicitará que o sistema operacional escute na porta 0. Mas, como foi observado acima, a maioria dos sistemas operacionais verá o 0 e invocará seus costumes específicos para escolher uma porta de número positivo para o seu aplicativo, portanto,nc
acabará escutando em uma porta como 56514.fonte