Progresso0%

Visão Geral — Os 7 Passos

📖 O cenário

Você abre o Chrome, digita https://github.com e aperta Enter. Em menos de um segundo, a página carrega. O que aconteceu nesse tempo? Vamos destrinchar cada passo.

1
Você digita a URL
O navegador analisa a URL: protocolo (https), domínio (github.com), caminho (/). Antes de qualquer coisa, precisa descobrir o endereço IP de github.com.
https://github.com/
2
Resolução DNS
O navegador consulta o cache DNS local → SO → servidor DNS recursivo → servidores raiz → TLD → autoritativo. Resultado: github.com = 140.82.114.3
github.com → 140.82.114.3
3
Conexão TCP (Three-Way Handshake)
Com o IP em mãos, o navegador abre uma conexão TCP na porta 443. São trocados três pacotes: SYN → SYN-ACK → ACK. Conexão estabelecida.
SYN → SYN-ACK → ACK
4
Handshake TLS
Como é HTTPS, cliente e servidor negociam criptografia, trocam certificados e derivam chaves de sessão. A partir daqui, tudo é criptografado.
Client Hello → Server Hello → Certificado → Chave de sessão
5
Requisição HTTP GET
Dentro do túnel TLS, o navegador envia: GET / HTTP/1.1, Host: github.com, Accept: text/html, User-Agent: Chrome/xxx e outros headers.
GET / HTTP/1.1 → Host: github.com
6
Resposta do Servidor
O servidor responde: HTTP/1.1 200 OK, Content-Type: text/html, e o corpo com o HTML da página. Pode também redirecionar (301/302) ou dar erro (404, 500).
HTTP/1.1 200 OK → HTML, CSS, JS
7
Renderização do Navegador
O navegador analisa o HTML, baixa CSS e JavaScript referenciados (mais requisições HTTP!), executa o JS, monta o DOM e renderiza a página visualmente.
HTML → DOM → CSSOM → Render Tree → Paint

Resolução DNS — Passo a Passo

📖 Como a resolução DNS funciona

A resolução DNS parece simples, mas tem vários servidores envolvidos. Entender isso ajuda a diagnosticar problemas de "site não carrega".

  • Cache do navegador: primeiro lugar consultado. Guarda respostas recentes.
  • Cache do SO: C:\Windows\System32\drivers\etc\hosts e cache do sistema.
  • Servidor DNS Recursivo: geralmente seu provedor ou DNS público (8.8.8.8 do Google, 1.1.1.1 da Cloudflare). Faz o trabalho duro consultando os outros.
  • Servidores Raiz (Root): 13 endereços de servidores raiz no mundo (a.root-servers.net até m.root-servers.net). Sabem onde estão os servidores TLD.
  • Servidor TLD: gerencia extensões como .com, .org, .br. Sabe quais são os servidores autoritativos de cada domínio.
  • Servidor Autoritativo: tem a resposta final. É onde o dono do domínio cadastrou os registros DNS. Diz: "github.com = 140.82.114.3, TTL = 60 segundos".
⚡ TTL — Time to Live

Cada resposta DNS tem um TTL (em segundos) que diz por quanto tempo ela pode ser cacheada. TTL baixo (60s) = mudanças propagam rápido. TTL alto (86400s = 24h) = menos consultas, mas mudanças demoram para propagar. Quando você troca o DNS de um domínio, espere o TTL anterior expirar.

Three-Way Handshake TCP

Three-Way Handshake — Estabelecimento de Conexão TCP

🖥️ Seu Computador (Cliente) 🌐 Servidor (github.com)
1
SYN →
"Olá! Quero conectar. Meu número de sequência inicial é 1000."
2
← SYN-ACK
"Recebi seu SYN (1000). Aceito a conexão. Meu número inicial é 5000. Aguardo seu ACK."
3
ACK →
"Recebi seu SYN-ACK (5000). Conexão estabelecida! Pode começar."
📖 Por que três passos?

