Camada de Transporte Completa: UDP e TCP

Fundamentos, portas, conexão e controle

Professor: Gabriel Soares Baptista

Da Aula Anterior Para Hoje

Na aula passada, o IP entregava pacotes entre hosts.

Hoje a pergunta muda.

Pergunta central

Como entregar dados ao processo certo dentro do host?

Ideia Central

A camada de transporte oferece comunicação processo a processo.

Frase-guia

IP entrega na máquina. Transporte entrega na aplicação.

Nesta aula

  • portas e multiplexação
  • UDP como transporte mínimo
  • TCP como fluxo confiável
  • conexão, fluxo, erro e congestionamento
Base da aula

Forouzan capítulo 23 e Tanenbaum capítulo 6.

Mapa de Leitura

Livro Trecho Assunto
Forouzan 23.1 703-708 processos e portas
Forouzan 23.2 709-715 UDP
Forouzan 23.3 715-735 TCP
Tanenbaum 6.1-6.5 310-365 serviço, sockets, UDP e TCP

Recorte

SCTP fica fora da aula de hoje.

O Problema

Um host executa vários programas ao mesmo tempo.

Exemplo

  • navegador
  • DNS
  • e-mail
  • sincronização de arquivos

O IP entrega ao host. A camada de transporte entrega ao processo.

Enlace, Rede e Transporte

Camada Unidade Comunicação
Enlace quadro nó a nó
Rede pacote host a host
Transporte segmento/datagrama processo a processo

Regra prática

IP identifica a máquina. Porta identifica o serviço/processo.

Ambiente da Camada de Transporte

Leitura

No enlace, há um canal direto.

No transporte, as pontas conversam através de uma rede inteira.

Portas

Uma porta é um número de 16 bits.

Intervalo

0 a 65535

Ideia

Portas separam conversas dentro do mesmo host.

Erro comum

Porta não identifica máquina. Quem identifica máquina é o IP.

Portas Conhecidas e Efêmeras

Tipo Uso
Porta conhecida serviço do servidor
Porta efêmera conversa temporária do cliente

Exemplo

Cliente: 10.0.0.8:53144
Servidor: 200.10.1.5:443

Leitura

443 identifica o serviço. 53144 identifica aquela conversa no cliente.

Mini-lab: Portas no Linux

Ver sockets abertos

ss -tulpen

O que observar

  • tcp ou udp
  • endereço local e porta
  • estado LISTEN ou UNCONN
  • processo dono do socket
Ideia

O sistema operacional mantém a tabela que liga portas a processos.

Multiplexação

Na origem, vários processos usam a rede ao mesmo tempo.

MuxaNavegadorporta 53144tTransportemultiplexaa->tbDNSporta 53145b->tcSSHporta 53146c->tipIPt->ip

No destino

A camada de transporte faz a demultiplexação pela porta.

UDP

UDP significa User Datagram Protocol.

Características

  • sem conexão
  • não confiável no sentido técnico
  • cabeçalho pequeno
  • não controla fluxo
  • não retransmite perdas

Ideia

Entrega processo a processo com mínimo controle.

Cabeçalho UDP

Quatro campos

  • porta de origem
  • porta de destino
  • comprimento
  • checksum

Tamanho

Cabeçalho fixo de 8 bytes.

Checksum UDP

Por que pseudocabeçalho?

Para detectar erro envolvendo IP de origem, IP de destino e protocolo.

Nuance

No IPv4, checksum UDP pode ser zero. No IPv6, é obrigatório.

O Que o UDP Não Faz

Necessidade UDP faz?
estabelecer conexão não
confirmar recebimento não
retransmitir não
ordenar não
controlar fluxo não
detectar erro simples sim, via checksum

Mini-lab: UDP no Linux

Terminal 1: servidor UDP

nc -u -l 9999

Terminal 2: cliente UDP

printf 'consulta\n' | nc -u -w1 127.0.0.1 9999

O que observar

Não há handshake nem conexão persistente antes da mensagem.

Quando UDP Faz Sentido

Bom para

  • perguntas curtas
  • tempo real
  • multicast
  • aplicações com controle próprio

Exemplos

  • DNS comum
  • NTP
  • SNMP
  • voz/vídeo em tempo real

TCP

TCP significa Transmission Control Protocol.

Características

  • orientado a conexão
  • confiável
  • fluxo de bytes
  • entrega em ordem
  • controla fluxo
  • reage a congestionamento

Ideia

Cria uma conexão lógica com estado nas pontas.

Sockets na Aplicação

Aplicações não manipulam diretamente SYN, ACK, janela e timers.

Primitivas típicas

