quarta-feira, 2 de dezembro de 2015

Hardcore Devel #42 - UDP vs TCP

Okz, a maioria das pessoas ja ouviu falar nessas duas siglas.


E não, isso não é um culto.

Estamos falando de informática, então você já sabe que é alguma coisa de computador. Então vamos falar de um jeito rápido. UDP e TCP são duas versões da mesma coisa, um protocolo de transporte de dados.

Só que ambos são diferentes e tem suas peculiaridades. Então vamos investigá-las de forma comparativa. Vamos começar pelo nome. UDP significa User Datagram Protocol enquanto TCP é Transmission Control Protocol.

Redes de computadores tem muitas siglas terminando com P. Em outras palavras, tem muitos protocolos.

Então qual é a brincadeira? Quando você vai enviar dados pela internet, a sua aplicação vai conversar com o que a gente chama de camada de transporte, e ela vai usar um dos dois protocolos. Só que eles funcionam de forma diferente. Em poucas palavras dizemos que o TCP é confiável e o UDP não. Em outras palavras, o carteiro do TCP entrega a mensagem com certeza, do UDP não.

Ah, mas isso significa que o UDP não entrega o pacote? Não. Isso significa que o UDP tem alguma chance de entregar o pacote ao passar por esse mar de dispositivos que existem no planeta. Ele vai tentar mas ele não vai se esforçar tanto assim. Até porque se você olhar para o seu cabo, vai ver que ele tem 8 fios. Não da pra passar 500 bytes de informação de uma vez. Nem mesmo nas redes sem fios.

Se o TCP faz o serviço com certeza, pra que eu vou usar o UDP? Essa é uma pergunta importante, mas a resposta é bastante simples. Em inglês a gente chama de "overhead", mas a gente pode dizer que o TCP é um protocolo carregado demais, por isso ele demora muito tempo pra começar a funcionar.

O TCP é chato, ele precisa confirmar que um computador consegue falar com o outro, e geralmente negociando a velocidade da transferência de informação. Tem de trocar o tamanho da informação. E aí começa a transferência, sendo que pra cada byte enviado, o remetente precisa receber um pacote de resposta do receptor. E pra enviar o pacote, ele usa o mesmo meio de transferência o que gera um pouco mais de overhead.

E isso gera alguns problemas até para o desenvolvedor. Se você usa TCP você é quase que obrigado a usar threads. Se você tenta enviar mensagens para diversas pessoas usando o mesmo processo, pode ter certeza que não vai dar certo.

O UDP, por outro lado, permite que você mande, os pacotes, sem ficar fazendo essa verificação. Quando você está programando. Você tem duas funções que são usadas para os protocolos TCP e UDP, que são, recv() e recvfrom() respectivamente.

Quando você usa o recv no TCP o código não continua a execução até completar o envio do pacote. Só que o TCP vai prender o fluxo do programa pra poder concluir o envio do pacote dele. Se o programa tiver mais a fazer depois disso, fudeu! Por isso ele precisa de threads pra funcionar, se não os códigos simplesmente não vão andar, e você vai ter programas que vão simplesmente congelar.

Desde que eu comecei o meu projeto final eu tenho tido que trabalhar bastante programando com sockets e tenho sentido essas experiências na pela. Um excelente guia é o guia do Beej. Tá em inglês, mas tem tudo o que você precisa saber para programar em rede.

E tem o outro guia dele que é a respeito de programaçao paralela. Vale muito a pena a leitura se você é um programador.

http://beej.us/guide/

Nenhum comentário:

Postar um comentário