Hiciste una buena pregunta. No dejes que nadie te diga lo contrario.
Lamentablemente, no existe una regla general para los tipos de protocolos que usan TCP y los tipos de protocolos que usan UDP.
La decisión de si un protocolo usa uno u otro se reduce a quien escribió / creó el protocolo, para empezar.
Si no quisieron molestarse en escribir su propio sistema de "entrega confiable", entonces simplemente pueden usar TCP que proporciona toda la confiabilidad de forma innata.
Si pensaban (conociendo su propio protocolo de forma innata) que podían escribir un sistema de "entrega confiable" mejor o más apropiado, entonces podrían incorporarlo en el protocolo y simplemente usar UDP como su transporte.
Como ejemplo, eche un vistazo a una captura de muestra UDP TFTP , notará que hay sistemas de reconocimiento incorporados dentro de TFTP en sí mismo; tener esos y los sistemas de reconocimiento adicionales dentro de TCP simplemente serían redundantes.
Mientras que FTP, que se ejecuta sobre TCP, no tiene un sistema de reconocimiento incorporado. Un usuario simplemente solicita un archivo y el remitente lo envía. Hay una notificación de "transferencia de archivo completa", pero nada que garantice haber recibido cada bit del archivo. FTP depende de la confiabilidad de TCP para garantizar que el archivo se transmita completamente.
Dicho esto, miré a través de la lista de puertos en la página wiki que vinculaste y vi una sorprendente cantidad de protocolos que supuestamente usan TCP y UDP. Esto era extraño para mí, y solo sé de muy pocos que usan ambos (es decir, DNS). Pero puede ser que haya una implementación TFTP que use TCP, y si es así, me temo que no estoy expuesto a ella.
El Sistema de nombres de dominio (DNS) es tradicionalmente el protocolo al que se hace referencia cuando se discuten protocolos que usan TCP y UDP. No los usa al mismo tiempo, eso sí. Pero diferentes funciones dentro de DNS pueden requerir TCP vs UDP.
Por ejemplo, cuando se realiza una solicitud simple de resolución de registro A, la "solicitud" y la "respuesta" son muy ligeras, y ambas requieren un único paquete. Como tal, esto generalmente se hace a través de UDP.
Pero si una solicitud o respuesta requiere una transferencia mayor (por encima de una cierta cantidad de bytes), entonces DNS elige usar TCP para garantizar que "todos los bits" lleguen allí. Esto es común con las solicitudes completas de transferencia de zona.
La página de Wikipedia no es la mejor. IANA mantiene el registro para los números de puerto (tenga cuidado, actualmente es de 138 páginas): Nombre del servicio y registro del número de puerto del protocolo de transporte
Un protocolo de capa de aplicación es libre de usar cualquier protocolo de capa de transporte y número de puerto. Por convención, la mayoría usa números de puerto específicos en el registro, pero eso no significa que tampoco puedan usar otros. Por ejemplo, un servidor web usará de manera predeterminada el puerto TCP 80, pero se puede configurar para usar cualquier otro número de puerto, y un navegador web aún puede usarlo si se le da el número de puerto en el URI.
Hay muchas aplicaciones que se pueden configurar para usar TCP o UDP, y los números de puerto se pueden cambiar. Esto ofrece cierta flexibilidad cuando se trata de conflictos e implementaciones extrañas.
fuente
En la vida real, encontrará que es muy fácil saber qué protocolo de transporte se utiliza. Además, si está buscando una "regla de oro", piense en esto:
UDP es un protocolo 'sin conexión' / poco confiable, no recupera paquetes perdidos como lo hace TCP, y tiene mucho menos sobrecarga que TCP, por lo que se usa como transporte para aplicaciones que son sensibles al retraso (como la transmisión de audio / video).
TCP es un protocolo 'orientado a la conexión' / confiable, recupera paquetes cuando se pierden y tiene una sobrecarga mayor, pero se usa donde la pérdida de paquetes podría causar problemas.
Aquí hay una serie de métodos que puede usar para determinar en la vida real qué protocolo de capa de transporte está usando una aplicación:
netstat -an
desde un símbolo del sistema de Windows.nmap
en el servidor con el puerto en cuestión (de forma predeterminada solo escanea los puertos TCP)fuente
La fuente de la lista de Wikipedia parece ser principalmente https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt con la línea ocasional actualizada basada en referencias específicas del protocolo.
Parece que para las asignaciones anteriores, los números de puerto TCP y UDP se asignaron a un protocolo, incluso si el protocolo solo usaba uno u otro. Por ejemplo, FTP tiene entradas en la tabla IANA para TCP y UDP. Estas entradas hacen referencia a RFC 959 pero RFC 959 no menciona a UDP.
En general, el recurso de referencia para descubrir qué protocolos subyacentes utiliza realmente un protocolo de aplicación sería el estándar que define el protocolo.
Algunos protocolos pueden usar TCP o UDP a elección del usuario (por ejemplo, NFS) o según los detalles de la solicitud (por ejemplo, DNS)
fuente