
title: 00-series-indexcategories:LWIPtags:LWIPabbrlink: 8c3324b0date: 2026-10-03 16:27:36lwIP Source Lab 教程索引本系列持续跟踪官方lwip-tcpip/lwip的master。绝大多数源码篇采用Source-driven主线从当前行为的真实入口函数、注册入口或外部 API 开始沿实际调用、数据与状态变化向下追踪。Stage 00、15、31、38 与 45 属于Theory of Operation / Application Note型总览先建立系统位置和完整数据流再解释关键机制它们不会覆盖后续源码篇“从真实入口开始”的硬约束。Stage 0045Stage 00从网线上的电信号到 lwIP——PHY、MAC、DMA 与netif的完整边界从 Ethernet Frame、PHY/MAC 分层出发沿 DMA/Driver、pbuf、netif 建立完整软硬件边界并区分链路、接口、IP 与上层就绪状态。Stage 01从 upstreammaster到第一条可读源码链——Linux Host、构建树与源码地图沿 submodule、Host 依赖、Debug build tree、compile database 与 VS Code 索引走完第一次可构建、可跳转的源码阅读环境。Stage 02从main()到第一次 Ping——netif、TAP、ARP 与 ICMP 的完整源码链从 Unix example_app 的真实入口出发沿 netif、TAP、ARP、IPv4、ICMP 与收发路径追踪一次真实 Ping并用实际 PCAP 与源码逐字段互证。Stage 03从low_level_input()到pbuf_free()——pbuf的数据视图、Chain 与引用计数从 TAP 接收路径里的第一次 pbuf allocation 出发理解 payload、长度、Chain、类型与引用计数如何共同描述一个 packet。Stage 04从ethernet_input()到 Echo Reply——Ethernet、ARP、IPv4 与 ICMP 的分层数据通路用 Stage 2 的真实四帧 Ping 抓包对照 lwIP 源码理解 EtherType、ARP opcode、IPv4 Protocol、ICMP Type 和 pbuf 数据视图如何逐层驱动分发。Stage 05从udpecho_raw_init()到 Echo Reply——UDP Raw API、PCB 与回调数据通路从 upstream Raw UDP Echo 的真实初始化入口开始追踪 PCB 建立、端口匹配、pbuf ownership、回调执行和 UDP Echo 回包路径。Stage 06从udpecho_thread()到 Socket——Netconn、Mailbox 与顺序式 API沿 upstream Netconn UDP Echo 的 application thread 路径理解 Netconn、netbuf、mailbox、Core Locking以及 Socket API 如何继续封装 Netconn。Stage 07从tcpecho_raw_init()到ESTABLISHED——TCP 三次握手与 PCB 状态机从 upstream Raw TCP Echo 的监听入口出发沿 TCP 输入、监听与状态处理链追踪 passive open理解 LISTEN PCB、连接 PCB、Sequence Number 和三次握手状态迁移。Stage 08从tcp_write()到 ACK 清队列——TCP 数据发送、窗口与回调沿 Raw TCP Echo 的真实数据路径理解 TCP 写入如何形成待发送队列、输出如何进入待确认队列以及 ACK 如何释放 segment、恢复发送额度并触发 callback。Stage 09从tcp_slowtmr()到 Fast Retransmit——TCP 超时重传与重复 ACK从 Stage 8 的待确认队列继续追踪理解 lwIP 如何用重传超时与重复 ACK 两类 loss signal 触发重传并改变 congestion-control 状态与发送队列。Stage 10从tcp_receive()到ooseq/ SACK——TCP 乱序、重组与选择确认从 seqno 大于 rcv_nxt 的真实接收条件出发理解 lwIP 如何保存乱序 segment、裁剪重叠、在 gap 补齐后重组连续数据以及 SACK 如何反馈已收到的离散 range。Stage 11从tcpip_init()到sys_arch——线程、Mailbox、Timer、Semaphore 与 Core Locking从 tcpip_init 与 tcpip_thread 主循环追踪 mailbox、timeout、semaphore、mutex 和 Core Locking理解 Core thread 与 Unix Port 的运行边界。Stage 12从pbuf_alloc()/tcp_new()到资源回收——mem、memp与pbuf内存体系把 pbuf、UDP/TCP PCB、TCP segment、Netconn 与 tcpip message 放回统一资源模型理解 variable heap、typed pools 与 packet-buffer policy。Stage 13从dhcp_start()到DHCP_STATE_BOUND——DHCPv4、ACD、Timer 与真实抓包从 example_app 的 DHCP 入口追踪 DORA、UDP 回调、ACD、地址绑定与租约 Timer并用真实 13 帧 PCAP 验证状态迁移。Stage 14从dns_gethostbyname()到dns_found()——DNS Resolver、UDP PCB、Cache、Timer 与异步回调从 example_app 的 DNS 请求入口追踪 resolver、UDP PCB、Cache、Timer 与异步回调并用 6 帧真实 PCAP 验证 DHCP Option 6、随机源端口、TXID、A 记录和 TTL。Stage 15IPv4 与 IPv6——从网络层工作原理到嵌入式工程取舍从前 14 篇已经建立的 IPv4 主线出发对照 IPv6 的地址、邻居发现、自动配置、ICMP、分片、DNS 与过渡机制并说明 MCU、Linux 与云场景需要掌握到什么程度。Stage 16从 MTU 到ip4_frag()/ip4_reass()——IPv4 分片、重组、超时与内存压力沿 IPv4 发送与接收源码链理解 MTU 如何触发分片、Offset/MF/ID 如何组织片段以及 lwIP 怎样排序、重组、超时清理并限制资源占用。Stage 17从IP_ADD_MEMBERSHIP到igmp_input()——IPv4 Multicast、IGMPv2、MAC Filter 与组成员状态机从 RTP Socket 的 IP_ADD_MEMBERSHIP 入口追踪 IGMPv2 加组、Report/Query/Leave、100 ms Timer、报告抑制与 multicast MAC 映射。Stage 18从udp_sendto()到netif-output()——Multi-netif 路由选择、Default Netif、Gateway 与 IPv6 Source Selection从 UDP/TCP 真实发送入口追踪多 netif 出口选择、默认接口、IPv4 Gateway、IPv6 ND 路由与源地址选择并说明显式绑定接口和 route hook 的边界。Stage 19从ip_chksum_pseudo()到netif-linkoutput()——lwIP 校验和、Checksum Offload 与驱动边界沿 UDP/TCP 的真实收发路径解释 lwIP Internet checksum、pseudo header、per-netif checksum 控制并明确软件校验和与 MAC/DMA 硬件卸载之间的驱动职责边界。Stage 20从netif-linkoutput()到pbuf_custom——Ethernet Driver、DMA Buffer、所有权与 Zero-copy从 lwIP 的 linkoutput 边界进入真实 Ethernet Driver追踪 pbuf chain、DMA buffer、custom pbuf、Cache 一致性与 zero-copy 的所有权闭环。Stage 21从 DMA Descriptor Ring 到netif-input()——ISR、Polling、TX Completion 与 Backpressure沿真实 Ethernet Driver 边界解释 TX/RX descriptor ring、OWN 状态、ISR 与 polling、资源回收、RX starvation 和 backpressure 如何影响 lwIP。Stage 22从 PHY Auto-Negotiation 到netif_set_link_up()——Link Up/Down、MAC 速率与协议栈恢复从 PHY 链路检测与自动协商进入 lwIP link state区分 admin up 与 physical link并追踪 MAC speed/duplex、DHCP、ND6 与组播报告恢复。Stage 23从ethernet_input()到LWIP_HOOK_VLAN_SET——802.1Q VLAN Tag、VID/PCP 与硬件 Offload从 Ethernet RX/TX 真实路径追踪 802.1Q C-Tag、TCI、VID/PCP、VLAN hook、per-PCB hint、MTU 与硬件 VLAN filtering/offload 边界。Stage 24从mdns_example_init()到mdns_recv()——mDNS、DNS-SD、Probe/Announce 与 PTR/SRV/TXT 服务发现从 upstream mDNS example 进入 5353/组播收发追踪 netif 加组、Probe/Announce 状态机、冲突处理、DNS-SD PTR/SRV/TXT 记录、查询匹配与多播/单播响应边界。Stage 25从autoip_start()到ACD_IP_OK——IPv4 Link-Local、169.254/16、ARP Probe/Announce、Conflict 与 DHCP Cooperation从 AutoIP 入口追踪 169.254 地址选择、AutoIP/ACD 双层状态机、ARP Probe/Announce、冲突防御、DHCP cooperation 与链路变化。Stage 26从snmp_example_init()到mib2_counters——SNMPv2c、OID Tree、GET/GETNEXT/GETBULK 与 MIB2从 SNMP 示例入口追踪 UDP 161、ASN.1/PDU 解析、GET/GETNEXT/GETBULK、OID Tree、MIB2 interface/counter 映射与 RAW/NETCONN 线程边界。Stage 27从lwiperf_start_tcp_server_default()到 TCP ACK——lwIP 吞吐量、窗口、pbuf、线程与 Driver 瓶颈定位从 lwiperf Raw TCP 入口追踪收发、ACK 驱动的续传、窗口与发送队列再把 pbuf/memp、tcpip_thread、DMA ring、checksum offload 与 PHY 速率接成一条性能瓶颈证据链。Stage 28从pppos_create()到ppp_input()——PPP Core、PPPoS 串口字节流与 HDLC-like Framing从 upstream PPPoS example 追踪 PPP netif 创建、串口 RX 跨线程输入、HDLC-like 解帧、FCS、Protocol 分发以及 TX 的 ACCM、PFC/ACFC 与 serial output。Stage 29从lcp_open()到np_up()——LCP、PAP/CHAP、IPCP、IPv6CP 与 PPP 协商状态机沿 PPP phase 与 generic FSM 追踪 LCP 配置协商、PAP/CHAP 认证、Network phase、IPCP/IPv6CP 配置与网络协议启用明确各层职责与 RUNNING 条件。Stage 30从ipcp_up()到ppp_link_status_cb()——PPP 地址、DNS、Default Route、Link Down 与 Reconnect从 IPCP/IPv6CP OPENED 追踪 netif 地址、peer DNS、default netif、link up/down、PPPERR 回调、关闭与应用侧重连责任建立 PPP 网络配置生命周期。Stage 31SLIP vs PPPoS——串口 IP Framing、错误检测、协商与工程边界用统一的数据流、控制面与实现边界比较 SLIP 和 PPPoS 的 framing、错误检测、Protocol 分发、地址/认证能力、执行上下文与生命周期。Stage 32从httpd_init()到http_sent()——HTTPD、altcp、fsdata 与 HTTP 连接生命周期从 HTTPD 真实入口追踪监听、连接状态、request parsing、fsdata 文件映射、TCP 背压与 ACK 驱动续传理解 altcp 怎样解耦 HTTP 与传输层。Stage 33从https_ex_init()到http_recv()——altcp、mbedTLS、TLS Handshake 与 HTTPS 数据通路从 upstream HTTPS example 追踪 TLS config、TLS outer/TCP inner、mbedTLS handshake、BIO I/O 与解密后的 HTTP callback理解 HTTPS 如何复用 Stage 32。Stage 34MQTT 从协议流程到 lwIP 源码——连接、订阅、发布与回调链从 Client/Broker、Control Packet、QoS、Keep Alive、Will、Clean Session 等协议基线进入真实 MQTT example再把 CONNECT/CONNACK、SUBSCRIBE/SUBACK、PUBLISH 与回调逐步映射到 lwIP 源码。Stage 35从tls_config到mqtt_cyclic_timer()——MQTT over TLS、Keep Alive、Timeout 与应用侧 Reconnect沿 MQTT TLS 分支追踪 TLS handshake、Keep Alive、request timeout、断线清理和 connection callback明确应用侧 reconnect/resubscribe 责任。Stage 36从sntp_example_init()到sntp_process()——SNTP、DHCP/DNS、Timer 与系统时间同步从 upstream SNTP example 追踪 Server 来源、DNS/UDP request、response 校验、retry/update Timer 与系统时间 Port并说明可信时间与 TLS certificate validity 的工程关系。Stage 37从httpc_get_file_dns()到 Body Callback——HTTP/HTTPS Client、DNS、altcp 与下载数据通路从 HTTP client 公共入口追踪 DNS、altcp/TCP、GET、Header/Body callback并用 TLS allocator 把同一条 httpc 主线切换成 HTTPS建立 REST/配置拉取/OTA 下载的网络侧基础。Stage 38从lwipopts.h到 Port Contract——lwIP 裁剪、构建选择、OS Port 与 Network Port从产品能力反推 lwIP feature/resource 配置与源码选择建立lwipopts.h、NO_SYS、sys_arch、netif和 Driver 之间的通用移植契约。Stage 39从lwip_system_init()到tcpip_input()——RT-Thread 如何把 lwIP 接进 RTOS 与 Ethernet Device从 RT-Thread 初始化入口追踪 Kconfig/lwipopts、sys_arch、eth_device、erx/etx 与tcpip_input()把 Stage 38 的 Port Contract 落到真实 RTOS。Stage 40从socket()到lwip_socket()——DFS fd、SAL Socket 与 lwIP Backend从 BSD Socket 入口追踪 DFS fd、SAL socket、NetDev/backend 选择与lwip_socket()解释 RT-Thread 怎样把 POSIX 文件描述符语义接到 lwIP Socket/Netconn。Stage 41从 NetDev 注册到socket_init()——Default NetDev、Protocol Family 与 lwIP / AT Backend 选择从 lwIP/AT NetDev 注册追踪sal_user_data、default NetDev、primary/secondary family 匹配与 socket backend 绑定解释同一 BSD API 如何落到不同网络实现。Stage 42从rt_hw_stm32_eth_init()到tcpip_input()——STM32H750 RT-Thread lwIP Ethernet Port以 STM32H750 Art-Pi LAN8720A 为具体硬件案例从 RT-Thread device init 追到 HAL ETH/RMII、eth_device、lwIPnetif和tcpip_input()建立 MCU Ethernet Port 的完整落地链。Stage 43从ETH_IRQHandler()到HAL_ETH_Transmit()——STM32H7 Ethernet DMA、Descriptor、Cache 与 Zero-copy 边界沿同一 STM32H750 驱动的 RX/TX 数据面追踪 DMA descriptor OWN、IRQ、buffer refill、D-Cache clean/invalidate、RX pbuf copy、TX scatter-gather 与 zero-copy 生命周期边界。Stage 44从phy_monitor_thread_entry()到dhcp_network_changed()——STM32H750 PHY Link、Auto-negotiation 与 DHCP 恢复沿 PHY monitor、BMSR latch-low、Auto-negotiation、MAC speed/duplex 重配置、eth_device_linkchange()、lwIP Link flag 与 DHCP reboot/discover 追踪网线插拔后的恢复链。Stage 45从 Link Up 到 MQTT Reconnect——STM32 RT-Thread lwIP MCU Cloud Lifecycle以 readiness、事件所有权、failure domain 与 Cloud Orchestrator 串起 Link/IP/Time/DNS/TLS/MQTT解释不同失败应从哪一层恢复以及协议栈与产品层的责任边界。系列主线完成后的边界Stage 4445 已经把 STM32 Ethernet 的 PHY/Link 生命周期继续向上接到完整 Cloud Lifecycle。至此主线从物理链路、DMA/Driver、lwIP Core、RT-Thread Port一直延伸到 DHCP、DNS、SNTP、TLS、MQTT 与应用侧 reconnect/resubscribe形成完整闭环。后续不再为了增加编号机械扩展 lwIPsrc/apps或 RT-Thread 全量源码。新的专题只有在真实项目需要时再单独展开例如具体新 MCU / 新 PHY / 新 Ethernet MAC → 复用 Stage 3844 的 Port / Driver / Link 方法 新的云平台 / OTA / 设备管理协议 → 复用 Stage 3437 Stage 45 的 DNS / Time / TLS / Lifecycle 方法 RT-Thread Kernel / Device / DFS / SAL / NetDev 全量源码 → 转入独立 RT-Thread Source Lab当前 lwIP 系列仍只解释与网络协议、Port、真实 Ethernet 数据面和上云生命周期直接相交的 RT-Thread/STM32 路径RT-Thread 内核对象、Device Framework、BSP Framework 与完整驱动框架留给独立 RT-Thread Source Lab。IPv6 不再作为连续源码专题展开Stage 15 已保留 IPv4/IPv6 的工程心智模型、标准资料与 lwIP 源码入口项目真正需要 IPv6 时再按模块深入。返回 仓库 README。