No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
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
- Implementar
criar_pacoteconstruindo o structPacote - Implementar
verificar_integridadeverificando tamanho e sequência - Implementar
parse_requisicao_httpextraindo método e caminho - Implementar
rotear_pacotemapeando protocolo para fila - Implementar
calcular_checksumsomando bytes módulo 256 - Implementar
filtrar_por_protocolousando iterators - Implementar
calcular_estatisticasagregando dados de pacotes - Implementar
fragmentar_dados_udpusando.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