🏠 Voltar ao Índice
1 / 18

🌐 Protocolos TCP e UDP

Camada de Transporte - Comunicação entre Processos

Aula 07
User Datagram Protocol (UDP) e Transmission Control Protocol (TCP)
Da simplicidade à confiabilidade

👨‍🏫 Autor da Apresentação

César Azevedo
📧 cesar.augusto@ifrn.edu.br

📋 Tópicos da Aula

🎯 Fundamentos

Comunicação entre processos
Paradigma cliente/servidor
Endereçamento com portas
Multiplexação/Demultiplexação
Socket addresses

📦 UDP - Simples e Rápido

Características do UDP
Formato do datagrama
Checksum opcional
Portas conhecidas
Casos de uso

🔒 TCP - Confiável e Robusto

Características do TCP
Formato do segmento
Estabelecimento de conexão
Controle de fluxo
Controle de erros

🎯 Objetivo Final

Compreender as diferenças entre UDP e TCP
e quando usar cada protocolo na camada de transporte

🧠 + Quiz Interativo

Teste seus conhecimentos com 4 questões sobre TCP e UDP!

💬 Comunicação entre Processos

Camada de transporte realiza comunicação processo a processo
Diferente da comunicação nó-a-nó (enlace) ou host-a-host (rede)
Múltiplos processos podem executar simultaneamente
Necessário mecanismo para identificar processo correto

🏗️ Tipos de Comunicação

Nó a Nó
Camada de Enlace
Frame entre nós adjacentes
Host a Host
Camada de Rede
Datagrama entre hosts
Processo a Processo
Camada de Transporte
Dados entre aplicações

👥 Paradigma Cliente/Servidor

Cliente: Processo local que solicita serviços
Servidor: Processo remoto que oferece serviços
Comunicação: Cliente inicia, servidor responde

🏠 Endereçamento com Portas

Número de porta identifica processo específico no host
Inteiros de 16 bits: 0 a 65.535
Combinado com endereço IP forma o socket address

🎲 Portas Efêmeras

Escolhidas aleatoriamente
Usadas por clientes
Temporárias durante conexão
Faixa: 49.152 - 65.535

🏷️ Portas Conhecidas

Números universais fixos
Usadas por servidores
Permanentes e padronizadas
Faixa: 0 - 1.023

📋 Faixas de Portas IANA

Faixa Tipo Uso
0 - 1.023 Conhecidas (Well-known) Serviços padrão (HTTP, FTP, SSH)
1.024 - 49.151 Registradas Aplicações específicas
49.152 - 65.535 Dinâmicas/Privadas Uso temporário por clientes

🎯 Socket Address

Endereço IP + Número de Porta = Socket
Exemplo: 192.168.1.100:8080

🔀 Multiplexação e Demultiplexação

Permite múltiplas aplicações compartilharem a rede
Multiplexação: combinar dados de várias aplicações
Demultiplexação: entregar dados à aplicação correta

🔄 Processo de Multiplexação

EMISSOR
Processo A (porta 1080)
Processo B (porta 2080)
Processo C (porta 3080)
⬇️
Multiplexação
REDE
Uma única
conexão IP
📡
Internet
RECEPTOR
Demultiplexação
⬇️
Processo X (porta 80)
Processo Y (porta 21)
Processo Z (porta 25)

📤 No Emissor

Vários processos enviam dados
Um protocolo de transporte
Relação: vários-para-um
Adiciona cabeçalho com porta

📥 No Receptor

Um protocolo de transporte
Vários processos recebem dados
Relação: um-para-vários
Usa porta para entregar corretamente

🎯 Chave da Demultiplexação

Número da porta de destino determina qual processo recebe os dados

📦 UDP - User Datagram Protocol

Protocolo sem conexão e não-confiável
Adiciona apenas comunicação processo-a-processo ao IP
Verificação de erros muito limitada (checksum)
Mínimo overhead - protocolo muito simples

⚡ Vantagens do UDP

Simplicidade extrema
Baixo overhead de rede
Velocidade de transmissão
Ideal para mensagens pequenas
Suporte nativo a multicast

🤔 Quando usar UDP?

Aplicações que implementam próprio controle de erro
Comunicação solicitação-resposta simples
Aplicações em tempo real (streaming)
Protocolos de gerenciamento (SNMP)
Descoberta de serviços na rede

⚠️ Limitações do UDP

Sem garantia de entrega • Sem controle de ordem • Sem controle de fluxo
Aplicação deve implementar confiabilidade se necessário

📋 Formato do Datagrama UDP

Cabeçalho fixo de apenas 8 bytes
4 campos simples e diretos
Máxima simplicidade e eficiência

🗂️ Estrutura do Datagrama UDP

Porta de Origem (16 bits) Porta de Destino (16 bits)
Comprimento (16 bits) Checksum (16 bits)
DADOS
Dados da aplicação

📝 Campos do Cabeçalho

Porta origem: Processo remetente
Porta destino: Processo destinatário
Comprimento: Tamanho total (cabeçalho + dados)
Checksum: Verificação de erros (opcional)

