Qual é a diferença entre TCP e UDP?
Eu sei que o TCP é usado no caso de aplicativos que não são críticos em termos de tempo e o UDP é usado para jogos ou aplicativos que requerem transmissão rápida de dados. Eu sei que o TCP é usado para HTTP, HTTPs, FTP, SMTP e Telnet. Eu sei que o UDP é usado para DNS e DHCP.
Mas por que? Quais características do TCP e UDP o tornam útil para seus respectivos casos de uso?
tcp
network-programming
udp
protocols
user749414
fonte
fonte
Respostas:
TCP
é um fluxo orientado à conexão em uma rede IP. Garante que todos os pacotes enviados chegarão ao destino na ordem correta. Isso implica o uso de pacotes de confirmação enviados de volta ao remetente e retransmissão automática, causando atrasos adicionais e uma transmissão geral menos eficiente do queUDP
.UDP
é um protocolo sem conexão. A comunicação é orientada a datagramas . A integridade é garantida apenas no datagrama único. Os datagramas chegam ao destino e podem chegar fora de ordem ou não chegarem. É mais eficiente do queTCP
porque usa não ACK . Geralmente é usado para comunicação em tempo real, onde uma pequena porcentagem da taxa de perda de pacotes é preferível à sobrecarga de umaTCP
conexão.Em certas situações,
UDP
é usado porque permite a transmissão de pacotes de transmissão. Às vezes, isso é fundamental em casos comoDHCP
protocolo, porque a máquina cliente ainda não recebeu umIP
endereço (esse é oDHCP
objetivo do protocolo de negociação) e não haverá maneira de estabelecer umTCP
fluxo sem oIP
próprio endereço.fonte
Do artigo Skullbox:
1) O TCP é orientado à conexão e confiável, onde, como UDP, a conexão é menos e não é confiável.2) O TCP precisa de mais processamento no nível da interface de rede, como no UDP, não é.
3) O TCP usa, handshake de 3 vias, controle de congestionamento, controle de fluxo e outro mecanismo para garantir a transmissão confiável.
4) O UDP é usado principalmente nos casos em que o atraso de pacotes é mais sério que a perda de pacotes.
fonte
is the most commonly used protocol on the Internet
afirmação seja discutível e realmente dependa de como você definemost commonly used
,protocol
ethe Internet
. Por exemplo, o Protocolo da Internet é um candidato mais provável a essa coroa em particular.Pense no TCP como uma coleta / entrega programada dedicada de UPS / FedEx entre dois locais, enquanto UDP é o equivalente a jogar um cartão postal em uma caixa de correio.
A UPS / FedEx fará o possível para garantir que o pacote que você envia por correio chegue lá e chegue a tempo. Com o cartão postal, você tem sorte se ele chegar e pode chegar fora de serviço ou atrasado (quantas vezes você recebeu um cartão postal de alguém DEPOIS que ele chegou em casa após as férias?)
O TCP é o mais próximo possível de um protocolo de entrega garantida, enquanto o UDP é apenas o "melhor esforço".
fonte
Razões pelas quais o UDP é usado para DNS e DHCP:
DNS - TCP requer mais recursos do servidor (que escuta conexões) do que do cliente. Em particular, quando a conexão TCP é fechada, o servidor precisa lembrar os detalhes da conexão (mantendo-os na memória) por dois minutos, durante um estado conhecido como TIME_WAIT_2. Esse é um recurso que defende contra pacotes repetidos erroneamente de uma conexão anterior que está sendo interpretada como parte de uma conexão atual. Manter TIME_WAIT_2 usa memória kernel no servidor. As solicitações de DNS são pequenas e chegam frequentemente de muitos clientes diferentes. Esse padrão de uso agrava a carga no servidor em comparação com os clientes. Acreditava-se que o uso do UDP, que não possui conexões nem estado para manter no cliente ou no servidor, melhoraria esse problema.
DHCP - DHCP é uma extensão do BOOTP. O BOOTP é um protocolo que os computadores clientes usam para obter informações de configuração de um servidor, enquanto o cliente está inicializando. Para localizar o servidor, é enviada uma transmissão solicitando servidores BOOTP (ou DHCP). As transmissões só podem ser enviadas através de um protocolo sem conexão, como UDP. Portanto, o BOOTP exigia pelo menos um pacote UDP para a difusão na localização do servidor. Além disso, como o BOOTP está sendo executado enquanto o cliente é inicializado ... e esse é um período em que o cliente pode não ter toda a pilha TCP / IP carregada e em execução, o UDP pode ser o único protocolo que o cliente está pronto para manipular naquele momento. Tempo. Finalmente, alguns clientes DHCP / BOOTP possuem apenas UDP a bordo. Por exemplo, alguns termostatos IP implementam apenas UDP.
Como outros já mencionaram, o UDP também é útil para streaming de mídia, especialmente áudio. As conversas soam melhor com o atraso da rede se você simplesmente soltar os pacotes atrasados. Você pode fazer isso com o UDP, mas, com o TCP, tudo o que você obtém durante o atraso é uma pausa, seguido pelo áudio que sempre será atrasado pelo tempo que já parou. Para conversas telefônicas bidirecionais, isso é inaceitável.
fonte
Uma das diferenças está em suma
UDP : envie mensagem e não olhe para trás se chegar ao destino, protocolo sem conexão
TCP : envie mensagem e garantia para chegar ao destino, protocolo orientado a conexão
fonte
O TCP estabelece uma conexão antes da transmissão de dados real, o UDP não. Dessa maneira, o UDP pode fornecer uma entrega mais rápida. Aplicativos como DNS, acesso ao servidor de horário, portanto, usam UDP.
Ao contrário do UDP, o TCP usa controle de congestionamento. Ele responde à carga da rede. Ao contrário do UDP, ele diminui quando o congestionamento da rede é iminente. Portanto, aplicativos como multimídia, preferindo taxa de transferência constante, podem ser usados pelo UDP.
Além disso, o UDP não é confiável, não reage às perdas de pacotes. Portanto, aplicativos sensíveis à perda, como a transmissão multimídia, preferem o UDP. No entanto, o TCP é um protocolo confiável, portanto, aplicativos que exigem confiabilidade, como transferência da Web, email, download de arquivo, preferem o TCP.
Além disso, na Internet de hoje, o UDP não é tão acolhedor quanto o TCP devido às caixas intermediárias. Alguns aplicativos como o skype caem para o TCP quando se supõe que a conexão UDP esteja bloqueada.
fonte
A lei das abstrações com vazamento de Joel Spolsky
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
fonte
Diferenças curtas e simples entre o protocolo Tcp e Udp:
1) Tcp - Protocolo de controle de transmissão e Udp - Protocolo de datagrama do usuário.
2) Tcp é um protocolo confiável, onde Udp é um protocolo não confiável.
3) Tcp é um fluxo orientado, enquanto Udp é um protocolo orientado a mensagens.
4) Tcp é mais lento que Udp.
fonte
Execute este tópico e deixe-me tentar expressá-lo dessa maneira.
TCP
Aperto de mão de 3 vias
Bob: Hey Amy, eu gostaria de lhe contar um segredo
Amy: OK, vá em frente, eu estou pronto
Bob: OK
Comunicação
Bob: 'I', esta é a primeira carta
Amy: Primeira carta recebida, envie-me a segunda carta
Bob: '', esta é a segunda carta
Amy: Segunda carta recebida, envie-me a terceira carta
Bob: 'L ', esta é a terceira letra
Depois de um tempo
Bob: ' L ', esta a terceira letra
Amy: Terceira carta recebida, envie-me a quarta letra
Bob: ' O ', esta a quarta carta
Amy: ...
... ...
Aperto de mão de quatro direções
Bob: Meu segredo está exposto, agora, você conhece meu coração.
Amy: OK. Não tenho nada a dizer.
Bob: OK.
UDP
Bob: EU AMO U
Amy recebeu: OVI LE
O TCP é mais confiável que o UDP, com a ordem uniforme de mensagens garantida, não há dúvida de que o UDP é mais leve e eficiente.
fonte
Explicação Simples por Analogia
TCP é assim.
Imagine que você tenha um amigo por correspondência em Marte (nós nos comunicamos com cartas escritas nos bons e velhos dias anteriores à Internet).
Você precisa enviar ao seu amigo os sete hábitos de pessoas altamente eficazes. Então você decide enviá-lo em sete letras separadas:
etc.
carta 7 - Afie a serra
Requisitos:
Você quer ter certeza de que o seu pen pen recebe todas as suas cartas - em ordem e que elas cheguem perfeitamente . Se o seu pagamento por caneta recebe a letra 7 antes da letra 1 - isso não é bom. se o seu colega de caneta recebe todas as letras, exceto a letra 3 - isso também não é bom.
Veja como garantimos que nossos requisitos sejam atendidos:
fonte
TLDR;
Antes de começarmos, lembre-se de que todas as desvantagens de algo são uma continuação de suas vantagens . Existe apenas uma ferramenta certa para um trabalho, sem panacéia. O TCP / UDP coexiste há décadas e por um motivo.
TCP
Ele foi projetado para ser extremamente confiável e faz seu trabalho muito bem. É tão complexo porque realiza uma tarefa difícil: provar um transporte confiável através do protocolo IP não confiável.
Como toda a lógica complexa do TCP está encapsulada na pilha de rede, você fica livre de muitas tarefas trabalhosas e propensas a erros de baixo nível na camada de aplicação.
Ao enviar dados pelo TCP, você grava um fluxo de bytes no soquete no remetente, onde são divididos em pacotes, transmitidos pela pilha e enviados pelo fio. No lado do receptor, os pacotes são remontados novamente em um fluxo contínuo de bytes.
Manter essa bela abstração tem um custo em termos de complexidade e desempenho. Se o 1º pacote do fluxo de bytes for perdido, o receptor atrasará o processamento dos pacotes subsequentes, mesmo aqueles que já chegaram.
Além disso, para ser confiável, o TCP implementa isso:
Tudo isso é agravado em redes sem fio lentas e não confiáveis, enquanto o TCP foi projetado para redes com fio em que os atrasos são previsíveis e a perda de pacotes não é tão comum. Além disso, como muitas pessoas já mencionaram, para algumas coisas o TCP simplesmente não funciona (DHCP). No entanto, quando relevante, o TCP ainda funciona excepcionalmente bem.
Usando uma analogia de email, uma sessão TCP é semelhante a contar uma história à sua secretária, que a divide em emails e envia um serviço de email ruim para um editor. Por outro lado, outra secretária reúne e-mails em um único pedaço de texto. Alguns e-mails são perdidos, outros são corrompidos; portanto, é necessário um procedimento muito complexo para uma entrega confiável, e sua história de 10 páginas pode levar muito tempo para chegar ao editor.
UDP
O UDP, por outro lado, é orientado a mensagens; portanto, um receptor grava uma mensagem (pacote) no soquete e depois é transmitido para um receptor como está, sem nenhuma divisão / montagem.
Comparado ao TCP, sua especificação é muito simples. Basicamente, tudo o que você faz é adicionar uma soma de verificação ao pacote para que um receptor possa detectar sua corrupção. Todo o resto deve ser implementado por você, um desenvolvedor de software. Agora leia a volumosa especificação de TCP e tente reimplementar algumas partes dela.
Algumas pessoas seguiram esse caminho e obtiveram resultados muito decentes, a ponto de o HTTP / 3 usar QUIC - um protocolo baseado em UDP. No entanto, isso é mais uma exceção. Aplicativos comuns do UDP são aplicativos de streaming e conferência de áudio / vídeo como Skype, Zoom ou Google Hangout, onde perder pacotes não é tão importante em comparação com um atraso introduzido pelo TCP.
fonte