Skip to content

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的事件循环
  • 处理多种事件源和数据流的统一接口

数据流程

  1. 发送流程
  2. 应用数据 → TCPSenderMessage → TCPSegment → IPv4Datagram → TUN设备 → 内核网络栈

  3. 接收流程

  4. 内核网络栈 → TUN设备 → IPv4Datagram → TCPSegment → TCPReceiverMessage → 应用数据