TCP ou UDP?
Por Izabela Vanessa de Almeida Melo
(izabela@dsc.ufcg.edu.br)
Você lembra quais são as funções da camada de transporte de uma rede? Lembra o que significa UDP, TCP? Quais são as diferenças entre esses conceitos? Recapitule tudo isso agora!
Figura 1 - Modelo OSI.

Hoje em dia, os usuários da rede estão cada vez mais exigentes e, em alguns casos, essas exigências correspondem a necessidades (em uma cirurgia à distância, por exemplo, é necessário que todos os dados cheguem ao destino). Com isso, as aplicações (HTTP - HyperText Transfer Protocol, SMTP - Simple Mail Transfer Protocol e FTP - File Transfer Protocol, por exemplo), cada vez mais, necessitam de um serviço confiável e de qualidade. A camada de rede (3ª camada) não trata questões como congestionamento, perda ou ordenação de pacotes. Esse papel de entrega confiável dos dados é atribuído à 4ª camada (tanto no modelo OSI quanto no modelo TCP/IP) de uma rede, a camada de transporte.

Os principais serviços oferecidos pela camada de transporte são:

  • Controle de conexão: os protocolos dessa camada oferecem serviços orientados à conexão (TCP - Protocolo de Controle de Transmissão) e não orientados à conexão (UDP - Protocolo de Datagrama do Usuário). A diferença é que os orientados à conexão precisam, antes de enviar pacotes de dados reais, estabelecer uma comunicação com os usuários finais para, só depois, transmitir.
  • Fragmentação: se uma informação a ser transmitida é grande, como, por exemplo, uma mensagem SMTP com todas as fotos de uma festa, a camada de transporte fragmenta-a em pacotes menores para que a camada de rede possa encapsular e transmitir. Essa fragmentação só é reconhecida no transmissor e no receptor (sendo as outras camadas ignorantes quanto a ela).
  • Endereçamento: a camada de transporte oferece à camada de aplicação a função de endereçamento, onde os serviços são identificados por sua porta e a conexão entre sua estação e outro host é feita a partir de um socket (consiste em IP + porta). Com esse endereçamento, um usuário pode abrir duas janelas de um browser com links diferentes e ser reconhecido como um mesmo host.
  • Confiabilidade: para garantir confiabilidade, a camada de transporte oferece controle de fluxo, controle de erros e controle de congestionamento.

Dois protocolos da camada de transporte, como já mencionados anteriormente, são UDP e TCP.

Protocolo de Datagrama do Usuário - UDP

O UDP é um serviço de entrega dos dados não orientado à conexão e não confiável. Fornece apenas os serviços de endereçamento e fragmentação, não fornecendo o serviço de confiabilidade. O UDP não adiciona nenhum serviço ao protocolo IP (protocolo da camada de rede) sendo, então, uma extensão desse protocolo.

A principal função do UDP é multiplexar na origem e demultiplexar no destino os datagramas transmitidos. Para isso, cada segmento UDP contém a seguinte estrutura (descrição baseada na Figura 2):

  • DestinationPort: número de porta destino;
  • SourcePort: número de porta de origem (campo opcional), que serve para indicar para onde as respostas (caso existam) devem ser enviadas;
  • UDP length: tamanho do datagrama;
  • UDP Checksum: soma de verificação para ver se o datagrama recebido está correto;
  • Playload/Dados: dados a serem enviados.

Figura 2 - Segmento UDP.

Um programa que usa o UDP aceita a responsabilidade de lidar com a questão da confiabilidade (perda de mensagem, duplicação, retardo, transmissão defeituosa e perda de conectividade).

O código de implementação de um protocolo UDP é bastante simples. Além disso, é necessário um número menor de mensagens para transmitir um pacote (comparado ao TCP), pois não necessita de uma configuração inicial, sendo, dessa forma, teoricamente mais rápido.

Protocolo de Controle de Transmissão - TCP