Cliente Servidor
socket socket
connect bind, listen, accept
send / recv send / recv
close close

Segmento TCP

Ideia

O cabeçalho TCP é maior porque o TCP assume mais responsabilidades.

Segmento TCP: Campos

Campo O que significa
Cabeçalho controle da conversa TCP
Dados bytes da aplicação
Portas processos de origem e destino
Sequência primeiro byte carregado no segmento
Confirmação próximo byte esperado pelo receptor
HLEN tamanho do cabeçalho TCP
Erro comum
seq e ack contam bytes, não segmentos.

Segmento TCP: Mais Campos

Campo O que significa
Reservado bits guardados para uso futuro
Flags ações de controle da conexão
Janela quanto o receptor ainda aceita
Checksum detecção de corrupção
Urgent pointer fim dos dados urgentes, se URG = 1
Opções extensões como MSS, escala de janela e timestamps

Segmento TCP: Flags

Flag Ideia
URG campo urgente válido
ACK confirmação válida
PSH entregar logo à aplicação
RST resetar/abortar conexão
SYN abrir conexão e sincronizar sequência
FIN encerrar envio nessa direção

TCP é Fluxo de Bytes

TCP não entrega mensagens.

TCP entrega uma sequência contínua de bytes.

Exemplo

Aplicação escreve: A | B | C
Outra ponta pode ler: ABC

Consequência

A aplicação precisa separar mensagens: \n, tamanho, delimitador ou protocolo.

Erro comum

TCP não é “UDP confiável”. Ele tem outra abstração.

Segmentos e Sequência

O número de sequência indica o primeiro byte do segmento.

Segmento Bytes Seq
1 1001-2000 1001
2 2001-3000 2001
3 3001-4000 3001

ACK

ACK = 4001 significa: espero o byte 4001.

Handshake de Três Vias

Função

Sincronizar números iniciais e abrir a conexão.

1. SYN
2. SYN + ACK
3. ACK
Segurança

SYN flood explora conexões iniciadas e não completadas.

Mini-lab: TCP no Linux

Terminal 1: servidor TCP

nc -l 9998

Terminal 2: cliente TCP

nc -v 127.0.0.1 9998

Em outro terminal

ss -tn '( sport = :9998 or dport = :9998 )'

Procure o estado ESTAB: TCP mantém conexão.

Mini-lab: Handshake com tcpdump

Antes de conectar

sudo tcpdump -i lo -nn 'tcp port 9998'

O que observar

  • [S] = SYN
  • [S.] = SYN + ACK
  • [.] = ACK
  • [F.] = FIN + ACK no encerramento

Controle de Fluxo

Controle de fluxo protege o receptor.

Janela de recepção

rwnd = espaço livre anunciado pelo receptor

Se rwnd = 0, o transmissor deve parar de enviar novos dados.

Controle de Erro

Controle de erro protege a confiabilidade do fluxo.

Ferramentas

  • checksum
  • ACKs
  • temporizadores
  • retransmissões
  • descarte de duplicatas

Regra

Segmento corrompido é descartado.

Perda e ACK Duplicado

Se faltam bytes no meio, o receptor não avança o ACK.

Recebido: 501-600, 601-700, 801-900
Faltando: 701-800
ACK: 701

Leitura

Continuo esperando o byte 701.

Controle de Congestionamento

Controle de congestionamento protege a rede.

Dois limites

$$ janela\ efetiva = \min(rwnd, cwnd) $$

Janela Protege
rwnd receptor
cwnd rede

Encerramento TCP

Ideia

FIN informa: não enviarei mais dados nessa direção.

Lembrete

Como TCP é full-duplex, cada direção pode encerrar separadamente.

Semi-encerramento

Um lado para de enviar, mas ainda pode receber.

UDP x TCP

UDP TCP
sem conexão orientado a conexão
datagramas fluxo de bytes
cabeçalho pequeno cabeçalho maior
sem retransmissão retransmite
sem ordem garantida entrega em ordem

Como Escolher?

Se a aplicação precisa... Use provavelmente
todos os bytes em ordem TCP
pergunta curta repetível UDP
atraso baixo UDP ou QUIC
sessão confiável TCP
controle próprio UDP

Critério

Não é moderno versus antigo. É serviço necessário.

Relação Com a Próxima Aula

Na camada de aplicação veremos protocolos reais usando transporte.

Aplicação Transporte comum
DNS UDP/TCP
HTTP/1.1 e HTTP/2 TCP
HTTP/3 QUIC sobre UDP
E-mail TCP
NTP UDP

Próximos Passos

Na próxima aula subimos para a camada de aplicação.

  • DNS
  • e-mail
  • HTTPS