Como saber se um protocolo usa TCP ou UDP

9

Bem, eu sei que isso pode soar uma pergunta estúpida e acredito que a resposta mais adequada será como poderei contar à medida que minha experiência for aumentando e eu aprendo cada vez mais sobre os protocolos.

No entanto, sou estudante e não tenho muita experiência prática no campo. Embora eu possa pesquisar no Google por qualquer protocolo, quero saber se existe alguma regra de ouro. Ainda sinto que pedir "regra de ouro" é estúpido, mas ainda estou procurando por uma.

Encontrei esta lista na wikipedia, que lista os protocolos e se eles usam TCP ou UDP no formato tabular. No entanto, não consigo entender o que significa quando a linha de um protocolo específico contém TCP e UDP com número de porta único. Por exemplo, na linha Telnet, possui 23-TCP-UDP. O que isto significa? O Telnet pode operar nas portas TCP 23 e UDP 23?

Também descobri que, no meu livro, ele diz que TFTP usa UDP, mas se olharmos na tabela acima, a linha TFTP é 69-TCP-UDP. Então, adivinhe o que está acontecendo na tabela acima.

Maha
fonte

Respostas:

9

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.

Eddie
fonte
2
Sim, + 1, as consultas DNS consistem em uma única solicitação UDP do cliente, seguida por uma única resposta UDP do servidor. O Protocolo de controle de transmissão (TCP) é usado quando o tamanho dos dados de resposta excede 512 bytes ou para tarefas como transferências de zona.
Ijaz Ahmad Khan
@IjazKhan, não existe mais essa distinção. Veja RFC 7766 : " Este documento especifica o requisito de suporte ao TCP como um protocolo de transporte para implementações de DNS e fornece diretrizes para o desempenho de DNS sobre TCP em pé de igualdade com o de DNS sobre UDP. Este documento obsoleta a RFC 5966 e, portanto, atualiza RFC 1035 e RFC 1123. "e" Portanto, este documento atualiza as principais especificações do protocolo DNS, de modo que o suporte ao TCP passa a ser uma parte NECESSÁRIA de uma implementação completa do protocolo DNS. "
Ron Maupin
6

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.

Ron Maupin
fonte
5

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:

  • Execute a netstat -anpartir de um prompt de comando do Windows.
  • Baixe e execute o TCPView (que também lista o UDP) para uma visualização da GUI.
  • Execute o Wireshark
  • Executar nmapno servidor com a porta em questão (por padrão, verifica apenas as portas TCP)
carmesim
fonte
0

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)

Peter Green
fonte