Minnow协议栈的核心组件
1. 核心数据结构
TCP消息结构
- TCP消息体系:
TCPMessage
:包含发送方和接收方的完整消息TCPSenderMessage
:发送方的数据(序列号、SYN/FIN标志、负载)TCPReceiverMessage
:接收方的确认信息(确认号、窗口大小)
IP层结构
- IP数据报:
InternetDatagram
/IPv4Datagram
:完整的IP数据包表示IPv4Header
:详细的IP头部实现
2. 协议适配层
TCP/IP转换
TCPOverIPv4Adapter
:- 核心函数:
wrap_tcp_in_ip()
- 将TCP段封装到IP数据报中 - 核心函数:
unwrap_tcp_in_ip()
- 从IP数据报解析TCP段
用户空间/内核转换
TCPOverIPv4OverTunFdAdapter
:- 负责在TUN设备和TCP/IP协议栈间转换数据
- 实现了
TCPDatagramAdapter
概念,提供统一接口
3. 连接管理
TCP连接状态机
TCPPeer
:- 管理TCP连接的完整状态
- 处理消息的收发、确认、超时和连接终止
- 实现全双工数据流
多线程套接字
TCPMinnowSocket
:- 在单独线程中运行TCP协议状态机
- 提供与标准套接字类似的API
- 用户友好的连接处理
4. 虚拟网络设备
TUN/TAP设备接口
TunFD
/TapFD
:- 连接用户空间程序与内核网络栈
- 提供对IP数据包或以太网帧的访问
5. 实用工具
序列化与解析
Parser
/Serializer
:- 负责网络协议数据的序列化和反序列化
事件处理
EventLoop
:- 基于poll的事件循环
- 处理多种事件源和数据流的统一接口
数据流程
- 发送流程:
-
应用数据 → TCPSenderMessage → TCPSegment → IPv4Datagram → TUN设备 → 内核网络栈
-
接收流程:
- 内核网络栈 → TUN设备 → IPv4Datagram → TCPSegment → TCPReceiverMessage → 应用数据