Diferença entre TCP e UDP?

Qual é a diferença entre o TCP e o UDP?

Eu sei que o TCP é usado no caso de aplicativos críticos que não são 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 do UDP o tornam útil para seus respectivos casos de uso?

TCP é um stream orientado por conexão em uma rede IP. Garante que todos os pacotes enviados cheguem ao destino na ordem correta. Isso implica o uso de pacotes de confirmação enviados de volta ao remetente e a retransmissão automática, causando atrasos adicionais e uma transmissão geral menos eficiente do que o UDP .

UDP é um protocolo sem conexão. A comunicação é orientada por datagrama . A integridade é garantida apenas no único datagrama. Os datagramas chegam ao destino e podem chegar fora de ordem ou não chegarem a todos. É mais eficiente que o TCP 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 uma conexão TCP .

Em certas situações, o UDP é usado porque permite a transmissão de pacotes de transmissão. Isso às vezes é fundamental em casos como o protocolo DHCP , porque a máquina cliente ainda não recebeu um endereço IP (esse é o propósito do protocolo de negociação DHCP ) e não haverá maneira de estabelecer um stream de TCP sem o próprio endereço IP .

Do artigo da Skullbox:

TCP (Transmission Control Protocol) é o protocolo mais comumente 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 em parte a um método chamado “controle de stream”. O controle de stream determina quando os dados precisam ser reenviados e interrompe o stream de dados até que os pacotes anteriores sejam transferidos com êxito. Isso funciona porque, se um pacote de dados for enviado, pode 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.

UDP (User Datagram Protocol) é um protocolo comumente usado na Internet. No entanto, o UDP nunca é usado para enviar dados importantes, como páginas da Web, informações do database, etc; O UDP é comumente usado para streaming de áudio e vídeo. A transmissão de mídia, como os arquivos de áudio do Windows Media (.WMA), o Real Player (.RM) e outros usam o UDP, pois oferece velocidade. A razão pela qual o UDP é mais rápido que o TCP é porque não há nenhuma forma de controle de stream ou correção de erro. Os dados enviados pela Internet são afetados por colisões e erros estarão presentes. Lembre-se que o UDP está preocupado apenas com a velocidade. Essa é a principal razão pela qual a mídia de stream contínuo não é de alta qualidade. 1) O TCP é orientado para conexão e confiável onde, como UDP é conexão menos e não confiável.

2) O TCP precisa de mais processamento no nível da interface de rede, onde, como no UDP, não é.

3) usos TCP, 3 way handshake, controle de congestionamento, controle de stream e outro mecanismo para garantir a transmissão confiável.

4) O UDP é usado principalmente nos casos em que o atraso do pacote é mais grave do que a perda de pacotes.

Pense no TCP como um recebimento / entrega de pacotes UPS / FedEx programados dedicados entre dois locais, enquanto o UDP equivale a lançar um cartão postal em uma checkbox de correio.

A UPS / FedEx fará o que quiserem para garantir que o pacote enviado por você chegue e chegue na hora marcada. Com o cartão postal, você tem sorte se chega, e pode chegar fora de ordem ou tarde (quantas vezes você recebeu um cartão postal de alguém DEPOIS de chegar em casa das férias?)

O TCP é o mais próximo possível de um protocolo de entrega garantido, enquanto o UDP é apenas o “melhor esforço”.

Razões UDP é usado para DNS e DHCP:

O DNS – TCP requer mais resources do servidor (que atende conexões) do que do cliente. Em particular, quando a conexão TCP é fechada, o servidor é obrigado a lembrar os detalhes da conexão (mantendo-os na memory) por dois minutos, durante um estado conhecido como TIME_WAIT_2. Este é um recurso que defende contra pacotes erroneamente repetidos de uma conexão anterior sendo interpretados como parte de uma conexão atual. A manutenção de TIME_WAIT_2 usa a memory do 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 tem conexões e nenhum estado para manter no cliente ou no servidor, poderia amenizar 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 por meio de um protocolo sem conexão, como o UDP. Portanto, o BOOTP exigia pelo menos um pacote UDP, para a transmissão de localização do servidor. Além disso, como o BOOTP está em execução enquanto o cliente … inicializa, e este é 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 Tempo. Finalmente, alguns clientes DHCP / BOOTP têm apenas UDP na placa. Por exemplo, alguns termostatos IP implementam apenas o UDP. A razão é que eles são construídos com processadores minúsculos e pouca memory que são incapazes de executar o TCP – mas ainda precisam obter um endereço IP quando inicializam.

