UFlow
UFlow é uma biblioteca Rust e protocolo de rede UDP para transferência de dados da Internet em tempo real, com foco na simplicidade e robustez. Embora tenha sido projetado desde o início, a interface e a funcionalidade do UFlow são inspiradas na venerável biblioteca ENet.
Características
- Transferência de dados orientada a pacotes entre dois hosts
- Fragmentação e remontagem automática de pacotes de acordo com o MTU da internet (1500 bytes)
- Handshake de conexão de 3 vias para gerenciamento de conexão adequado
- Até 64 fluxos de pacotes sequenciados de forma independente
- 4 modos intuitivos de transferência de pacotes: Sensível ao Tempo , Não Confiável , Persistente e Confiável
- Controle de congestionamento de streaming compatível com TCP implementado de acordo com RFC 5348
- Codificação de quadros eficiente e protocolo de transferência com sobrecarga mínima de pacotes
- Validação CRC para todos os quadros transmitidos (polinômio: 0x132c00699)
- Taxa de transferência de pacotes de 100% e ordem de entrega não afetada em condições de rede ideais
- Gerenciamento de ID de sequência à prova d'água para máxima mitigação de duplicações
- Limites de memória do receptor configuráveis pelo aplicativo (para evitar ataques de alocação de memória)
- Reconhecimentos de dados não validados (para evitar taxa de perda/falsificação de largura de banda)
- Resiliente à amplificação DDoS (proporção solicitação-resposta ≈ 28:1)
- Meticulosamente projetado e testado em unidade para garantir um comportamento livre de travamentos
- Implementação sem thread e sem bloqueio
Documentação
A documentação pode ser encontrada em docs.rs.
Arquitetura
Embora uma versão anterior esteja descrita no white paper, muita coisa mudou na biblioteca nesse meio tempo (incluindo o nome!). A versão atual possui as seguintes melhorias:
- Controle de congestionamento compatível com TCP implementado de acordo com RFC 5348
- Limites de memória do receptor (para remontagem de pacotes)
- Sem pacotes ou frames sentinela
- Um modo adicional de envio de pacotes que faz com que os pacotes sejam descartados se não puderem ser enviados imediatamente (sensível ao tempo)
- Nenhuma iteração sobre o número de canais
O novo design será brevemente™ resumido em um white paper atualizado.