UFlow
UFlow — это библиотека Rust и сетевой протокол UDP для передачи данных через Интернет в реальном времени с упором на простоту и надежность. Хотя он был разработан с нуля, интерфейс и функциональность UFlow вдохновлены почтенной библиотекой ENet.
Функции
- Пакетно-ориентированная передача данных между двумя хостами
- Автоматическая фрагментация и сборка пакетов в соответствии с MTU Интернета (1500 байт).
- Трехстороннее подтверждение соединения для правильного управления соединением
- До 64 независимо упорядоченных потоков пакетов
- 4 интуитивно понятных режима передачи пакетов: чувствительный ко времени , ненадежный , постоянный и надежный.
- TCP-совместимый контроль перегрузки потоковой передачи, реализованный в соответствии с RFC 5348.
- Эффективное кодирование кадров и протокол передачи с минимальными накладными расходами на пакеты.
- Проверка CRC для всех передаваемых кадров (полином: 0x132c00699)
- 100% пропускная способность пакетов и незатронутый порядок доставки в идеальных сетевых условиях.
- Герметичное управление идентификаторами последовательностей для максимального предотвращения дублирования
- Ограничения памяти приемника, настраиваемые приложением (для предотвращения атак с распределением памяти)
- Подтверждения данных с одноразовой проверкой (для предотвращения подмены скорости потерь/полосы пропускания)
- Устойчивость к усилению DDoS (соотношение запросов-ответов ≈ 28:1)
- Тщательно спроектирован и протестирован для обеспечения бесперебойной работы
- Безпоточная, неблокирующая реализация
Документация
Документацию можно найти на docs.rs.
Архитектура
Хотя в техническом документе описана предыдущая версия, за это время в библиотеке многое изменилось (включая название!). Текущая версия имеет следующие улучшения:
- TCP-дружественный контроль перегрузки реализован в соответствии с RFC 5348.
- Ограничения памяти приемника (для повторной сборки пакетов)
- Никаких дозорных пакетов или кадров.
- Дополнительный режим отправки пакетов, который приводит к отбрасыванию пакетов, если они не могут быть отправлены немедленно (зависит от времени).
- Никаких итераций по количеству каналов
Новый дизайн скоро™ будет описан в обновленном техническом документе.