Como outros já mencionaram, o UDP também é útil para streaming de mídia, especialmente de áudio. As conversas soam melhor sob o atraso de 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, seguida por um áudio que sempre será atrasado tanto quanto já foi pausado. Para conversas telefônicas bidirecionais, isso é inaceitável.

Uma das diferenças é, em resumo

UDP : Enviar mensagem e não olhar para trás se chegou ao destino, protocolo sem conexão
TCP : Enviar mensagem e garantia para chegar ao destino, protocolo orientado por conexão

O TCP estabelece uma conexão antes que a transmissão de dados real ocorra, o UDP não. Desta forma, o UDP pode fornecer uma entrega mais rápida. Aplicativos como DNS, access ao servidor de horário, portanto, usam o UDP.

Ao contrário do UDP, o TCP usa o controle de congestionamento. Ele responde à carga da rede. Ao contrário do UDP, ele diminui quando o congestionamento da rede é iminente. Assim, aplicações como multimídia, preferindo um throughput constante, podem ir para o UDP.

Além disso, o UDP não é confiável, não reage às perdas de pacotes. Portanto, aplicativos sensíveis à perda, como transmissão multimídia, preferem UDP. No entanto, o TCP é um protocolo confiável, portanto, os aplicativos que exigem confiabilidade, como transferência na Web, e-mail, download de arquivos, preferem o TCP.

Além disso, na Internet de hoje, o UDP não é tão acolhedor quanto o TCP devido às checkboxs intermediárias. Alguns aplicativos, como o skype, caem no TCP quando a conexão UDP é assumida como bloqueada.

A lei das abstrações gotejadas de Joel Spolsky

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

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 o UDP é um protocolo não confiável.

3) Tcp é um stream orientado, onde o Udp é um protocolo orientado por mensagens.

4) O Tcp é mais lento que o UDP.

Explicação Simples por Analogia

TCP é assim.

Imagine que você tenha um amigo em Marte (nos comunicamos com cartas escritas nos bons e velhos tempos antes da internet).

Você precisa enviar seu pen pal 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.

7 – Afie a Serra

Requisitos:

Você quer ter certeza de que o seu amigo receberá todas as suas cartas – em ordem e que elas cheguem perfeitamente . Se a sua caneta pagar recebe a letra 7 antes da carta 1 – isso não é bom. Se o seu amigo pal 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: Então o seu amigo de correspondência envia uma carta de confirmação para dizer “eu recebi a carta 1”. Dessa forma, você sabe que o seu amigo da caneta o recebeu. Se uma carta não chega, ou chega fora de ordem, então você tem que parar, e voltar e reenviar essa carta, e todas as letras subseqüentes.
  • Controle de Fluxo: Na época do Natal, você sabe que o seu colega de correspondência receberá muitos e-mails, então você fica mais lento porque não quer sobrecarregar seu colega de correspondência. (O seu pen pal envia atualizações constantes sobre o número de mensagens não lidas que existem na checkbox de correio do penpal – se o seu amigo diz que a checkbox de input está prestes a explodir porque está tão cheia, então você demora a enviar suas cartas 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 toda a sua carta chegou em perfeitas condições? Bem, o seu amigo da caneta lhe dará um mecanismo pelo qual você pode verificar se eles têm a letra completa e que foi exatamente a carta que você enviou. (por exemplo, através de uma contagem de palavras, etc.). uma analogia básica.