jdougl4/tiny-netstack
GitHub: jdougl4/tiny-netstack
一个用C语言编写的Linux用户态网络栈,用于学习网络协议实现。
Stars: 0 | Forks: 0
tiny-netstack 是我启动的一个项目,旨在更好地理解网络编程及网络协议在底层的工作原理。tiny-netstack 是我正在开发的尝试,使用 C 语言为 Linux 编写一个基于 TAP 接口的用户态网络栈。
除了你的内核可能已经提供的功能外,它并不提供任何实用功能。这更像一个学习练习,用于教授数据包解析、字节序、协议实现、Linux 网络内部机制,以及我在过程中痛苦发现的其他诸多内容。
我当前的实现支持:
- TAP 接口集成
- 以太网帧接收
- 以太网头部解析
- EtherType 识别
- ARP 数据包解析/显示
我对该项目的未来目标包括:
- ARP 应答
- IPv4 解析
- ICMP 回显应答
- 校验和处理
- ARP 缓存
构建说明:
- 克隆并使用 'make' 编译
TAP 接口设置:
- 创建 TAP 接口:sudo ip tuntap add dev tap0 mode tap
- 分配 IPv4 地址:sudo ip addr add 10.0.0.1/24 dev tap0
- 启用它:sudo ip link set tap0 up
- 验证:ip addr show tap0
- 删除它:sudo ip link delete tap0
我编写了一个简单的脚本来自动化 TAP 接口设置——如果你愿意,可以使用它。只需记住运行 "chmod +x scripts/setup_tap.sh"
运行:sudo ./tiny-netstack
我建议在程序运行时打开另一个终端并 ping 你的 TAP 接口。根据你的内核网络状态/ARP 缓存内容,你可能会看到 ARP、IPv4 或 IPv6 流量(仅由 EtherType 标识)、广播帧或邻居发现流量。
标签:ARP协议, ICMP, IPv4, TAP接口, 以太网, 内核驱动, 包解析, 协议实现, 字节序, 客户端加密, 开发学习, 接口编程, 用户空间, 系统编程, 网络内部, 网络协议, 网络学习, 网络工具, 网络工程, 网络底层, 网络栈, 网络编程, 计算机网络