# Infra & Redes — Estudo _Fonte: project-based-learning_ --- ## 📚 Recursos Estudados | Tutorial | Conceito | |----------|----------| | [TCP/IP Stack](http://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/) | Ethernet, ARP, IPv4, ICMP, TCP | | [Servidores Concorrentes](https://eli.thegreenplace.net/2017/concurrent-servers-part-1-introduction/) | Threads, Event-driven, libuv, Redis | | [MQTT Broker](https://codepr.github.io/posts/sol-mqtt-broker) | Protocolo MQTT, pub/sub | | [Linux Containers](https://blog.lizzie.io/linux-containers-in-500-loc.html) | Namespaces, cgroups, chroot | | [Key-Value Store](http://codecapsule.com/2012/11/07/ikvs-implementing-a-key-value-store-table-of-contents/) | Storage engine, indexing | | [Redis em C/C++](https://build-your-own.org/redis/) | Protocolo Redis, persistência | ## 🎯 Aplicações para Mundo Telecom 1. **Container customizado** para deploy isolado (entender o que o Docker faz) 2. **Broker MQTT** para IoT/monitoramento de equipamentos 3. **KV Store** para cache distribuído (substituto Redis em cenários simples) 4. **Proxy reverso** customizado (entender como NPM funciona por baixo) ## 📝 Conceitos Aprendidos ### Pilha TCP/IP | Camada | Protocolo | Função | |--------|-----------|--------| | 2 - Enlace | Ethernet, ARP | MAC addresses, frame delivery | | 3 - Rede | IPv4, ICMP | Roteamento, ping, TTL | | 4 - Transporte | TCP | Conexão, confiabilidade, controle de fluxo | | 4 - Transporte | UDP | Datagrama, sem conexão, baixa latência | | 7 - Aplicação | HTTP, MQTT, Redis | Protocolos de aplicação | ### TCP em Detalhe - **Handshake**: SYN → SYN-ACK → ACK - **State Machine**: LISTEN, SYN_SENT, ESTABLISHED, CLOSE_WAIT, TIME_WAIT... - **Controle de Congestionamento**: Slow Start, Congestion Avoidance, Fast Retransmit - **Janela Deslizante**: Controle de fluxo (não enviar mais do que o receiver pode processar) ### Servidores Concorrentes | Modelo | Prós | Contras | |--------|------|---------| | Threads (1 thread/cliente) | Simples, blocking I/O | Escalabilidade limitada, overhead | | Event-driven (select/poll/epoll) | Alta performance, single-thread | Complexidade, non-blocking I/O | | Híbrido (Redis, Nginx) | Balanceado | Complexidade média | ### Linux Containers - **Namespaces**: isola recursos (PID, NET, MNT, UTS, IPC, USER) - **Cgroups**: limita recursos (CPU, memória, I/O) - **chroot**: isola sistema de arquivos - **Unshare + Clone**: syscalls para criar namespaces ### Nosso Setup vs Teoria | Componente | O que usamos | Como funciona por baixo | |-----------|-------------|------------------------| | Containers | LXC no Proxmox | Namespaces + cgroups | | Proxy Reverso | NPM (nginx) | Event-driven, epoll | | DNS | Pi-hole (10.0.20.5) | DNS server interno | | Banco | SQLite, PostgreSQL | Páginas, índices B-tree | | Cache | (futuro Redis) | KV store in-memory | ## ✅ Progresso - [x] Pilha TCP/IP (Ethernet, ARP, IP, TCP) - [x] Servidores Concorrentes (threads, event-driven) - [x] MQTT Broker - [x] Linux Containers (namespaces, cgroups) - [x] Key-Value Store / Redis - [ ] Projeto prático: servidor TCP simples em C/Python - [ ] Projeto prático: container customizado