¿Pueden los sockets TCP y UDP usar el mismo puerto?

104

En primer lugar, ¿hay algún problema con el uso de UDP y TCP en el mismo servidor?

En segundo lugar, ¿puedo usar el mismo número de puerto?

usuario800799
fuente

Respuestas:

110

Sí, puede usar el mismo número de puerto para TCP y UDP. Muchos protocolos ya hacen esto, por ejemplo, DNS funciona en udp / 53 y tcp / 53.

Técnicamente, los grupos de puertos para cada protocolo son completamente independientes, pero para los protocolos de nivel superior que pueden usar TCP o UDP, es una convención que usen el mismo número de puerto por defecto .

A la hora de escribir tu servidor, ten en cuenta que la secuencia de eventos para un socket TCP es mucho más difícil que para un socket UDP, ya que además de las llamadas normales sockety bindtambién tienes que listeny accept.

Además, esa acceptllamada devolverá un nuevo socket y es ese socket el que tendrá que sondear también para recibir eventos. Su servidor debe estar preparado para continuar acceptcon las conexiones en el socket original mientras atiende simultáneamente a varios clientes, cada uno de los cuales activará eventos de recepción en sus propios sockets.

Alnitak
fuente
2
@Eric Fortis RFC 1700 está lleno de ejemplos, no los enumeremos todos, ¿de acuerdo? ;-)
Marqués de Lorne
2
@Eric Fortist ¿por qué exactamente 'todo el mundo debería conocer' los números de puerto NetBIOS?
Marqués de Lorne
4
Publíquelo como una pregunta para que pueda darme la respuesta
Eric Fortis
6
Algo que esta respuesta no explica: la semántica del 'puerto' es específica para cada protocolo (pero algunos podrían no tener esta semántica) del nivel de transporte (modelo OSI nivel 4). Por tanto, TCP tiene sus propios puertos, que son interpretados por la pila TCP; UDP tiene sus propios puertos, que son interpretados por la pila UDP. Por así decirlo, los puertos no se comparten entre UDP y TCP; simplemente sucede que ambos protocolos tienen la misma definición de "puertos" y que para simplificar, usamos el mismo valor de puerto para múltiples conexiones de diferentes tipos al mismo servicio.
moala
2
@EricFortis Debido a esta pregunta sería de cero interés para mí o cualquier otra persona, al igual que sus razones para considerar que interesante, y lo mismo sus objeciones a citar el uno RFC que es aquí precisamente para el propósito que nos ocupa.
Marqués de Lorne
8

En primer lugar, no hay ningún problema al utilizar tcp y udp en el servidor.

En segundo lugar, podemos tener solicitudes tanto UDP como TCP en el mismo puerto, porque cada solicitud es identificada por un quintuplo contenido por IP de origen, IP de destino, Puerto de origen, Puerto de destino, PROTOCOLO (ya que el protocolo puede ser TCP o UDP).

aMooly
fuente
3
La razón que usted dice se da a menudo, pero en realidad no tiene sentido. No existe una conexión UDP ni un contexto en el que se consideren las conexiones independientemente del protocolo asociado. El hecho es que los puertos son artefactos de TCP y UDP por separado y, por lo tanto, no hay posibilidad de confundirlos.
Marqués de Lorne
Gracias por señalar mi culpa, es cierto que no hay conexión usando UDP.
aMooly