UFlow
UFlow est une bibliothèque Rust et un protocole réseau UDP pour le transfert de données Internet en temps réel, en mettant l'accent sur la simplicité et la robustesse. Bien qu'il ait été conçu dès le départ, l'interface et les fonctionnalités d'UFlow sont inspirées de la vénérable bibliothèque ENet.
Caractéristiques
- Transfert de données orienté paquets entre deux hôtes
- Fragmentation et réassemblage automatiques des paquets selon le MTU Internet (1 500 octets)
- Prise de contact de connexion à 3 voies pour une gestion appropriée des connexions
- Jusqu'à 64 flux de paquets séquencés indépendamment
- 4 modes de transfert de paquets intuitifs : sensible au temps , peu fiable , persistant et fiable
- Contrôle de congestion de streaming compatible TCP mis en œuvre conformément à la RFC 5348
- Protocole de transfert et de codage de trame efficace avec une surcharge minimale des paquets
- Validation CRC pour toutes les trames transmises (Polynôme : 0x132c00699)
- Débit de paquets de 100 % et ordre de livraison inchangé dans des conditions de réseau idéales
- Gestion étanche des ID de séquence pour une atténuation maximale des duplications
- Limites de mémoire du récepteur configurables par l'application (pour empêcher les attaques d'allocation de mémoire)
- Accusés de réception de données non validés (pour éviter le taux de perte/usurpation de bande passante)
- Résilient à l'amplification DDoS (rapport requête-réponse ≈ 28:1)
- Méticuleusement conçu et testé en unité pour garantir un comportement sans décrochage
- Implémentation sans thread et non bloquante
Documentation
La documentation peut être trouvée sur docs.rs.
Architecture
Bien qu'une version précédente soit décrite dans le livre blanc, beaucoup de choses ont changé dans la bibliothèque entre-temps (y compris le nom !). La version actuelle présente les améliorations suivantes :
- Contrôle de congestion compatible TCP implémenté conformément à la RFC 5348
- Limites de mémoire du récepteur (pour le réassemblage des paquets)
- Pas de paquets ou de trames sentinelles
- Un mode d'envoi de paquets supplémentaire qui entraîne l'abandon des paquets s'ils ne peuvent pas être envoyés immédiatement (Time-Sensitive)
- Aucune itération sur le nombre de canaux
Le nouveau design sera bientôt résumé dans un livre blanc mis à jour.