PIP 一个高性能低内存使用的用户空间的 TCP/IP 网络栈

2023-03-28 10:13:30 +08:00
 plumk

pip

一个内存使用极少的轻量级的单线程 TCP/IP 协议栈, 当前支持 IP, IPv6, ICMP, TCP, UDP.

当前只在 macOS, iOS 平台测试通过

注意

  1. MTU 默认为 9000
  2. TCP 每个数据包超时时间为 2 秒, 重传 2 次
  3. 自身 window 固定为 65535, 对方 window 兼容 window scaling
  4. 没有做线程安全处理, 多线程使用请注意处理线程冲突

性能测试

测试平台

测试流程

  1. 开启 iperf3 服务端
  2. 建立 utun network interface, 设置 MTU 为 9000
  3. 路由 1.1.1.1 到该 utun interface
  4. 开启 iperf3 客户端并指定地址为 1.1.1.1
  5. 重定向 1.1.1.1 到 127.0.0.1 以连接到 iperf3 服务端

数据流向示意

本机 iperf3 客户端<->pip<->tcp socket<->本机 iperf3 服务端

上传测试

~ iperf3 -c 1.1.1.1
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  7.04 GBytes  6.05 Gbits/sec                  sender
[  5]   0.00-10.00  sec  7.04 GBytes  6.05 Gbits/sec                  receiver

下载测试

~ iperf3 -c 1.1.1.1 -R
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec  2.20 GBytes  1.88 Gbits/sec                  sender
[  5]   0.00-10.00  sec  2.16 GBytes  1.86 Gbits/sec                  receiver

地址: https://github.com/zx1262111739/pip

不要在意名字与 Python 的 pip 重合, 由于我自己取的网名为 plumk 取首字母 p 加上 ip 得出的这个名字,所以我也不准备改.

我的 C++水平属于边写边学的那种, 对于移植 windows 和 linux 有点困难. 路漫漫其修远兮, 吾将上下而求索.

1402 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/927750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX