Capítulo 01 Fundamento
As camadas, e o que cada uma garante
A rede está organizada em camadas para que cada uma possa ignorar as outras. O útil não é decorar a lista — é saber exatamente o que cada camada promete, e o que não promete.
1.1 As quatro que interessam
| Camada | Trata de | Garante | Não garante |
|---|---|---|---|
| Ligação | Falar com quem está no mesmo segmento físico | Entrega dentro da rede local | Nada para lá do primeiro salto |
| Internet (IP) | Levar um pacote de A a B, atravessando redes | Nada. Faz o melhor que pode | Que chegue, que chegue uma só vez, que chegue por ordem |
| Transporte (TCP/UDP) | Conversa entre dois programas | TCP: chega, por ordem, sem duplicados. UDP: nada | Que chegue depressa |
| Aplicação (HTTP, DNS…) | O significado do que se troca | O que o protocolo definir | Que o outro lado perceba o mesmo |
O IP não garante nada. Pacotes podem ser perdidos, duplicados, reordenados e atrasados arbitrariamente — e isso não é uma avaria, é o desenho. A internet funciona porque cada nó faz o melhor que consegue e desiste depressa quando não consegue.
Tudo o que parece fiável — uma página que carrega, um ficheiro que chega inteiro — é fiabilidade construída por cima de uma base que não a oferece. Perceber isto é o que permite diagnosticar o que corre mal.
1.2 As abstrações vazam
Cada camada esconde a de baixo, e esconde quase sempre. Quando falha, falha de formas que só se percebem sabendo o que está por baixo:
- Uma ligação TCP "aberta" pode já não existir. Se o cabo foi desligado, nenhum dos lados sabe até tentar enviar algo. A ligação é uma ficção partilhada, não um objeto físico.
- Uma aplicação que "não responde" pode estar a responder — e a resposta a ser descartada a meio do caminho por um equipamento que ninguém sabia que estava lá (cap. 8).
- Um pedido lento pode não ser lento. Pode ser um pacote perdido e a retransmissão a demorar (cap. 3).
- Um nome que "não resolve" pode resolver noutra máquina, porque a resposta veio de uma cache diferente (cap. 4).
1.3 O que uma mensagem carrega
Duas consequências práticas: há um custo fixo por mensagem — dezenas de bytes de cabeçalhos, que dominam quando as mensagens são pequenas — e cada camada só vê o seu cabeçalho, o que explica porque um equipamento de rede pode encaminhar tráfego que não consegue ler.
1.4 O que esta apostila é
É sobre o que é preciso saber de redes para construir, operar e diagnosticar sistemas — não para configurar equipamento de operador nem para tirar uma certificação.
Nove apostilas deste catálogo assumem estes fundamentos: DevOps, Observabilidade & SRE, CyberDevSecOps, Arquitetura & System Design, API Design, IaC & Platform Engineering, Caching & Redis, Vercel e Robótica, IoT e Embarcados. Esta é a base que faltava por baixo delas.
Para um problema de rede que tenha tido, identifique em que camada estava. Depois pergunte: que garantia eu estava a assumir que não existia? A resposta é quase sempre a lição.
Capítulo 02 Núcleo
Endereços, e como um pacote encontra o caminho
Um endereço IP não identifica uma máquina: identifica uma interface numa rede. A distinção parece pedante e explica metade dos problemas de configuração.
2.1 O endereço tem duas partes
Um endereço divide-se em parte de rede e parte de máquina, e a fronteira é dada pela máscara. Escreve-se junto: 192.168.1.10/24 significa que os primeiros 24 bits identificam a rede.
O destino está na minha rede? Compara-se o endereço de destino com o próprio, usando a máscara.
Se sim: envia diretamente ao destino, pelo cabo ou rádio.
Se não: envia ao router por omissão, e delega. O router repete a mesma pergunta com a sua própria tabela.
É só isto. Todo o encaminhamento da internet é esta pergunta repetida, salto a salto, até alguém ter o destino na sua rede local. Nenhum nó conhece o caminho completo — cada um só sabe o próximo passo.
2.2 Endereços privados, e a tradução que mudou a internet
Certas gamas — 10.x, 172.16–31.x, 192.168.x — são reservadas para redes internas e não são encaminhadas na internet. Milhões de redes usam as mesmas.
Para essas máquinas saírem, existe a tradução de endereços: o router substitui o endereço privado pelo seu público, guarda a correspondência, e traduz de volta na resposta.
A internet foi desenhada para que qualquer máquina pudesse falar com qualquer outra. Com tradução de endereços, uma máquina interna pode iniciar ligações mas não recebê-las — não tem endereço alcançável de fora.
Consequências que se sentem todos os dias: precisar de reencaminhamento de portas para expor um serviço caseiro; a complexidade das chamadas diretas entre pares; e o facto de a tabela de tradução expirar — uma ligação inativa demasiado tempo é esquecida pelo router, e ambos os lados continuam a julgar-se ligados (cap. 11).
2.3 IPv6, em três pontos
- Existe porque os endereços de 32 bits acabaram. IPv6 usa 128 bits — endereços suficientes para não voltar a acontecer.
- Devolve o endereçamento direto: cada dispositivo pode ter endereço público, sem tradução. Isso simplifica muito e obriga a levar a sério a filtragem, porque deixa de haver a proteção acidental do NAT.
- A adoção é lenta e parcial. Na prática convive-se com os dois — o que significa que um serviço pode estar acessível por um e não pelo outro, e que «funciona no meu computador» pode ser literalmente uma questão de versão de protocolo.
2.4 Portas: o que distingue conversas
O endereço leva à máquina; a porta leva ao programa. Um servidor com um só endereço atende centenas de serviços porque cada um escuta numa porta diferente — 443 para HTTPS, 22 para SSH, 5432 para uma base de dados.
Uma ligação é identificada por quatro valores: endereço de origem, porta de origem, endereço de destino, porta de destino. Por isso mil pessoas podem estar ligadas ao mesmo servidor na mesma porta 443 — cada uma tem uma porta de origem diferente.
E daqui sai um limite real: um cliente tem um número finito de portas de origem. Um sistema que abre e fecha ligações muito depressa esgota-as, e a sintomatologia é enganadora — parece falta de recursos do servidor.
Na sua máquina, veja o endereço, a máscara e o router por omissão. Depois, para três destinos diferentes, responda à pergunta de 2.1 à mão. Confirme com uma ferramenta de rota. É o exercício que torna concreto o que costuma ser abstrato.
Capítulo 03 Núcleo
TCP e UDP: a garantia que se paga
Uma dá-lhe a ilusão de um canal fiável e cobra em latência. A outra não dá garantia nenhuma e é mais rápida. Escolher errado é a origem de muita lentidão inexplicada.
3.1 O que o TCP faz por si
- Estabelece a ligação com uma troca de três mensagens antes de qualquer dado — o que custa um tempo de ida e volta completo antes de enviar o primeiro byte.
- Numera os segmentos e reordena-os na chegada. O que sai desordenado chega ordenado.
- Confirma e retransmite. O que não for confirmado é reenviado, ao fim de um tempo estimado.
- Controla o ritmo. Começa devagar e acelera enquanto não houver perdas; ao detetar perda, abranda bruscamente.
O TCP assume que um pacote perdido significa que a rede está cheia, e reduz a velocidade drasticamente. É a decisão certa numa rede com fios — e é uma leitura errada numa rede sem fios, onde a perda costuma vir de interferência, não de congestão.
É por isso que uma ligação Wi-Fi com sinal fraco fica desproporcionadamente lenta: perde alguns pacotes, o TCP conclui que há congestionamento, e abranda muito mais do que a perda justificaria.
3.2 O bloqueio de cabeça de fila
Como o TCP entrega por ordem, se o pacote nº 5 se perder, os pacotes 6, 7 e 8 — que já chegaram — ficam à espera até o 5 ser retransmitido. A aplicação não recebe nada, apesar de haver dados prontos.
Para transferir um ficheiro, isto é irrelevante. Para uma chamada de vídeo, é fatal: mais valia mostrar um quadro imperfeito agora do que o quadro certo daqui a 300 ms. É a razão principal para usar UDP.
3.3 UDP: quando não garantir é melhor
| Uso | Porquê UDP |
|---|---|
| DNS | Pergunta e resposta cabem numa mensagem; abrir ligação custaria mais que a consulta |
| Voz e vídeo em tempo real | Um quadro atrasado não serve; melhor perdê-lo |
| Jogos | A posição de há 200 ms é inútil; interessa a atual |
| Telemetria de dispositivos | Perder uma leitura de mil é irrelevante (IoT) |
| QUIC | Constrói fiabilidade própria por cima, sem o bloqueio de cabeça de fila |
É o transporte por baixo do HTTP/3, e assenta em UDP por opção: implementa fiabilidade, ordem e cifra por cima, mas por fluxo — se um fluxo perde um pacote, os outros continuam. Resolve o problema de 3.2 sem perder as garantias.
Duas consequências práticas: junta o estabelecimento da ligação com o da cifra, poupando idas e voltas; e como corre em UDP, algumas redes corporativas bloqueiam-no — o que produz um sintoma característico: "o site está lento nesta rede e rápido em todas as outras".
3.4 O que isto custa em tempo
Daqui saem duas das melhores otimizações que existem, e nenhuma exige mais largura de banda: reutilizar ligações em vez de abrir uma por pedido, e aproximar o servidor do utilizador para reduzir o tempo de ida e volta (cap. 7).
Meça o tempo de um pedido com ligação nova e com ligação reutilizada. A diferença é o custo do estabelecimento — e é frequentemente maior do que todo o tempo de processamento do servidor.
Capítulo 04 Núcleo
DNS: o sistema que decide para onde tudo vai
É a peça mais frágil e mais mal compreendida da pilha. Quando algo não funciona e ninguém percebe porquê, comece por aqui.
4.1 Como uma resposta é encontrada
Três ideias que decorrem daqui: é hierárquico (ninguém sabe tudo), é delegado (cada nível aponta para o seguinte) e vive de cache — sem ela, a internet não funcionaria a esta escala.
4.2 Os registos que aparecem no dia a dia
| Registo | Diz | Nota |
|---|---|---|
| A / AAAA | O endereço IPv4 / IPv6 | O caso base |
| CNAME | "Este nome é outro nome" | Não pode coexistir com outros registos no mesmo nome — origem clássica de configurações inválidas |
| MX | Quem recebe correio deste domínio | Com prioridades |
| TXT | Texto livre | Usado para provar posse do domínio e para políticas de correio |
| NS | Quem é a autoridade sobre este domínio | É aqui que se muda de fornecedor de DNS |
| CAA | Que autoridades podem emitir certificados | Barato, e evita emissões indevidas (cap. 6) |
4.3 "Propagação" não existe
Diz-se que uma alteração "demora a propagar". Não se propaga nada: a alteração é instantânea no servidor autoritativo. O que demora é as caches espalhadas pelo mundo expirarem — e cada uma expira ao seu ritmo, conforme o TTL que recebeu.
A consequência prática: antes de mudar um registo, baixe o TTL com antecedência. Se o TTL era de 24 horas, baixe-o para 300 segundos um dia antes da mudança. Fazer a alteração e só depois baixar o TTL não ajuda — as caches já guardaram o valor antigo com o prazo antigo.
É a diferença entre uma migração com cinco minutos de transição e uma com um dia de comportamento inconsistente.
4.4 Porque o DNS é a suspeita habitual
- Está no caminho de tudo e ninguém pensa nele até falhar.
- Falha de forma assimétrica. Funciona numa máquina e não noutra, porque usam resolvedores diferentes com caches diferentes. Produz o clássico "no meu computador funciona" com causa real.
- Cache negativa. Uma resposta "não existe" também é guardada. Criar o registo não corrige imediatamente — é preciso esperar que a resposta negativa expire.
- A ordem de resolução do sistema não é só DNS: ficheiros locais e outros mecanismos vêm antes, e uma entrada esquecida num ficheiro de máquinas explica comportamentos que nenhuma consulta ao DNS reproduz.
- Dentro de contentores é outro mundo. Resolvedor próprio, domínios de pesquisa próprios, nomes de serviço internos. Metade dos problemas de rede em orquestração são de resolução de nomes (DevOps).
4.5 O que fazer bem, e custa pouco
- TTL curto antes de mudar; longo em regime estável. Longo reduz carga e latência; curto dá agilidade. Não é preciso escolher — muda-se conforme o momento.
- Mais do que um servidor autoritativo, e de preferência em redes distintas. Perder o DNS é perder tudo, mesmo com os servidores de aplicação vivos.
- Vigie a validade do domínio. Um domínio que expira derruba tudo — correio incluído — e é a falha mais evitável que existe.
- Publique um registo CAA. Duas linhas, e limita quem pode emitir certificados em seu nome.
Para um domínio seu, consulte a cadeia completa: quem é a autoridade, que registos existem, e qual o TTL de cada um. Depois faça a mesma consulta a partir de dois resolvedores diferentes e compare. Se divergirem, tem uma cache desatualizada — e agora sabe explicá-la.
Capítulo 05 Núcleo
HTTP: o protocolo que engoliu tudo
Começou por servir documentos e é hoje o transporte por omissão de quase tudo. Vale a pena conhecer as três ou quatro decisões de desenho que explicam o seu comportamento.
5.1 Não tem memória
Cada pedido é independente. O servidor não se lembra do anterior. É o que permitiu à web escalar: qualquer servidor pode responder a qualquer pedido, o que torna a distribuição de carga trivial.
Como se cria então a sensação de sessão? O cliente carrega o contexto em cada pedido — um cookie, um cabeçalho de autorização. O estado vive no cliente ou numa base de dados partilhada, nunca na memória de um servidor concreto.
É por isso que "guardar a sessão em memória" quebra assim que há mais do que um servidor — e é dos erros mais comuns em sistemas que crescem.
5.2 Os métodos, e a propriedade que interessa
| Método | Altera estado? | Repetir é seguro? |
|---|---|---|
| GET | Não | Sim — e por isso é cacheável |
| PUT / DELETE | Sim | Sim — o resultado final é o mesmo |
| POST | Sim | Não — repetir cria outro |
Se um pedido falhar por tempo esgotado, não se sabe se chegou: pode ter sido processado e a resposta perdida. Repetir um GET é inofensivo; repetir um POST pode cobrar duas vezes.
É a razão de existirem chaves de idempotência: o cliente gera um identificador único por operação e envia-o; o servidor reconhece a repetição e devolve o resultado original em vez de executar de novo. Em qualquer sistema que mova dinheiro, isto não é opcional (API Design).
5.3 Os códigos que dizem alguma coisa
- 2xx — correu bem.
201criou,204correu bem e não há corpo. - 3xx — está noutro sítio.
301permanente (as caches guardam-no agressivamente: um 301 errado é difícil de corrigir),302temporário,304"não mudou, usa o que tens". - 4xx — o pedido está mal.
401não se identificou,403identificou-se e não pode,404não existe,429demasiados pedidos. - 5xx — o servidor falhou.
502e504vêm quase sempre de um intermediário: o que está à frente não conseguiu falar com o que está atrás (cap. 8). É informação valiosa sobre onde falhou.
5.4 Cache: a otimização com melhor retorno
Validação — o cliente pergunta "isto mudou?" com um identificador de versão; o servidor responde 304 se não mudou. Poupa transferência, não poupa a ida e volta.
Expiração — o servidor diz "isto vale por N segundos"; durante esse tempo o cliente nem pergunta. Poupa a ida e volta inteira, e é por isso muito mais eficaz.
O padrão que resolve o dilema entre cache longa e poder atualizar: nome do ficheiro com impressão digital do conteúdo — app.7f3a9c.js — com validade de um ano. Quando o conteúdo muda, o nome muda, e não há nada a invalidar. É o desenho por trás de qualquer processo de construção moderno.
5.5 As versões, em uma linha cada
- HTTP/1.1 — uma resposta de cada vez por ligação. Daí o hábito antigo de juntar ficheiros e abrir várias ligações em paralelo.
- HTTP/2 — vários fluxos na mesma ligação. Elimina a necessidade de juntar ficheiros, e mantém o bloqueio de cabeça de fila do TCP por baixo (cap. 3).
- HTTP/3 — o mesmo sobre QUIC, sem esse bloqueio, e com estabelecimento mais rápido.
A implicação prática: otimizações que faziam sentido em HTTP/1.1 podem prejudicar em HTTP/2 e 3. Juntar tudo num ficheiro gigante deixou de ser vantagem e passou a impedir cache parcial.
Faça um pedido a um site que use e leia todos os cabeçalhos de resposta. Identifique a política de cache, a versão do protocolo e se passou por algum intermediário. Está tudo lá, e quase ninguém olha.
Capítulo 06 Núcleo
TLS: o que é cifrado, e o que não é
Toda a gente sabe que o cadeado significa cifrado. Menos gente sabe o que fica de fora — e é isso que decide o que se pode e não se pode assumir.
6.1 As três garantias
| Garantia | Significa |
|---|---|
| Confidencialidade | Quem está no caminho não lê o conteúdo |
| Integridade | Quem está no caminho não altera sem ser detetado |
| Autenticação do servidor | Está a falar com quem julga — e é esta que faz o trabalho pesado |
Uma ligação cifrada com um impostor está perfeitamente cifrada — e o impostor lê tudo. A verificação do certificado é o que impede isso, e é a parte que mais vezes é desligada "temporariamente" em ambientes de desenvolvimento e fica assim para sempre.
Um cliente que ignora erros de certificado tem cifra e não tem segurança. É um dos erros mais comuns em integrações entre serviços internos, onde se assume que "é rede interna".
6.2 A cadeia de confiança
É a causa de uma classe inteira de problemas com um sintoma característico: o navegador aceita e a chamada a partir de um servidor rejeita. Não é um problema do cliente; é uma cadeia incompleta.
6.3 O que fica visível apesar da cifra
Mesmo com HTTPS, quem observa a rede vê:
- O endereço IP de destino — e portanto, muitas vezes, o serviço.
- A consulta DNS, se não for cifrada — o nome do site, em claro.
- O nome do servidor pedido no início da negociação, que historicamente vai em claro para permitir vários sites no mesmo endereço.
- O volume e o ritmo do tráfego — que revelam mais do que se supõe sobre o que se está a fazer.
O que fica protegido é o caminho, os cabeçalhos e o corpo. HTTPS impede que leiam o que enviou; não esconde com quem falou. É uma distinção que muda o que se pode prometer a um utilizador.
6.4 Certificados na prática
- Automatize a renovação. Certificados expiram, e a expiração é das causas mais frequentes de indisponibilidade — e das mais evitáveis. Renovação automática, com alerta se falhar.
- Vigie o prazo como métrica. Não confie em receber o email de aviso.
- Um certificado por serviço público. Certificados com muitos nomes concentram risco: revogar um afeta todos.
- Internamente também. Serviços internos merecem TLS. "É rede interna" pressupõe que ninguém entra — e o desenho moderno pressupõe o contrário (CyberDevSecOps).
6.5 Terminação: onde a cifra acaba
Em quase todas as arquiteturas, o TLS termina num equipamento à frente — um balanceador ou uma rede de distribuição — e o tráfego segue depois para os servidores. Isso é normal e tem duas consequências que convém ter presentes:
- Quem termina o TLS vê tudo em claro. É um ponto de confiança real, e deve ser tratado como tal.
- O troço interno pode ir sem cifra. Decida-o em consciência, e não por omissão.
Para um serviço seu, inspecione o certificado e a cadeia enviada. Verifique se a intermédia está lá, quando expira, e que autoridades podem emitir para o seu domínio. Três verificações, e evitam três incidentes conhecidos.
Capítulo 07 Núcleo
Latência e largura de banda: a física que não negoceia
São dois números diferentes, e confundi-los faz gastar dinheiro no sítio errado. Um melhora todos os anos; o outro tem um limite que não se ultrapassa.
7.1 A distinção
| Largura de banda | Latência | |
|---|---|---|
| É | Quantos bits por segundo | Quanto tempo até o primeiro bit chegar |
| Analogia | A largura do cano | O comprimento do cano |
| Melhora com | Melhor tecnologia — e tem melhorado muito | Distância menor. E só |
| Limite | Sem limite prático à vista | A velocidade da luz |
Em fibra, a luz percorre cerca de 200 000 km por segundo. Lisboa–Nova Iorque são cerca de 5 500 km, portanto 27 ms só de viagem, e 55 ms de ida e volta no melhor caso teórico. Com equipamentos e desvios no caminho, na prática 80 a 120 ms.
Nenhum contrato de internet reduz isto. É a razão pela qual as redes de distribuição de conteúdo existem: não servem para dar mais banda, servem para encurtar a distância, que é a única forma de reduzir latência.
7.2 Onde a latência se multiplica
Um tempo de ida e volta isolado é irrelevante. O problema é quando se acumulam:
- Pedidos em cadeia são o inimigo. Cada dependência multiplica a latência. Paralelizar o que for independente é a otimização mais rentável que existe.
- O mesmo vale dentro do servidor. Trinta consultas a uma base de dados, uma de cada vez, com 2 ms cada, são 60 ms — que aparecem ao utilizador como lentidão da aplicação.
- Redes móveis acrescentam dezenas de milissegundos antes de qualquer coisa acontecer, e mais ainda se o rádio estiver adormecido. É por isso que uma aplicação rápida no escritório é lenta na rua (IoT).
7.3 Quando mais banda deixa de ajudar
Aumentar a largura de banda melhora muito o tempo de carregamento até certo ponto — e depois deixa praticamente de melhorar. Reduzir a latência melhora sempre, e proporcionalmente.
A razão está no capítulo 3: o TCP começa devagar e vai acelerando, e páginas típicas são feitas de muitos recursos pequenos com dependências entre si. O tempo é gasto em idas e voltas, não em transferir bytes — portanto um cano mais largo não ajuda se o problema é o número de viagens.
Consequência para quem decide: investir em pontos de presença mais próximos rende mais do que investir em capacidade, na maioria dos casos.
7.4 O que fazer, por ordem de retorno
- Reduzir o número de idas e voltas. Reutilizar ligações, paralelizar, juntar o que é sempre pedido em conjunto.
- Aproximar o conteúdo. Cache na periferia da rede, perto de quem pede.
- Não pedir nada. A ida e volta mais rápida é a que não acontece — cache no cliente com validade longa (cap. 5).
- Comprimir. Ajuda quando o conteúdo é grande; irrelevante quando são muitos recursos pequenos.
- Mais banda. Último da lista, e o primeiro que costuma ser proposto.
Meça o tempo de ida e volta até um servidor seu e o débito. Depois conte quantos pedidos em cadeia a sua página faz. Multiplique. É frequente descobrir que a maior parte do tempo percebido é latência acumulada, não transferência.
Capítulo 08 Prática
Quem está no caminho
Entre o cliente e a aplicação há quase sempre mais equipamentos do que se pensa. Saber quais são, e o que cada um faz, é metade do diagnóstico.
8.1 O percurso típico
Cada um destes pode: atrasar, alterar cabeçalhos, terminar a ligação, responder por si, ou descartar em silêncio. E o último é o que produz os problemas mais difíceis.
8.2 O que cada um faz
| Elemento | Faz | Sintoma quando é ele |
|---|---|---|
| Balanceador | Distribui por vários servidores; verifica saúde | 502/504; sessões que se perdem entre pedidos |
| Proxy inverso | Encaminha por caminho ou domínio; termina TLS | Cabeçalhos alterados; limites de tamanho |
| Rede de distribuição | Cache perto do utilizador | Conteúdo desatualizado; comportamento diferente por região |
| Firewall | Filtra por porta, endereço, protocolo | Silêncio — a ligação nunca responde |
| Filtro corporativo | Inspeciona tráfego, por vezes abrindo o TLS | Erros de certificado só naquela rede |
Rejeitar devolve uma recusa imediata: a ligação falha depressa e a mensagem é clara. Descartar não devolve nada: o cliente fica à espera até esgotar o tempo.
É a diferença entre "ligação recusada" — que aponta logo para o serviço ou para a porta — e "tempo esgotado", que pode ser firewall, encaminhamento, ou um servidor sobrecarregado. A distinção é o primeiro dado útil de qualquer diagnóstico (cap. 10).
8.3 O endereço de quem pediu
Com intermediários no caminho, a aplicação vê o endereço do último equipamento, não o do utilizador. Por isso existe a convenção de acrescentar o endereço original num cabeçalho.
Qualquer cliente pode enviá-lo com o valor que quiser. Só é fiável se os seus intermediários o reescreverem, e só se deve confiar na parte que foi acrescentada por equipamento seu.
Usar este cabeçalho tal como vem para limitar taxa, bloquear endereços ou registar auditoria é uma vulnerabilidade — e é comum.
8.4 Verificações de saúde: o detalhe que decide
Um balanceador retira do serviço as instâncias que considera doentes. O que ele pergunta determina a fiabilidade do conjunto:
- Uma verificação superficial — "o processo responde?" — mantém em serviço uma instância que perdeu a ligação à base de dados.
- Uma verificação profunda — que testa dependências — corre o risco oposto: se a base de dados oscila, todas as instâncias são consideradas doentes ao mesmo tempo e o serviço inteiro sai de circulação.
- A prática que resolve: distinguir estou vivo de estou pronto a receber tráfego, e ter cuidado para que a segunda não dependa de algo partilhado por todos. Vale a pena ler isto ao lado de Observabilidade & SRE.
Para um pedido do seu sistema, desenhe todos os equipamentos entre o utilizador e o código, e escreva ao lado de cada um o que ele pode fazer ao pedido. Quase sempre aparece um que ninguém tinha em conta.
Capítulo 09 Método aplicado · Demo
O que acontece entre o Enter e a página
Role devagar. Sete etapas entre carregar Enter e ver a primeira letra — e o orçamento de tempo de cada uma.
Quatro caches antes de alguém perguntar seja o que for
O navegador tem a sua cache, o sistema tem a dele, há ficheiros locais, e só depois se pergunta ao resolvedor — que por sua vez pergunta à raiz, ao servidor do domínio de topo e ao autoritativo (cap. 4).
Quarenta milissegundos, ou zero se já estivesse em cache. E é aqui que se percebe porque uma alteração de DNS "não pega": há quatro sítios diferentes onde a resposta antiga pode estar guardada, cada um com o seu prazo.
Uma ida e volta inteira só para combinar que há conversa
Três mensagens, e nenhuma leva conteúdo útil (cap. 3). São cinquenta milissegundos gastos antes de o servidor saber sequer o que se quer.
É aqui que a distância começa a decidir tudo: este custo é proporcional ao tempo de ida e volta, e o tempo de ida e volta é geografia, não tecnologia (cap. 7).
O certificado é validado aqui, e é aqui que falha
O cliente anuncia o que aceita — incluindo o nome do site, em claro (cap. 6) —, o servidor envia o certificado e a cadeia, e o cliente valida contra as raízes em que já confia.
Mais uma a duas idas e voltas. E é o ponto exato onde falta de cadeia intermédia produz o sintoma mais confuso do capítulo 6: funciona no navegador, falha na chamada entre servidores.
Seiscentos bytes que carregam todo o contexto
Método, caminho, domínio, o que aceita, e os cookies. Vai tudo em cada pedido porque o HTTP não tem memória (cap. 5) — e é essa decisão que permite ao balanceador da etapa seguinte escolher qualquer instância.
Cinco equipamentos, e o TLS acaba no segundo
Rede de distribuição (que não tem isto em cache, por ser personalizado), firewall, balanceador — onde a cifra termina —, proxy inverso, e finalmente a aplicação (cap. 8).
Oitenta milissegundos no servidor, dos quais 45 são três consultas à base de dados feitas em cadeia. Não é tempo de rede e comporta-se como tal: é latência acumulada por dependências, exatamente o problema do capítulo 7 aplicado dentro da máquina.
330 milissegundos para 14 kilobytes
Aqui está o resultado que muda a forma de pensar sobre desempenho: transferiram-se 14 KB e demorou um terço de segundo. Com qualquer ligação moderna, esses bytes viajam em milissegundos.
A largura de banda não explica nada deste tempo. Explicam-no as idas e voltas — cinco delas — e a distância de cada uma. É a demonstração concreta de por que aumentar a capacidade não acelera páginas.
De 330 para 75 milissegundos, sem comprar nada
Quatro cortes, por ordem de facilidade: DNS em cache na segunda visita; ligação reutilizada, que elimina TCP e TLS dos pedidos seguintes; consultas em paralelo em vez de em cadeia, que corta o tempo de servidor quase a metade; e servidor mais próximo, que reduz proporcionalmente todas as idas e voltas restantes.
Nenhum dos quatro é largura de banda. Todos são distância ou número de viagens — que é a conclusão desta apostila inteira, e a razão pela qual a otimização mais proposta é habitualmente a menos eficaz.
Meça as sete etapas para um pedido real do seu sistema — as ferramentas de rede do navegador dão-lhe quase tudo. Some. Depois identifique qual das quatro poupanças de 7 se aplica ao seu caso.
Capítulo 10 Prática
Diagnosticar pela ordem certa
A maior parte do tempo perdido em problemas de rede vem de começar pelo sítio errado. Há uma ordem, e ela elimina metade das hipóteses de cada vez.
10.1 A escada
1 · O nome resolve? Consulte o DNS diretamente. Se falhar, acabou aqui — e a metade dos problemas resolve-se neste degrau (cap. 4).
2 · A máquina é alcançável? Tente chegar ao endereço. Atenção: muitos servidores ignoram pedidos de eco por política, portanto não responder não prova nada.
3 · A porta está aberta? Tente abrir uma ligação à porta. Aqui a distinção do capítulo 8 é o dado principal: recusada aponta ao serviço; tempo esgotado aponta a filtragem ou encaminhamento.
4 · O TLS negoceia? Verifique certificado, cadeia e validade (cap. 6).
5 · A aplicação responde? Faça o pedido com detalhe completo e leia os cabeçalhos e o código de estado.
6 · Responde corretamente? Aqui já não é rede — é a aplicação, e o problema mudou de disciplina.
Cada degrau elimina tudo o que está abaixo. Começar a ler registos da aplicação quando o problema é DNS é gastar uma hora a olhar para o sítio errado — e é o que acontece na maioria das vezes, porque a aplicação é o que se conhece melhor.
A escada é chata de propósito. Cinco minutos a subi-la poupam frequentemente uma tarde.
10.2 As perguntas que estreitam depressa
| Pergunta | Se a resposta for sim |
|---|---|
| Funciona a partir de outra rede? | É a rede de origem: filtro, proxy, DNS local |
| Funciona a partir do próprio servidor? | É o caminho, não a aplicação |
| Falha sempre ou de vez em quando? | Intermitente aponta a uma instância má atrás do balanceador, ou a cache |
| Falha para todos ou para alguns? | Para alguns aponta a DNS, cache regional, ou versão de protocolo |
| Começou quando? | Cruze com alterações, certificados a expirar e mudanças de DNS |
| Falha depressa ou demora? | Depressa: recusa explícita. Demora: descarte silencioso |
10.3 As ferramentas, e o que cada uma responde
- Consulta de DNS — o que responde, de que servidor, com que TTL. Pergunte a dois resolvedores diferentes.
- Traçado de rota — por onde passa e onde para. Interprete com cuidado: muitos equipamentos não respondem e aparecem como falhas que não são.
- Cliente HTTP com detalhe — mostra resolução, ligação, TLS, cabeçalhos e tempos, tudo numa linha de comando. É a ferramenta mais útil da lista.
- Cliente TLS direto — para ver o certificado exatamente como o servidor o envia, incluindo se a cadeia vai completa.
- Estado das ligações locais — quantas abertas, em que estado, quantas à espera. Revela esgotamento de portas e ligações penduradas.
- Captura de pacotes — o último recurso, e o que dá a verdade quando tudo o resto é ambíguo.
10.4 Registar o que interessa
Em cada pedido, registe: um identificador que atravesse todos os serviços, o tempo gasto em cada etapa, que instância respondeu e se veio de cache.
Com estes quatro, a pergunta "porque é que este pedido demorou 3 segundos" tem resposta em minutos. Sem eles, tem resposta em horas ou nenhuma — e a diferença de custo aparece precisamente no pior momento (Observabilidade & SRE).
Escolha um serviço seu e percorra os seis degraus de 10.1, mesmo estando tudo bem. Guarde os comandos num ficheiro. Da próxima vez que algo falhar, tem o procedimento pronto — e não terá de o inventar sob pressão.
Capítulo 11 Crítica
Como a rede falha de forma traiçoeira
As falhas totais são fáceis: nota-se e corrige-se. As perigosas são as parciais, as lentas e as que o próprio sistema amplifica.
11.1 As oito falhas que se repetem
| Falha | Sintoma | Defesa |
|---|---|---|
| Ligação morta que parece viva | Pedidos ficam pendurados; a outra ponta já não existe | Tempos limite em tudo; sinais de vida periódicos |
| Tempestade de repetições | Um serviço abranda, todos repetem, e o abrandamento vira queda | Recuo exponencial com aleatoriedade, e limite de tentativas |
| Buraco negro de tamanho | Pedidos pequenos passam, grandes desaparecem | É um equipamento no caminho a descartar pacotes grandes sem avisar |
| Esgotamento de ligações | Tudo pára embora a carga esteja normal | Limites dimensionados; ligações devolvidas ao conjunto sempre |
| Esgotamento de portas de origem | Falhas ao abrir ligações, sem carga aparente | Reutilizar ligações em vez de abrir e fechar (cap. 2) |
| Cache de DNS desatualizada | Metade dos clientes vai para o sítio antigo | Gerir o TTL antes de mudar (cap. 4) |
| Certificado expirado | Tudo pára de uma vez, à mesma hora | Renovação automática e vigiada (cap. 6) |
| Relógios desalinhados | Certificados "ainda não válidos"; sinais recusados | Sincronização horária, e vigiá-la |
11.2 A tempestade de repetições, em detalhe
Um serviço fica lento. Os clientes esgotam o tempo e repetem. As repetições somam-se à carga original, portanto fica ainda mais lento. Mais repetições. Em segundos, um abrandamento transitório tornou-se uma queda total — causada não pela avaria original, mas pela reação a ela.
Três defesas, e as três são necessárias:
- Recuo exponencial: esperar 1 s, 2 s, 4 s, 8 s. Reduz a taxa de repetições depressa.
- Aleatoriedade: acrescentar variação ao tempo de espera. Sem isto, todos os clientes repetem ao mesmo tempo e criam ondas sincronizadas — é o detalhe mais esquecido e o mais importante.
- Disjuntor: ao fim de N falhas, parar de tentar durante um período. Dá ao serviço a hipótese de recuperar, que repetições contínuas lhe negam.
E uma regra que evita o pior caso: não repetir automaticamente o que não é seguro repetir (cap. 5). Uma cobrança repetida três vezes por um mecanismo automático é um incidente pior do que a falha original.
11.3 Tempos limite: os números que ninguém escolhe
- Por omissão, são quase sempre demasiado longos — por vezes minutos. Um pedido de utilizador que espera 60 segundos já falhou aos 3, do ponto de vista de quem espera.
- Devem diminuir para dentro. Se o utilizador espera no máximo 5 s, a chamada interna não pode ter 10 s de limite — senão o utilizador desiste enquanto o sistema continua a trabalhar para ninguém.
- São vários, e distintos: abrir a ligação, receber o primeiro byte, e concluir. Confundi-los produz comportamentos difíceis de explicar.
- Sem tempo limite, não há falha — há bloqueio. E um bloqueio propaga-se: o serviço que espera fica ele próprio indisponível, e assim sucessivamente.
11.4 O que se assume e não é verdade
É uma lista clássica da computação distribuída e continua a descrever erros atuais. Assume-se, erradamente, que: a rede é fiável; a latência é zero; a largura de banda é infinita; a rede é segura; a topologia não muda; há um só administrador; o transporte não tem custo; a rede é homogénea.
Cada uma destas suposições, feita em silêncio, produz uma classe de bugs. E a mais cara é a primeira: escrever código que trata uma chamada remota como se fosse uma chamada local — sem tempo limite, sem repetição pensada, sem tratar o caso de não se saber se chegou.
11.5 Falhar de forma útil
- Degradar em vez de cair. Se o serviço de recomendações não responde, mostre a página sem recomendações. Uma dependência não essencial não deve derrubar o essencial.
- Falhar depressa. Um erro em 200 ms é melhor que um sucesso em 30 s, porque liberta recursos e permite tentar outra coisa.
- Dizer o que aconteceu. Um erro que distingue "não te consegui alcançar" de "alcancei e recusou" poupa horas a quem diagnostica (UX Writing, cap. 5).
- Isolar. Conjuntos de ligações separados por dependência impedem que um serviço lento consuma todos os recursos e leve o resto com ele.
Liste todas as chamadas de rede que o seu sistema faz e o tempo limite de cada uma. Onde estiver por definir, está o valor por omissão da biblioteca — que muito provavelmente não é o que quer. Verifique também se diminuem para dentro.
Capítulo 12 Ofício
O que fica
Um punhado de reflexos que se aplicam antes de saber qual é o problema — e que resolvem a maior parte deles.
12.1 As seis ideias
1 · A base não garante nada
O IP faz o melhor que pode. Toda a fiabilidade é construída por cima, e é aí que se paga em latência.
2 · Latência é distância
Melhora aproximando, não comprando capacidade. E multiplica-se com cada dependência em cadeia.
3 · Suspeite do DNS primeiro
Está no caminho de tudo, falha de forma assimétrica, e "propagação" é apenas cache a expirar.
4 · Cifrar não é autenticar
A verificação do certificado é a garantia que interessa. E HTTPS esconde o conteúdo, não com quem falou.
5 · Tempo limite em tudo
E que diminuam para dentro. Sem eles não há falha — há bloqueio, e o bloqueio propaga-se.
6 · Repetir tem de ser desenhado
Recuo exponencial, aleatoriedade, limite, disjuntor — e nunca repetir o que não é seguro repetir.
12.2 A lista de verificação de um serviço exposto
1. DNS com mais do que um servidor autoritativo, TTL adequado ao momento, e registo CAA.
2. Certificado com renovação automática e prazo vigiado como métrica.
3. Cadeia intermédia completa — verificada com um cliente que não seja o navegador.
4. Ligações reutilizadas; conjunto dimensionado e com limite.
5. Tempos limite definidos em todas as chamadas, e decrescentes para dentro.
6. Repetições com recuo, aleatoriedade e disjuntor — só onde é seguro repetir.
7. Cache com política explícita, e nomes com impressão digital para o que é estático.
8. Verificações de saúde que distinguem vivo de pronto, sem dependência partilhada por todas as instâncias.
9. Registo com identificador de correlação, tempo por etapa, instância e origem de cache.
10. A escada de diagnóstico (cap. 10) escrita e guardada, antes de fazer falta.
12.3 O que ler a seguir
- DevOps, Docker & Kubernetes — rede de contentores, serviços e resolução interna, onde metade dos problemas é o capítulo 4.
- Observabilidade & SRE — os quatro campos de registo do capítulo 10, à escala de um sistema.
- CyberDevSecOps — o que fazer com o que o capítulo 6 deixa visível.
- Arquitetura & System Design e API Design — idempotência, tempos limite e degradação como decisões de desenho.
- Caching & Redis — a otimização do capítulo 7, a sério.
- Robótica, IoT e Embarcados — as mesmas ideias com um orçamento de energia por cima (cap. 3).
Passe um serviço seu pelas dez verificações de 12.2 e conte quantas falha. Comece pela que for mais barata de corrigir — habitualmente os tempos limite, que são uma linha de configuração e evitam a falha em cascata mais comum que existe.