🔢 Detalhes Técnicos

Tamanho máximo: 65.535 bytes
Tamanho mínimo: 8 bytes (só cabeçalho)
Campo comprimento é redundante
Mantido por eficiência de processamento

💡 Eficiência

8 bytes de overhead vs dezenas de bytes no TCP
Ideal para dados pequenos e frequentes

🏷️ Portas Conhecidas UDP

Porta Protocolo Descrição Uso
53 DNS Domain Name System Resolução de nomes
67/68 DHCP Dynamic Host Configuration Configuração automática IP
69 TFTP Trivial File Transfer Protocol Transferência simples de arquivos
123 NTP Network Time Protocol Sincronização de tempo
161/162 SNMP Simple Network Management Gerenciamento de rede
514 Syslog System Logging Logs do sistema

🎯 Características Comuns

Protocolos simples de solicitação-resposta
Mensagens pequenas e rápidas
Tolerância à perda ocasional de pacotes
Baixa latência mais importante que confiabilidade

💡 Por que UDP para DNS?

Consultas DNS são rápidas (< 512 bytes tradicionalmente)
Cliente pode facilmente repetir consulta se não receber resposta

🔒 TCP - Transmission Control Protocol

Protocolo orientado a conexão e confiável
Oferece serviço de fluxo de dados confiável
Implementa controle de fluxo e controle de erros
Comunicação full-duplex entre processos

✅ Características do TCP

Estabelecimento de conexão virtual
Entrega ordenada e sem duplicatas
Controle de fluxo (evita sobrecarga)
Detecção e correção de erros
Controle de congestionamento

🌊 Serviço de Fluxo de Dados

Processo
Emissor
⬇️
Fluxo de bytes
TCP
Buffer de transmissão
Segmentação
📡
Rede
TCP
Buffer de recepção
Reordenação
⬇️
Processo
Receptor

🎯 Transparência

Aplicação vê canal confiável de bytes
TCP esconde complexidade da rede (perda, reordenação, duplicação)

📋 Formato do Segmento TCP

Cabeçalho de 20 a 60 bytes (opções variáveis)
Muito mais complexo que UDP
Cada campo tem função específica para confiabilidade

🗂️ Cabeçalho TCP (campos principais)

Porta Origem (16) Porta Destino (16)
Número de Sequência (32 bits)
Número de Confirmação (32 bits)
HLEN(4) | Res(6) | Flags(6) Janela (16)
Checksum (16) Urgent Pointer (16)

🔢 Campos de Controle

Seq: Número do primeiro byte
Ack: Próximo byte esperado
Window: Bytes que podem ser enviados
Checksum: Obrigatório (vs UDP)

🚩 Flags de Controle

SYN: Sincronizar sequência
ACK: Confirmação válida
FIN: Finalizar conexão
RST: Resetar conexão

🤝 Estabelecimento de Conexão TCP

Three-way handshake (handshaking de três vias)
Sincronização de números de sequência
Negociação de parâmetros da conexão

🔄 Three-Way Handshake

1. SYN →
Cliente: "Quero conectar, meu seq inicial é X"
SYN, seq=x
2. ← SYN+ACK
Servidor: "Ok, meu seq inicial é Y, confirmando X+1"
SYN+ACK, seq=y, ack=x+1
3. ACK →
Cliente: "Confirmando Y+1, conexão estabelecida"
ACK, seq=x+1, ack=y+1

✅ Após Estabelecimento

Conexão virtual ativa
Ambos lados podem enviar dados
Números de sequência sincronizados
Buffers alocados

⚠️ Problemas de Segurança

SYN Flooding Attack
Esgotamento de recursos
Negação de serviço (DoS)
Contramedidas: SYN cookies

🛡️ SYN Flooding

Atacante envia muitos SYNs falsos → Servidor aloca recursos → Recursos esgotam → Servidor falha

🌊 Controle de Fluxo TCP

Janela deslizante orientada a bytes
Receptor controla taxa de envio do emissor
Evita sobrecarga do buffer receptor
Tamanho da janela é dinâmico

🪟 Operações com Janela

Abrir janela: Move parede direita (mais bytes)
Fechar janela: Move parede esquerda (ACKs)
Reduzir janela: Desencorajado (problemas)

📐 Janela Deslizante TCP

Confirmados
Enviados não confirmados
Podem ser enviados
Não podem ser enviados
← Tamanho da Janela = min(rwnd, cwnd) →

📊 Cálculo da Janela

rwnd: Janela receptora (anunciada pelo receptor)
cwnd: Janela de congestionamento (evita sobrecarga rede)
Janela efetiva: min(rwnd, cwnd)

🛠️ Controle de Erros TCP

Garante entrega confiável e ordenada
Detecta segmentos perdidos, corrompidos ou duplicados
Implementa retransmissão automática

🔍 Detecção

Checksum obrigatório
Números de sequência
Timeout (RTO)
ACKs duplicados

✅ Confirmação