O protocolo TCP faz a comunicação fim-a-fim da rede e é um serviço orientado à conexão bastante confiável (independente da qualidade de serviços das sub-redes que lhe servem de caminho). Ele garante a entrega dos dados na sequência em que foram fornecidos e sem perda nem duplicação.

Veja, a seguir, características do TCP que permitem as garantias citadas acima.

  • Orientado à conexão: para conseguir transmitir os dados para um destino, é preciso, antes, estabelecer uma conexão com este. O protocolo TCP tem 3 fases durante uma conexão (estabelecimento da ligação, transferência de dados, e encerramento da ligação). O estabelecimento da ligação consiste em: cliente envia um pacote TCP com flag "SYN activa" e espera o servidor aceitar a ligação (envia um pacote SYN + ACK). Se, durante um espaço de tempo, a confirmação de aceitação do servidor não for recebida, o cliente reenvia o pacote SYN. Ao receber o pacote de aceitação, o cliente envia um pacote ACK de confirmação do estabelecimento da ligação. Todo esse processo, chamado de Three-Way Hanshake, pode ser visto na Figura 3.
  • Figura 3 - Estabelecimento de conexão entre cliente e servidor.

  • Desconexão "suave": o TCP só encerra a conexão após entregar os dados ao receptor. A desconexão é feita da forma mostrada na Figura 4.
  • Figura 4 - Encerramento de conexão.

  • O TCP é Full-duplex, ou seja, permite a transferência simultânea nas duas direções durante a sessão.
  • O TCP enxerga a rede como uma conexão ponto-a-ponto, fornecendo, assim, uma conexão direta entre os aplicativos dos hosts. Essa conexão é chamada de conexão virtual, pois, entre o transmissor e o receptor, os dispositivos de camada de rede não enxergam a camada de transporte (Figura 5).
  • Figura 5 - Conexão TCP.

  • Confiabilidade do TCP: várias características garantem a confiabilidade do TCP. Veja, a seguir, algumas delas.
    • Retransmissão: o TCP, ao enviar um pacote, inicializa um temporizador (mecanismo de timeout) para receber a confirmação do recebimento. Se, após o timeout, a confirmação não for recebida, o pacote é retransmitido.
    • Controle de fluxo: o TCP implementa o controle de fluxo para que o receptor não receba mais pacotes do que a sua capacidade permite, evitando, assim, a perda de pacotes por parte do receptor (ex.: um transmissor rápido enviando pacotes para um receptor lento).
    • Controle de congestionamento: o transmissor não pode enviar mais pacotes do que a rede pode suportar, evitando, assim, a perda de pacotes durante a transmissão.

A estrutura de um pacote TCP pode ser observada na Figura 6 (para informações sobre cada pedaço do pacote leia [2]). Observe que, por fornecer serviços que o UDP não fornece, a complexidade dessa estrutura é maior que a de um segmento UDP.

Figura 6 - Segmento TCP.

Qual o melhor protocolo?

Para uma aplicação em que a velocidade na entrega dos dados é mais útil do que a confiabilidade (como, por exemplo, aplicações de multimídia), o protocolo UDP é mais adequado. Outra aplicação que utiliza o UDP é o DNS (Domain Name System). Mas, em aplicações em que a confiabilidade é mais importante do que a velocidade, como, por exemplo, na transferência de arquivos (aplicação de gerenciamento de downloads), o TCP se torna mais adequado.

Logo, o conceito de melhor protocolo torna-se abstrato se pensarmos em função das necessidades de cada aplicação. Cada aplicação tem uma necessidade e, para cada necessidade, um protocolo se torna mais adequado ou não.


Fontes:

[1] http://www.ifba.edu.br/professores/romildo/downloads/ifba/transporte.pdf. Último acesso em 10/04/2011.

[2] http://www.slideshare.net/luiz_arthur/redes-camada-de-transporte. Último acesso em 10/04/2011.

[3] Notas de aula do prof. Moreira. Último acesso em 10/04/2011.