DEV Community

Cover image for Tipos de Sockets em TCP e UDP: Escolhendo o Caminho Adequado
PauloSouza.info
PauloSouza.info

Posted on

Tipos de Sockets em TCP e UDP: Escolhendo o Caminho Adequado

Seguindo o pontapé inicial, depois de uma rápida apresentação sobre Sockets com Python, vamos falar sobre protocolos TCP e UDP.

Nas comunicações de rede, a escolha do tipo de socket desempenha um papel fundamental na transmissão eficiente de dados. Vou tentar falar um pouco sobre os tipos de sockets com o uso de protocolos TCP (Transmission Control Protocol) e UDP (User Datagram Protocol), buscando de forma clara explicar suas características e fornecendo insights sobre as situações ideais para cada um.

Basicamente, as abreviações de cada protocolo já respondem ao que cada um se propõe, sendo:

  • O TCP é um Protocolo de Controle de Transmissão
  • O UDP é um Protocolo de Datagrama de Usuário

O termo "controle de transmissão" refere-se à transmissão de dados em uma rede de computadores, onde o TCP é um protocolo de comunicação confiável e orientado à conexão, e seu controle de transmissão atua na entrega confiável e ordenada dos dados.

O "datagrama de usuário" refere-se à um modelo de comunicação sem conexão. Ao contrário do TCP, o UDP não estabelece uma conexão antes de enviar dados e não fornece garantias de entrega, ordem ou verificação de integridade dos dados.

Um datagrama é uma unidade de informação que é transmitida através de uma rede de computadores. Assim sendo, cada datagrama é tratado como uma entidade independente, e não há um acordo prévio de uma conexão antes da transmissão.

TCP: Uma Dança Coreografada de Confiança

O TCP opera sob um paradigma de comunicação orientada à conexão. Este tipo de socket é como uma dança coreografada, onde cada passo é cuidadosamente planejado e verificado para garantir a entrega precisa e confiável dos dados.

Imagine uma conversa formal entre dois interlocutores onde cada palavra é cuidadosamente ouvida e confirmada. É basicamente isso.

Abaixo, segue o exemplo de um servidor TCP em Python com acesso apenas em localhost na porta 8080.

import socket

# Configuração do servidor TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen()

# Aguardando conexão
client_socket, client_address = server_socket.accept()

# Recebendo dados
data = client_socket.recv(1024)
print(f'Dados recebidos via TCP: {data.decode()}')

# Fechando a conexão
client_socket.close()
server_socket.close()
Enter fullscreen mode Exit fullscreen mode

Confiabilidade:

O TCP é altamente confiável, garantindo que os dados sejam entregues sem erros e na ordem correta. Ele emprega mecanismos como ACK (acknowledgment) e retransmissões para assegurar que nenhum dado seja perdido.

Controle de Fluxo:

Um dos pontos fortes do TCP é o seu controle de fluxo que gerencia a taxa de transferência de dados entre emissor e receptor, evitando congestionamentos e garantindo uma transmissão suave.

Sincronização:

A comunicação orientada à conexão do TCP requer um aperto de mão (handshake) inicial entre as partes envolvidas. Esse processo sincronizado estabelece a base para uma comunicação segura e eficiente.

Quando Escolher TCP:

O TCP é a escolha preferencial em cenários onde a integridade dos dados é crucial, como transferência de arquivos, transmissão de áudio e vídeo, e aplicações que demandam comunicação confiável.

UDP: Velocidade e Simplicidade em uma autoestrada digital, mas sem pedágios :)

Diferentemente do TCP, o UDP opera em um modo de comunicação sem conexão. Imagine uma autoestrada digital onde os dados viajam rapidamente, mas sem a necessidade de verificações constantes de velocidade.

Agora, imagine a mesma conversa entre dois interlocutores só que de forma mais rápida e direta, onde não há tempo para confirmações constantes e os dois falam sem parar de assuntos diferentes e, ao mesmo tempo. Você como ouvinte só capta o que você entendeu e continua andando.

Abaixo, segue um exemplo de um servidor UDP em Python com acesso apenas em localhost na porta 8081.

import socket

# Configuração do servidor UDP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 8081))

# Recebendo dados
data, client_address = server_socket.recvfrom(1024)
print(f'Dados recebidos via UDP: {data.decode()}')

# Fechando a conexão
server_socket.close()
Enter fullscreen mode Exit fullscreen mode

Velocidade:

O UDP é mais rápido e eficiente do que o TCP, pois não carrega o fardo de estabelecer e manter uma conexão constante. Isso o torna ideal para aplicações que priorizam a velocidade sobre a confiabilidade.

Comunicação Sem Conexão:

Sem a necessidade de handshakes e verificações rigorosas, o UDP é adequado para situações onde uma comunicação rápida e simples é suficiente.

Broadcasting:

O UDP é frequentemente usado em cenários de broadcasting, onde a mesma mensagem é enviada para vários destinatários simultaneamente.

Quando Escolher UDP:

O UDP é a escolha acertada quando a velocidade é mais importante, como em jogos online, transmissões ao vivo e aplicações de VoIP, onde a perda ocasional de pacotes é tolerável.

Finalização

Se considerarmos a comunicação digital como uma sinfonia, o TCP seria a partitura meticulosamente seguida por uma orquestra, enquanto o UDP seria o improviso de um DJ tocando músicas escolhidas aleatoriamente e sem parar.

Com isso em mente, você já pode escolher o melhor caminho seguir.

* A lot o thanks for this great article and image in Privacy Canada in helping me to compose this article.

Top comments (1)

Collapse
 
tiagomello_ds profile image
Tiago Mello

Achei os exemplos bem práticos para entender melhor ambos os protocolos!