ACK cumulativo
Próximo byte esperado
Piggybacking possível
ACK não gera ACK

🔄 Retransmissão

Timeout de retransmissão
Fast retransmit (3 ACKs dup)
RTO dinâmico (RTT)
Exponential backoff

⚡ Fast Retransmit

Segmento perdido → Próximos chegam fora de ordem
Receptor envia ACK duplicado para cada segmento fora de ordem
Emissor recebe 3 ACKs duplicados
Retransmite imediatamente (não espera timeout)

🎯 Garantias TCP

Dados entregues em ordem • Sem duplicatas • Sem perdas
Transparente para a aplicação

👋 Encerramento de Conexão TCP

Processo ordenado para finalizar conexão
Garante que todos os dados foram entregues
Libera recursos alocados

🔄 Three-Way Close

1. FIN →
"Terminei de enviar dados"
2. ← FIN+ACK
"Confirmo, também terminei"
3. ACK →
"Confirmado, conexão fechada"

↔️ Semi-Encerramento

1. FIN →
"Terminei de enviar"
2. ← ACK
"Confirmado, mas ainda envio"
3. ← Dados + FIN
"Agora terminei"
4. ACK →
"Conexão fechada"

💡 Exemplo de Semi-Encerramento

Cenário: Cliente envia dados para ordenação no servidor

Cliente envia todos dados e fecha seu lado (FIN)
Servidor confirma (ACK) mas continua processamento
Servidor envia dados processados
Servidor termina (FIN) e cliente confirma (ACK)

⏱️ Estados de Conexão

TCP mantém máquina de estados complexa
LISTEN → SYN_SENT → ESTABLISHED → FIN_WAIT → CLOSED

⚖️ UDP vs TCP - Comparação

Característica UDP TCP
Conexão ❌ Sem conexão ✅ Orientado a conexão
Confiabilidade ❌ Não confiável ✅ Confiável
Controle de Fluxo ❌ Não implementa ✅ Janela deslizante
Controle de Erros ⚠️ Checksum opcional ✅ Completo
Overhead 🟢 Baixo (8 bytes) 🟡 Alto (20-60 bytes)
Velocidade 🟢 Rápido 🟡 Mais lento
Ordem dos dados ❌ Não garante ✅ Entrega ordenada
Multicast ✅ Suporte nativo ❌ Não suporta

🚀 Use UDP quando

Velocidade > Confiabilidade
Mensagens pequenas
Aplicação implementa próprio controle
Tempo real (jogos, streaming)
Broadcast/Multicast

🔒 Use TCP quando

Confiabilidade é crítica
Transferência de arquivos
Aplicações web (HTTP)
Email, chat
Dados grandes

🧠 Quiz - Teste seus conhecimentos!

📝 Questão 1

Qual a principal diferença entre UDP e TCP?

A) UDP usa portas, TCP não usa
B) UDP é mais lento que TCP
C) UDP é sem conexão e não-confiável, TCP é orientado a conexão e confiável
D) Não há diferença significativa

🎯 Resumo Final

TCP e UDP: Dois paradigmas da camada de transporte

📦 UDP - Simplicidade

Protocolo minimalista (8 bytes)
Sem conexão, sem estados
Ideal para aplicações rápidas
Aplicação controla confiabilidade
Suporte nativo a multicast

🔒 TCP - Confiabilidade

Protocolo completo (20-60 bytes)
Orientado a conexão
Entrega confiável e ordenada
Controle de fluxo e congestionamento
Transparência para aplicação

🎯 Escolha do Protocolo

Velocidade + Simplicidade = UDP
Confiabilidade + Robustez = TCP

🌐 Na Prática

DNS, DHCP, streaming → UDP
HTTP, FTP, email → TCP
Ambos fundamentais para Internet moderna

💡 Lição Principal

Não existe protocolo "melhor" - existe protocolo adequado
para cada tipo de aplicação e requisito

📚 Referências Bibliográficas

📖 Fonte Principal:

Capítulo 23 - Comunicação entre Processos: UDP, TCP e SCTP
Livro de Redes de Computadores
Páginas 703-735

🌐 RFCs Fundamentais:

RFC 768 - User Datagram Protocol (UDP)
RFC 793 - Transmission Control Protocol (TCP)
RFC 1122 - Requirements for Internet Hosts
RFC 2581 - TCP Congestion Control
RFC 3168 - ECN (Explicit Congestion Notification)

📋 Documentação Adicional:

RFC 6298 - Computing TCP's RTO
RFC 5681 - TCP Congestion Control
RFC 3390 - Increasing TCP's Initial Window
www.iana.org - Registro de portas
Stevens, W. R. - TCP/IP Illustrated

🤖 Metodologia de Criação

Apresentação desenvolvida com assistência de IA Claude Sonnet 4
Baseada integralmente no Capítulo 23 do material didático
Adaptação pedagógica com foco em comparação prática

🎯 Objetivo Educacional

Facilitar a compreensão dos protocolos de transporte
através de comparações claras e exemplos práticos