Diferença entre TCP e UDP?

144

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?

user749414
fonte
13
E este ( skullbox.net/tcpudp.php ) - que foi o primeiro hit do Google - não foi suficientemente claro? O que era confuso nisso? Talvez isso seja melhor? tcpipguide.com/free/…
S.Lott 11/11
1
Estou realmente curioso para saber por que essa pergunta recebeu (no momento da redação) 3 votos positivos. A primeira frase nem faz sentido e há muito material disponível sobre esse tópico, se alguém procurar.
Matth
21
@ Math: 1) É uma boa pergunta, se bastante ampla e uma duplicata já bem respondida. 2) Você tinha reputação mais do que suficiente para corrigir o erro de digitação na primeira frase. 3) É irrelevante que informações sobre isso existam em outros lugares. O Stack Overflow visa se tornar um repositório de conhecimento e responde a perguntas canonicamente aqui .
Ire_and_curses
2
Interessante que quase ninguém mencione que o DHCP usa transmissão, mas todo mundo pensa que 'a resposta' é sobre garantia de entrega e retransmissão.
Heath Hunnicutt
1
Para qualquer outra pessoa que estiver lendo isso no futuro, o site Skullbox mencionado acima possui o MALWARE de acordo com o Google (ele me interrompeu quando eu clico nele). Eu aconselharia não ir para lá.
precisa saber é o seguinte

Respostas:

119

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 que UDP.

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 que TCPporque 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 uma TCPconexão.

Em certas situações, UDPé usado porque permite a transmissão de pacotes de transmissão. Às vezes, isso é fundamental em casos como DHCPprotocolo, porque a máquina cliente ainda não recebeu um IPendereço (esse é o DHCPobjetivo do protocolo de negociação) e não haverá maneira de estabelecer um TCPfluxo sem o IPpróprio endereço.

Heisenbug
fonte
5
Um exemplo em que o UDP é usado é na transmissão de vídeo e áudio, onde perder alguns pacotes aqui e ali geralmente não importa tanto (a cor de um quadro pode estar desativada ou um pequeno nanossegundo de áudio pode ser cortado ou alterado - não é realmente perceptível para os seres humanos). Obviamente, se sua conexão for realmente ruim, você poderá perder tantos pacotes que o vídeo parecer embaçado / pixelizado e o áudio ficará confuso e entrará e sairá muito.
Niko Bellic
53

Do artigo Skullbox:

TCP (Transmission Control Protocol) é o protocolo mais usado na Internet. A razão para isso é porque o TCP oferece correção de erros. Quando o protocolo TCP é usado, há uma "entrega garantida". Isso se deve em grande parte a um método chamado "controle de fluxo". O controle de fluxo determina quando os dados precisam ser reenviados e interrompe o fluxo de dados até que os pacotes anteriores sejam transferidos com êxito. Isso funciona porque se um pacote de dados for enviado, poderá ocorrer uma colisão. Quando isso acontece, o cliente solicita novamente o pacote do servidor até que todo o pacote esteja completo e seja idêntico ao original.

O UDP (User Datagram Protocol) é outro protocolo comumente usado na Internet. No entanto, o UDP nunca é usado para enviar dados importantes, como páginas da web, informações de banco de dados, etc; O UDP é comumente usado para transmitir áudio e vídeo. Mídia de streaming como arquivos de áudio do Windows Media (.WMA), Real Player (.RM) e outros usam o UDP porque oferece velocidade! O motivo pelo qual o UDP é mais rápido que o TCP é porque não há forma de controle de fluxo ou correção de erros. Os dados enviados pela Internet são afetados por colisões e erros estarão presentes. Lembre-se de que o UDP está preocupado apenas com velocidade. Essa é a principal razão pela qual o streaming de mídia não é de alta qualidade.

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.

