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?

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.


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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.