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.
A página da Wikipedia não é a melhor. A IANA mantém o registro de números de porta (esteja avisado, atualmente são 138 páginas): Registro de nome de serviço e número de porta do protocolo de transporte
Um protocolo de camada de aplicativo é livre para usar qualquer protocolo de camada de transporte e número de porta. Por convenção, a maioria usa números de porta específicos no registro, mas isso não significa que eles também não possam usar outros. Por exemplo, um servidor da Web usará como padrão a porta 80 da TCP, mas poderá ser configurado para usar qualquer outro número de porta, e um navegador da Web ainda poderá usá-lo se for fornecido o número da porta no URI.
Existem muitos aplicativos que podem ser configurados para usar TCP ou UDP, e os números de porta podem ser alterados. Isso oferece alguma flexibilidade ao lidar com conflitos e implementações estranhas.
fonte
Na vida real, você descobrirá que é muito fácil saber qual protocolo de transporte é usado. Além disso, se você estiver procurando por uma "regra de ouro", pense no seguinte:
O UDP é um protocolo 'sem conexão' / não confiável, não recupera pacotes perdidos como o TCP e tem muito menos sobrecarga que o TCP, portanto, é usado como transporte para aplicativos sensíveis a atrasos (como streaming de áudio / vídeo).
O TCP é um protocolo 'orientado à conexão' / confiável, recupera pacotes quando perdidos e possui maior sobrecarga, mas é usado onde a perda de pacotes causaria problemas.
Aqui estão alguns métodos que você pode usar para determinar na vida real qual protocolo da camada de transporte um aplicativo está usando:
netstat -an
partir de um prompt de comando do Windows.nmap
no servidor com a porta em questão (por padrão, verifica apenas as portas TCP)fonte
A fonte da lista da Wikipedia parece ser primordialmente https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt com a linha ocasional atualizada com base nas referências específicas do protocolo.
Parece que, para alocações mais antigas, os números de porta TCP e UDP foram alocados a um protocolo, mesmo que o protocolo realmente usasse apenas um ou outro. Por exemplo, o FTP tem entradas na tabela IANA para TCP e UDP. Essas entradas referenciam o RFC 959, mas o RFC 959 não menciona o UDP.
Geralmente, o recurso essencial para descobrir quais protocolos subjacentes um protocolo de aplicativo realmente usa seria o padrão que define o protocolo.
Alguns protocolos podem usar TCP ou UDP à escolha do usuário (por exemplo, NFS) ou dependendo dos detalhes da solicitação (por exemplo, DNS)
fonte