p27
fonte
1
+1 Resumo razoavelmente bom. Embora a is the most commonly used protocol on the Internetafirmação seja discutível e realmente dependa de como você define most commonly used, protocole the Internet. Por exemplo, o Protocolo da Internet é um candidato mais provável a essa coroa em particular.
MattH
-1: a razão pela qual o UDP é usado para o DHCP não tem nada a ver com atraso ou perda de pacotes.
Heath Hunnicutt
2
Ao enviar muitos dados em um canal limpo, o TCP geralmente é mais rápido que o UDP. O motivo pelo qual o UDP é usado para coisas como áudio ou vídeo de transmissão ao vivo é que, quando um pacote TCP desaparece, o aplicativo receptor não vê mais nada até que os dados ausentes sejam retransmitidos e recebidos com êxito. Em muitos aplicativos de streaming, os dados que chegarem atrasados ​​serão inúteis; portanto, não faz sentido atrasar tudo enquanto aguarda uma retransmissão que, de qualquer maneira, será inútil.
supercat
O UDP é usado para DHCP porque o TCP não suporta transmissões. O DHCP depende do uso de uma transmissão para obter o endereço IP do servidor DHCP. Veja stackoverflow.com/questions/21266008/…
ScottSmudger 8/17/17
41

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".

Marc B
fonte
1
Resposta decente o suficiente. Eu acrescentaria que em um fluxo TCP os pacotes são reconhecidos pelo destino e os pacotes corrompidos / pacotes ausentes são reenviados pelo remetente. No UDP, os pacotes são enviados e o destino os recebe em qualquer ordem e não confirma o recebimento.
Erik Nedwidek
2
Bit de uma analogia enganosa talvez mais adequado para QoS
Matth
11
Eu gosto muito da analogia, mas uma coisa que essa resposta deturpa um pouco é a velocidade. faz parecer que o TCP é mais rápido, quando na realidade o UDP é porque há menos sobrecarga.
Iliketocode 10/11/2015
22

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.

Heath Hunnicutt
fonte
17

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

caltuntas
fonte
9

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.

Timir
fonte
2

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.

msc
fonte
1

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.

Eugene
fonte
0

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:

  1. Carta 1 - Seja proativo
  2. Carta 2 - Comece com o fim em mente ...

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:

  • Carta de confirmação: assim, seu amigo por correspondência envia uma carta de confirmação para dizer "Recebi a carta 1". Dessa forma, você sabe que o seu colega de caneta o recebeu. Se uma carta não chegar ou chegar fora de ordem, é necessário parar e voltar e reenviar a carta e todas as cartas subsequentes.
  • Controle de fluxo: Na época do Natal, você sabe que o seu amigo por correspondência receberá muitas correspondências; portanto, diminua a velocidade porque não deseja sobrecarregá-lo. (O seu amigo por correspondência envia atualizações constantes sobre o número de mensagens não lidas que existem na caixa de correio do Correspondente - se o amigo por correspondência diz que a caixa de entrada está prestes a explodir porque está muito cheia, você diminui o envio de suas cartas - porque seu amigo por correspondência não será capaz de lê-los.
  • Chegada perfeita. Às vezes, enquanto você envia sua carta pelo correio, ela pode se rasgar ou um caracol pode comer metade dela. Como você sabe que todas as suas cartas chegaram em perfeitas condições? Bem, seu amigo por correspondência lhe dará um mecanismo pelo qual você pode verificar se eles receberam a carta completa e se foi exatamente a carta que você enviou. (por exemplo, através de uma contagem de palavras, etc.). uma analogia básica.
BKSpurgeon
fonte
0

TLDR;

  • TCP - orientado a fluxo, requer uma conexão, confiável, lento
  • UDP - orientado a mensagens, sem conexão, não confiável, rápido

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:

  • O TCP requer uma conexão estabelecida, que requer três viagens de ida e volta (handshake de três vias "infame").
  • O TCP possui um recurso chamado "início lento" quando aumenta gradualmente a taxa de transmissão após estabelecer uma conexão para permitir que um receptor acompanhe os dados.
  • Todo pacote enviado precisa ser reconhecido ou o remetente para de enviar mais dados
  • E assim por diante ...

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.

raias
fonte