03 - Serviços
video: https://youtu.be/... no frontmatter da nota.A camada de transporte oferece diferentes categorias de Serviços dependendo das necessidades da aplicação que a utiliza. Estes serviços são definidos por primitivas como orientação a conexão, confiabilidade, modo de operação (simplex, half-duplex, full-duplex) e o modelo de comunicação (circuito virtual vs datagrama).
1. Serviço Orientado à Conexão (Connection-Oriented)
Implementado principalmente pelo TCP.
- Exige uma fase de estabelecimento (Three-Way Handshake) antes dos dados serem enviados.
- Oferece um fluxo de bytes bidirecional e confiável.
- Similaridade: Funciona como uma chamada telefônica, onde o link é mantido enquanto dura a conversação.
Fases de uma Conexão TCP
| Fase | Descrição | Estados TCP |
|---|---|---|
| Estabelecimento | 3-way handshake (SYN, SYN+ACK, ACK) | LISTEN → SYN_SENT → ESTABLISHED |
| Transferência de dados | Stream full-duplex confiável | ESTABLISHED |
| Liberação | 4-way handshake (FIN, ACK, FIN, ACK) | FIN_WAIT_1/2, CLOSE_WAIT, LAST_ACK, TIME_WAIT |
Características do Serviço Orientado a Conexão
- Negociação de parâmetros: MSS, Window Scale, SACK, Timestamps trocados no SYN.
- Manutenção de estado: Ambos os lados mantêm Sequence Number, Ack Number, cwnd, rwnd, ssthresh.
- Detecção de falhas: Timeout de inatividade (keepalive) detecta queda do par.
- Custo: 1 RTT extra antes do primeiro byte útil + overhead de cabeçalho (20 bytes).
2. Serviço Sem Conexão (Connectionless)
Implementado principalmente pelo UDP.
- Não há estabelecimento prévio de conexão; o dado é simplesmente enviado.
- Cada unidade de dados (Datagrama) é tratada de forma independente.
- Similaridade: Funciona como o correio tradicional (enviar cartas), onde não há garantia de que a carta do dia anterior chegará antes da carta de hoje.
Características do Serviço Sem Conexão
- Stateless: O emissor não mantém informação sobre datagramas enviados.
- Sem overhead de handshake: o primeiro byte útil já pode ir no primeiro datagrama (0-RTT).
- Independência de mensagens: Cada datagrama é uma mensagem autocontida (modelo de record boundary preservado, ao contrário do TCP que é byte stream).
- Suporte a multicast: natural, já que cada datagrama é roteado isoladamente.
3. Serviço Confiável vs Não Confiável
Confiável (TCP)
Garante entrega através de:
- Sequence numbers e ACKs cumulativos.
- Retransmissão por timeout (RTO) ou Fast Retransmit (3 dup ACKs).
- Detecção de duplicatas e reordenação para entrega à aplicação em ordem.
- SACK para retransmitir apenas o necessário.
Não Confiável (UDP)
- Nenhuma garantia: pacotes podem ser perdidos, duplicados ou reordenados.
- A aplicação é responsável por qualquer confiabilidade desejada (ex: TFTP implementa seu próprio ACK, QUIC implementa sua própria retransmissão).
- Vantagem: nenhuma sobrecarga de temporizadores, buffers de retransmissão ou estado.
4. Modo de Operação
| Modo | Descrição | Exemplo na Camada de Transporte |
|---|---|---|
| Simplex | Comunicação unidirecional apenas | Raramente usado; TCP/UDP sempre são bidirecionais pelo menos para ACKs |
| Half-duplex | Bidirecional alternada (uma direção por vez) | Não nativo no TCP/UDP; emulado pela aplicação |
| Full-duplex | Bidirecional simultâneo | TCP nativo (ACKs podem viajar junto com dados via piggybacking); UDP também suporta, mas sem relação entre fluxos |
No TCP o full-duplex é uma propriedade fundamental: cada direção tem seu próprio Sequence Number e Window Size independentes. Fechar uma direção (FIN) não fecha a outra até que ambos os lados façam isso.
5. Circuito Virtual vs Datagrama
Esses dois paradigmas vêm da teoria de redes de pacotes e correspondem à divisão entre TCP e UDP na camada de transporte:
| Aspecto | Circuito Virtual | Datagrama |
|---|---|---|
| Estabelecimento prévio | Sim | Não |
| Estado em roteadores intermediários | Sim (em redes X.25, ATM, MPLS) | Não |
| Endereçamento por pacote | Identificador de circuito | Endereço completo |
| Ordem de entrega | Garantida | Não garantida |
| Exemplo na Internet | TCP (emulação de circuito virtual na borda) | UDP |
| Exemplo em redes L2/L3 | MPLS LSP, ATM SVC | IP puro |
Importante: o TCP simula um circuito virtual entre os dois hosts sem que os roteadores intermediários saibam da sua existência. O estado é mantido apenas nas pontas (end-to-end principle, RFC 1958).
6. Serviços Adicionais da Camada de Transporte
- Controle de fluxo (TCP): Window Size protege o receptor de ser inundado.
- Controle de congestão (TCP): cwnd e algoritmos (Reno, CUBIC, BBR) protegem a rede.
- Controle de erro (TCP e UDP): Checksum com pseudo-header detecta corrupção e endereçamento incorreto.
- Serviço de stream (TCP): entrega de bytes em ordem, sem fronteiras de mensagem.
- Serviço de mensagem (UDP): preserva fronteiras entre datagramas — cada
sendtocorresponde a umrecvfromno destino.
7. Qual Serviço Escolher?
A escolha depende do compromisso entre Confiabilidade e Velocidade:
| Tipo de Aplicação | Exigência | Serviço Recomendado | Protocolo |
|---|---|---|---|
| Páginas Web / E-mail | Integridade dos dados absoluta. | Orientado à Conexão | TCP |
| Streaming / VOIP | Baixa latência; perdas são toleráveis. | Sem Conexão | UDP |
| Transferência de Arquivos | Ordem e completude. | Orientado à Conexão | TCP |
| Queries DNS | Rapidez e simplicidade (overhead mínimo). | Sem Conexão | UDP |
| Sessão interativa (SSH) | Ordem, integridade, baixa latência | Orientado à Conexão | TCP |
| Jogos multiplayer | Latência baixíssima, tolerância a perda | Sem Conexão | UDP |
| IPTV / Streaming ao vivo | Multicast, tolerância a perda | Sem Conexão | UDP |
| Transações financeiras | Integridade e ordem absolutas | Orientado à Conexão | TCP |
8. Serviços Híbridos Modernos
Aplicações recentes fogem à dicotomia TCP/UDP:
- QUIC (HTTP/3): roda sobre UDP, mas implementa confiabilidade, controle de congestão e criptografia (TLS 1.3) em userspace. Permite múltiplos streams independentes (sem head-of-line blocking) e 0-RTT para conexões repetidas.
- SCTP (Stream Control Transmission Protocol, RFC 4960): combina características de TCP (confiável) e UDP (mensagem-preservando), com suporte a multi-homing e múltiplos streams numa mesma conexão. Usado em sinalização telefônica (SIGTRAN).
- WebRTC: usa SRTP sobre UDP, com congestão customizada (GCC) e FEC para tolerar perdas em tempo real.
Algumas aplicações modernas (como o HTTP/3) rodam sobre o UDP (Sem Conexão) para evitar os problemas de latência do TCP, mas implementam sua própria confiabilidade customizada na camada de aplicação via protocolo QUIC. Essa tendência mostra que o serviço sem conexão puro não é mais visto como "fraco", mas como um primitivo flexível que aplicações especializadas podem adaptar às suas necessidades.