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.