UFlujo
UFlow es una biblioteca Rust y un protocolo de red UDP para la transferencia de datos de Internet en tiempo real, centrándose en la simplicidad y la solidez. Aunque ha sido diseñado desde cero, la interfaz y la funcionalidad de UFlow están inspiradas en la venerable biblioteca ENet.
Características
- Transferencia de datos orientada a paquetes entre dos hosts
- Fragmentación y reensamblaje automático de paquetes según la MTU de Internet (1500 bytes)
- Protocolo de enlace de conexión de 3 vías para una gestión adecuada de la conexión
- Hasta 64 flujos de paquetes secuenciados independientemente
- 4 modos intuitivos de transferencia de paquetes: sensible al tiempo , no confiable , persistente y confiable
- Control de congestión de streaming compatible con TCP implementado según RFC 5348
- Protocolo de transferencia y codificación de tramas eficiente con una sobrecarga mínima de paquetes
- Validación CRC para todas las tramas transmitidas (polinomio: 0x132c00699)
- Rendimiento de paquetes del 100 % y orden de entrega no afectado en condiciones de red ideales
- Gestión hermética de ID de secuencia para máxima mitigación de dup
- Límites de memoria del receptor configurables por la aplicación (para evitar ataques de asignación de memoria)
- Confirmaciones de datos no validados (para evitar la suplantación de tasa de pérdida/ancho de banda)
- Resistente a la amplificación DDoS (relación solicitud-respuesta ≈ 28:1)
- Meticulosamente diseñado y probado en unidad para garantizar un comportamiento libre de pérdidas.
- Implementación sin bloqueo y sin hilos
Documentación
La documentación se puede encontrar en docs.rs.
Arquitectura
Aunque se describe una versión anterior en el documento técnico, desde entonces muchas cosas han cambiado en la biblioteca (¡incluido el nombre!). La versión actual tiene las siguientes mejoras:
- Control de congestión compatible con TCP implementado según RFC 5348
- Límites de memoria del receptor (para reensamblaje de paquetes)
- Sin paquetes ni marcos centinela
- Un modo de envío de paquetes adicional que hace que los paquetes se descarten si no se pueden enviar inmediatamente (sensible al tiempo)
- Sin iteración sobre el número de canales.
El nuevo diseño pronto™ se resumirá en un documento técnico actualizado.