78 lines
3.1 KiB
Markdown
78 lines
3.1 KiB
Markdown
# 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
|