No description
Find a file
2026-09-01 13:13:56 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:13:56 +02:00
src initial content 2026-09-01 13:13:54 +02:00
tests feat: add dependencies and fix signatures for networking lesson 2026-09-01 13:13:56 +02:00
.gitignore Initial commit 2026-09-01 11:13:33 +00:00
Cargo.lock initial content 2026-09-01 13:13:54 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-09-01 13:13:56 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:13:56 +02:00
README.md initial content 2026-09-01 13:13:54 +02:00

Lição 52: Protocolos de Rede (TCP/UDP, HTTP, Sockets)

1. Narrativa

No campo de batalha, os mechas da Academia Æther comunicam-se através de uma rede de protocolos militares. Comandos críticos viajam por TCP — confiável e ordenado — enquanto dados de telemetria são disparados por UDP — rápido e sem garantias. O piloto de elite domina os protocolos de rede para coordenar a esquadra com precisão cirúrgica.

2. Conceito

Protocolos de rede são as regras que governam a comunicação entre sistemas:

  • TCP: Protocolo confiável com entrega ordenada e controle de fluxo
  • UDP: Protocolo sem conexão, rápido mas sem garantias de entrega
  • HTTP: Protocolo de aplicação construído sobre TCP (request/response)
  • Sockets: Pontos de extremidade de comunicação bidirecional

3. Requisitos

  • Modelar pacotes de rede com structs e enums
  • Implementar verificação de integridade (checksum, sequência)
  • Fazer parse de requisições HTTP simplificadas
  • Simular roteamento de pacotes por protocolo
  • Fragmentar dados em pacotes menores

4. Design de Dados

graph LR
    A[Pacote] --> B{Protocolo}
    B -->|Tcp| C[fila_comandos]
    B -->|Udp| D[buffer_telemetria]
    B -->|Http| E[fila_api]
    A --> F[verificar_integridade]
    F --> G[Integro/Corrompido/SeqInvalida]

5. Diagrama de Fluxo

flowchart TD
    A[Pacote Recebido] --> B[Verificar Integridade]
    B --> C{Integro?}
    C -->|Não| D[Descartar / Solicitar Retransmissão]
    C -->|Sim| E[Identificar Protocolo]
    E --> F{Protocolo?}
    F -->|TCP| G[Fila de Comandos]
    F -->|UDP| H[Buffer Telemetria]
    F -->|HTTP| I[Fila API]

6. Funções

Função Descrição
criar_pacote Cria um novo pacote de rede
verificar_integridade Verifica integridade por tamanho e sequência
parse_requisicao_http Faz parse de uma linha HTTP
rotear_pacote Determina fila de destino por protocolo
calcular_checksum Calcula checksum simples (soma mod 256)
filtrar_por_protocolo Filtra pacotes por tipo de protocolo
calcular_estatisticas Calcula estatísticas de transmissão
fragmentar_dados_udp Fragmenta dados em pacotes UDP

7. Exemplo

let pacote = criar_pacote(Protocolo::Tcp, "mecha-01", "base", vec![1, 2, 3], 1);
let integridade = verificar_integridade(&pacote, 3, 1);
assert_eq!(integridade, ResultadoIntegridade::Integro);

let req = parse_requisicao_http("GET /api/status HTTP/1.1").unwrap();
assert_eq!(req.metodo, MetodoHttp::Get);
assert_eq!(req.caminho, "/api/status");

8. Missão

  1. Implementar criar_pacote construindo o struct Pacote
  2. Implementar verificar_integridade verificando tamanho e sequência
  3. Implementar parse_requisicao_http extraindo método e caminho
  4. Implementar rotear_pacote mapeando protocolo para fila
  5. Implementar calcular_checksum somando bytes módulo 256
  6. Implementar filtrar_por_protocolo usando iterators
  7. Implementar calcular_estatisticas agregando dados de pacotes
  8. Implementar fragmentar_dados_udp usando .chunks() com sequência incremental

9. Como Executar

cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check

10. Dicas

  • Use .chunks() para fragmentar dados em pedaços de tamanho fixo
  • HTTP request line: METODO /caminho HTTP/versao — 3 partes separadas por espaço
  • Checksum simples: soma de todos os bytes, resultado em u8 (overflow automático mod 256)
  • TCP prioriza confiabilidade; UDP prioriza velocidade
  • Enums são perfeitos para modelar tipos de protocolo