O handshake garante que ambos os lados estão prontos para comunicar e que a conexão é bidirecional. Com dois passos, o cliente saberia que o servidor recebeu o SYN, mas o servidor não teria confirmação de que o cliente recebeu o SYN-ACK. O terceiro passo (ACK) fecha esse ciclo.

Os números de sequência (SEQ) são usados para ordenar os segmentos TCP e detectar perda de pacotes. Cada byte de dados incrementa o número de sequência.

Handshake TLS

📖 Explicação

Depois do handshake TCP, se é HTTPS, acontece o handshake TLS. No TLS 1.3 (atual):

  1. Client Hello: cliente envia versão TLS suportada, algoritmos de criptografia suportados (cipher suites) e um número aleatório.
  2. Server Hello: servidor escolhe o cipher suite, envia número aleatório, e o certificado digital.
  3. Verificação do certificado: o navegador verifica se o certificado foi emitido por uma CA confiável (embutida no SO/navegador), se o domínio bate e se não está expirado.
  4. Troca de chaves: usam criptografia de chave pública para estabelecer um segredo compartilhado (sem nunca enviá-lo pela rede).
  5. Derivação da chave de sessão: ambos derivam a mesma chave simétrica a partir do segredo.
  6. Finished: ambos confirmam que o handshake foi bem-sucedido. Comunicação criptografada começa.
⚡ TLS 1.3 é mais rápido

O TLS 1.3 reduziu o handshake para apenas 1 round-trip (antes eram 2). Em conexões repetidas ao mesmo servidor, o TLS 1.3 com 0-RTT pode até eliminar completamente o handshake, enviando dados na primeira mensagem.

Requisição HTTP e Resposta

📖 Estrutura de uma Requisição HTTP
GET /index.html HTTP/1.1
Host: github.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120
Accept: text/html,application/xhtml+xml
Accept-Language: pt-BR,pt;q=0.9
Connection: keep-alive
Cookie: _gh_sess=xxxxx

E a resposta do servidor:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 15432
Cache-Control: no-cache
Set-Cookie: _octo=GH1.xxx; SameSite=Strict

<!DOCTYPE html>
<html lang="en">...
🔍 Códigos de Status HTTP mais importantes
CódigoSignificadoQuando ocorre
200OKRequisição bem-sucedida
201CreatedRecurso criado com sucesso (POST)
301/302Moved Permanently/TemporarilyRedirecionamento
304Not ModifiedUse o cache — não mudou
400Bad RequestRequisição malformada
401UnauthorizedPrecisa autenticar
403ForbiddenAutenticado mas sem permissão
404Not FoundRecurso não existe
500Internal Server ErrorBug no servidor
503Service UnavailableServidor sobrecarregado ou em manutenção

Renderização do Navegador

📖 Do HTML à tela
  1. HTML parsing: navegador lê o HTML e constrói o DOM (Document Object Model) — uma árvore de elementos.
  2. Requisições adicionais: ao encontrar <link rel="stylesheet"> e <script src="...">, faz novas requisições HTTP para buscar CSS e JS.
  3. CSS parsing: constrói o CSSOM (CSS Object Model).
  4. Render Tree: combina DOM + CSSOM para construir a árvore de renderização — apenas os elementos visíveis.
  5. Layout (Reflow): calcula a posição e tamanho de cada elemento na tela.
  6. Paint: pinta os pixels na tela.
  7. Composite: combina as camadas em uma imagem final.

Enquanto isso, o JavaScript pode modificar o DOM dinamicamente, causando novos ciclos de layout e paint (por isso JS pesado torna páginas lentas).

📝 Resumo do fluxo completo

Digitar URL → Verificar cache DNS → Consultar DNS → Obter IP → Three-way handshake TCP → Handshake TLS → Enviar HTTP GET → Receber HTML → Parsear HTML → Buscar CSS/JS → Construir DOM/CSSOM → Renderizar → Exibir página.

Tudo isso em <500ms em condições normais. Cada etapa pode ser um ponto de falha quando algo dá errado.

🃏 Flashcards — Acesso a Site

1 / 6
Clique para ver a resposta
Resposta

📝 Quiz — Acesso a Site