Os soquetes TCP e UDP podem usar a mesma porta?

104

Em primeiro lugar, há algum problema em usar UDP e TCP no mesmo servidor?

Em segundo lugar, posso usar o mesmo número de porta?

user800799
fonte

Respostas:

110

Sim, você pode usar o mesmo número de porta para TCP e UDP. Muitos protocolos já fazem isso, por exemplo, o DNS funciona em udp / 53 e tcp / 53.

Tecnicamente, os pools de portas para cada protocolo são completamente independentes, mas para protocolos de nível mais alto que podem usar TCP ou UDP, é convenção que eles tenham o mesmo número de porta por padrão .

Ao escrever seu servidor, tenha em mente que a seqüência de eventos para um socket TCP é muito mais difícil do que para um socket UDP, pois além do normal sockete das bindchamadas você também tem que listene accept.

Além disso, essa acceptchamada retornará um novo soquete e é esse soquete que você terá que pesquisar também para receber eventos. Seu servidor deve estar preparado para continuar acceptas conexões no soquete original e, ao mesmo tempo, atender a vários clientes, cada um dos quais acionará eventos de recebimento em seus próprios soquetes.

Alnitak
fonte
2
@Eric Fortis RFC 1700 está cheio de exemplos, não vamos listá-los todos, certo? ;-)
Marquês de Lorne
2
@Eric Fortist, por que exatamente 'todo mundo deveria saber sobre' os números das portas NetBIOS?
Marquês de Lorne
4
Por favor, poste como uma pergunta para que você possa me responder
Eric Fortis
6
Algo que esta resposta não explica: a semântica de 'porta' é específica para cada protocolo (mas alguns podem não ter essa semântica) do nível de transporte (modelo OSI nível 4). Portanto, o TCP tem suas próprias portas, que são interpretadas pela pilha TCP; O UDP tem suas próprias portas, que são interpretadas pela pilha UDP. Portanto, as portas não são compartilhadas entre UDP e TCP; acontece que ambos os protocolos têm a mesma definição de "portas" e que para simplificar, usamos o mesmo valor de porta para várias conexões de diferentes tipos ao mesmo serviço.
moala
2
@EricFortis Porque tal questão seria de zero interesse para mim ou qualquer outra pessoa, assim como suas razões para considerá-la interessante, e idem para suas objeções a citar a única RFC que está aqui precisamente para o propósito que estamos discutindo.
Marquês de Lorne
8

Em primeiro lugar, não há problema em usar tcp e udp no servidor.

Em segundo lugar, podemos ter solicitações UDP e TCP na mesma porta, pois cada solicitação é identificada por um quíntuplo contido por IP de origem, IP de destino, Porta de origem, Porta de destino, PROTOCOLO (como protocolo pode ser TCP ou UDP).

aMooly
fonte
3
A razão que você afirma é frequentemente fornecida, mas na verdade não tem sentido. Não existe uma conexão UDP e nenhum contexto no qual as conexões são consideradas, independentemente do protocolo associado. O fato é que as portas são artefatos do TCP e do UDP separadamente e, portanto, não há possibilidade de confundi-los.
Marquês de Lorne
Obrigado por apontar minha falha. É certo que não há conexão usando UDP.
aMooly 01 de