3 个不稳定版本
0.2.1 | 2024 年 4 月 14 日 |
---|---|
0.2.0 | 2024 年 4 月 14 日 |
0.1.0 | 2024 年 1 月 23 日 |
#1351 in 网络编程
230KB
5K SLoC
redpine-rs
Redpine 是一个面向连接的 UDP 消息库。它为实时互联网应用提供了自动分片、可靠投递、拥塞避免和健壮的连接管理。
尽管底层协议是从头开发的,但 Redpine 基于古老的 ENet 拥有一个事件驱动 API,并且是根据其前辈 UFlow 开发过程中学到的经验编写的。特别是,Redpine 对 UFlow 做了四个关键改进
事件驱动,可选阻塞实现
用户不再需要不断调用 service(...)
来交换数据,服务器也不再迭代连接客户端的列表。相反,Redpine 通过安排计时器和在内部套接字上阻塞时自动唤醒来生成 API 事件。仍提供了一个基于轮询的不阻塞调用。
简化拥塞控制
不使用数学繁重的 TFRC 实现,而使用轻量级的拥塞避免算法,类似于 TCP Reno。这和前面的点应该会增加服务器可以处理的并发连接数,并且可能会总体上提高 TCP 友好性。未来将考虑基于 TCP CUBIC 的算法。
简化数据包流模型
Redpine 不再使用许多支持发送模式混合的虚拟数据包通道。相反,数据包片段从两个发送队列中的一个按轮询方式发送:一个包含可靠数据包数据的队列,另一个包含不可靠数据包数据的队列。对于不可靠队列中的数据包,用户指定数据包在过期前可以持续多长时间。
认为这种模型足以满足大多数实时互联网应用。然而,用于减轻可靠队列中头阻塞的面向通道的方法仍在考虑之中。(坦白说,考虑到在应用级别总会有一些重新排序,我无法想出一个合理化先前序列化模型复杂性的用例。)
4 向,SipHash 验证握手
当服务器收到客户端的初始握手时,服务器不会分配任何资源,而是回复将要保存的数据,并用SipHash MAC进行签名。一旦客户端重复发送此数据+MAC,向服务器证明已发送之前的握手帧,并且客户端处于它所声称的地址,连接就会建立。通过这种方式防止地址欺骗,Redpine对DDoS攻击的抵抗力更强。
待办事项
-
在MTU中考虑IPv6头部大小
-
公开MTU的配置
-
找出数据限制的拥塞避免方法
-
在文档中添加概述
依赖关系
~2–11MB
~128K SLoC