#userspace #tcp #stack #tun #space #user #minimum

fake-tcp

一个基于TUN接口、用户空间、异步且高性能的TCP协议栈,支持最小开销的基于数据包的隧道传输

13个不稳定版本 (4个破坏性版本)

0.5.0 2022年10月25日
0.4.0 2022年4月16日
0.3.1 2022年4月10日
0.2.3 2021年12月7日
0.2.0 2021年11月19日

#23 in #minimum

每月24次下载
用于phantun

MIT/Apache

30KB
590

fake-tcp

一个基于TUN接口、用户空间、异步且高性能的TCP协议栈,支持最小开销的基于数据包的隧道传输。

许可证

版权所有2021 Sun Datong [email protected]

许可协议:Apache License, Version 2.0 <LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0> 或 MIT许可证 <LICENSE-MIT 或 https://opensource.org/licenses/MIT>,任选其一。项目中的文件不得复制、修改或分发,除非符合上述条款。


lib.rs:

一个基于用户空间的最小TCP数据报协议栈

概述

fake-tcp 是一个可复用的库,使用TUN接口在用户空间实现最小TCP协议栈。它允许程序发送数据报,就像它们是TCP连接的一部分一样。 fake-tcp 已测试能够在各种NAT和状态防火墙中通过,同时完全保留某些期望的行为,如乱序交付和无拥塞/流量控制。

核心概念

fake-tcp 库的核心由两个结构组成。 StackSocket

Stack

Stack 代表一个在第三层运行的虚拟TCP协议栈。它负责:

  • TCP主动和被动打开以及握手
  • RST 处理
  • 与第三层的TUN接口交互
  • 将传入的数据报分配给相应的 Socket

Socket

Socket 表示一个TCP连接。它将标识元组 (src_ip, src_port, dest_ip, dest_port) 注册到 Stack 中,以便可以使用通道将传入的数据包分配到正确的 Socket。这也是客户端用于发送/接收数据报的接口。

示例

请参阅 client.rsserver.rs 文件,了解如何在客户端/服务器模式下使用此库。

依赖项

~9–20MB
~261K SLoC