1个不稳定版本
0.0.2 | 2020年2月8日 |
---|
#46 in #ethernet
1MB
20K SLoC
Ethox
Ethox 是一个独立的网络和unikernel系统库,重点在于 速度 和稳定性。它包含将功能编译成完整网络堆栈的基本结构。它也可能对裸机微控制器有用,但它并非为此主要目标而设计。
作为一致性能承诺的一部分,Ethox 限制自己永不执行内部分配。然而,用户可以选择在认为必要的地方这样做。它仅针对 stable
和 nightly
Rust,并且不旨在与以前的稳定版本兼容。
概述和功能
初始功能集将是 eth+(ipv4|ipv6)+(udp+tcp)
。还支持 arp
和 icmp
。更完整的功能列表请参见下文 详情。
用法
Ethox 的主要接口围绕零拷贝构建,尽可能长时间。它不是基于套接字,而是基于动态构建的特质实现者树,这些实现者提供特定层功能、数据包接收和传输的回调。数据包缓冲区在这些回调中永远不会 拥有,而是对网络设备特定结构的可变、唯一的引用,该结构可以随意调整大小和重用。在网卡级别启用了数据包的入站和出站批处理。在上面的层中没有提供批处理。
许可证
Ethox 在AGPLv3下分发(原因)。目前,仅接受放弃版权的贡献,以便将来可以自由选择其他许可选项。未来可能会有所放宽这些条件。
原始网络代码的大部分内容来自 smoltcp
,版权 whitequark@whitequark.org
,根据其0-clause BSD许可证的条款在此处重述和修改。它可能已经发生了很大变化。
详情
每层更多的详细信息,包括支持、不支持和正在开发中的功能。请注意,这可能仍然会迅速演变,可能不是最新的。这也记录了可能的未来添加项。
Ethernet
Ethernet 是唯一支持的中介/链路层。
- 支持常规的 Ethernet II 帧。
- 支持单播和广播数据包(不支持组播)。
- 不支持 802.3 帧和 802.1Q。
- 不支持 Jumbo 帧。
IPv4
- 生成并验证 IPv4 报头校验和。可能被忽略。
- 支持 CIDR 表。
- 不支持 每路由 QoS 和 TTL。
- 支持链路本地路由。
- 支持广播和网络寻址。
- 支持前缀 31 和 32 网络。
- 不支持 IGMP。
- 不支持 IPv4 分片。
- 不支持 IPv4 选项,并静默丢弃。
IPv4 — Icmpv4
- 生成 Icmpv4 回显响应。
- 支持 Icmpv4 报头校验和。
- 可以将消息(包括不可达错误)传递到自定义接收器逻辑。
- 不支持 生成 Icmpv4 错误。
IPv4 — Arp
- ARP 数据包(请求和查询)自动执行并支持。
- ARP 条目定期重新验证(1 分钟)。
- 不支持 随意请求和回复,并忽略。
- 不支持 自动配置和冲突检测。
IPv6
- 不支持 IPv6 选项。
- 不支持 IPv6 分片。
IPv6 — Icmpv6
尚未 支持。
IPv6 — NDISC
不支持 邻居发现。
Tcp
- 生成并验证报头校验和。可能被忽略。
- 消息的零复制接收和发送,所有缓冲区均受用户控制。
- 遵循最大分段大小。
- 协商并利用 Windows 缩放。可能被配置。
- 提供用于任意长度重组的预定义结构。
- 飞行中的字节数不受段大小限制。
- 初始序列号根据 rfc6528(keyed siphash-2-4)生成。
- 不支持 指数退避。
- 忽略 选择性确认。
- 未实现 拥塞控制。
- 未实现 往返时间估计。
- 未实现 MTU 发现。
- 未实现 延迟确认。
- 未实现 避免愚蠢窗口综合症。
- 未实现 Nagle 算法。
- 不支持 时间戳。
- 忽略 紧急指针。
- 未实现 探测零窗口。
Udp
- 生成,验证报头校验和,可省略,可能被忽略。
- 消息的零复制接收和发送
为什么是 AGPL
我可能最终会想将所有内容重新许可给最宽松的许可,以符合原始库的精神。然而,我目前无法承诺积极开发这个库。我希望这个许可能够鼓励用户,尤其是那些有成品产品的用户,贡献代码并扩大范围。如果您不同意这种立场,无论是从伦理、法律还是其他方面,那么欢迎发送一封详细说明您观点的友好电子邮件。
依赖项
~515KB
~12K SLoC