Você fez uma boa pergunta. Não deixe ninguém lhe dizer o contrário.
Lamentavelmente, não existe uma regra de ouro para os tipos de protocolos que usam TCP versus os tipos de protocolos que usam UDP.
A decisão sobre se um protocolo usa um ou outro se resume a quem escreveu / criou o protocolo, para começar.
Se eles não quiseram se preocupar em escrever seu próprio sistema de "entrega confiável", eles podem simplesmente usar o TCP, que fornece toda a confiabilidade de forma inata.
Se eles pensassem (conhecendo seu próprio protocolo por dentro) que poderiam escrever um sistema de "entrega confiável" melhor ou mais apropriado, eles poderiam incorporá-lo no próprio protocolo e simplesmente usar o UDP como transporte.
Como um exemplo, dê uma olhada em uma captura de amostra UDP TFTP , você notará que existem sistemas de reconhecimento internos no próprio TFTP - ter esses e os sistemas adicionais de reconhecimento dentro do TCP seria simplesmente redundante.
Enquanto o FTP, executado em TCP, não possui um sistema de reconhecimento interno. Um usuário simplesmente solicita um arquivo e o remetente o envia. Há uma notificação "transferência de arquivo concluída", mas nada que garante ter recebido cada bit do arquivo. O FTP confia na confiabilidade do TCP para garantir que o arquivo chegue até o fim.
Dito isso, examinei a lista de portas na página wiki que você vinculou e vi uma quantidade surpreendente de protocolos que supostamente usam TCP e UDP. Isso era estranho para mim e eu sei apenas de poucos que usam os dois (a saber, DNS). Mas pode ser que exista uma implementação TFTP que use TCP e, nesse caso, receio não ter nenhuma exposição a ela.
O DNS (Sistema de Nomes de Domínio) é tradicionalmente o protocolo mencionado ao discutir protocolos que usam TCP e UDP. Ele não as usa ao mesmo tempo, lembre-se. Porém, funções diferentes no DNS podem exigir TCP vs UDP.
Por exemplo, ao fazer uma solicitação simples de resolução de registro A, a "solicitação" e a "resposta" são muito leves, ambas exigindo um único pacote. Como tal, isso geralmente é feito em UDP.
Mas se uma solicitação ou resposta exigir uma transferência maior (acima de uma certa quantidade de bytes), o DNS escolherá usar o TCP para garantir que "todos os bits" cheguem lá. Isso é comum em solicitações de transferência de zona completas.