27-lwiperf-performance-bottleneck
教程 27:从 lwiperf_start_tcp_server_default() 到 TCP ACK——lwIP 吞吐量、窗口、pbuf、线程与 Driver 瓶颈定位 摘要:从 lwiperf Raw TCP 入口追踪收发、ACK 驱动的续传、窗口与发送队列,再把 pbuf/memp、tcpip_thread、DMA ring、checksum offload 与 PHY 速率接成一条性能瓶颈证据链。 [TOC] lwiperf 是 lwIP 自带的 TCP 吞吐测试应用模块,不是 TCP Core 本身;官方文档把它定位为可与 PC 端 iPerf2 配合的最小 TCP client/server 性能测量实现。S6 当前实现直接使用 Raw TCP API,也就是绕过 Socket/Netconn、直接注册 TCP Core callback 的回调式 API,建立连接、累计 application bytes 并按持续时间计算 bandwidth_kbitpsec。S1 进入源码前先区分几个经常被混用的性能量。PHY line ra...
28-ppp-core-pppos-framing
教程 28:从 pppos_create() 到 ppp_input()——PPP Core、PPPoS 串口字节流与 HDLC-like Framing 摘要:从 upstream PPPoS example 追踪 PPP netif 创建、串口 RX 跨线程输入、HDLC-like frame 解码、Protocol 分发,以及 TX 的 ACCM、PFC/ACFC 与 FCS 实现。 [TOC] PPP(Point-to-Point Protocol,点对点协议)是用于两端点直接链路的数据链路协议,它不仅给网络层报文提供封装,还定义链路建立、协议类型标识以及后续的链路/网络层配置协商。PPPoS(PPP over Serial)是 lwIP 把 PPP 放到 UART/串行字节流上的适配方式:串口只负责收发字节,PPPoS 负责按 RFC 1662 定义的 HDLC-like framing(类似 HDLC 的帧定界、转义与校验格式)在异步串行字节流中还原/生成 PPP frame,并用 FCS(Frame Check Sequ...
29-ppp-lcp-auth-ipcp-ipv6cp
教程 29:从 lcp_open() 到 np_up()——LCP、PAP/CHAP、IPCP、IPv6CP 与 PPP 协商状态机 摘要:沿 PPP phase 与 generic FSM 追踪 LCP 配置协商、PAP/CHAP 认证、Network phase、IPCP/IPv6CP 配置与网络协议启用,明确各层职责与 RUNNING 条件。 [TOC] PPP 的控制面不是一个协议一次完成:LCP(Link Control Protocol,链路控制协议)先建立和配置 PPP link;如果双方协商要求认证,再由 PAP(Password Authentication Protocol)或 CHAP(Challenge Handshake Authentication Protocol)确认对端身份;链路进入 Network phase 后,IPCP(Internet Protocol Control Protocol)和 IPv6CP(IPv6 Control Protocol)分别配置 IPv4 与 IPv6 在这条 PPP lin...
30-ppp-address-dns-route-reconnect
教程 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 网络配置生命周期。 [TOC] Stage 29 的终点是 IPCP/IPv6CP 进入 OPENED,随后 np_up() 把 PPP session 推到 PPP_PHASE_RUNNING。Stage 30 继续回答更接近产品代码的问题:协商得到的 IP 地址写到哪里、peer DNS(Domain Name System,域名系统;这里指对端通过 IPCP 提供的 DNS server 地址)何时生效、default route(无更具体路由时的默认出口)是否自动切到 PPP、link down(链路不可用)时地址/DNS 如何清理,以及 reconnec...
31-slip-vs-pppos
教程 31:SLIP vs PPPoS——串口 IP Framing、错误检测、协商与工程边界 摘要:用统一的数据流、控制面与实现边界比较 lwIP SLIP 和 PPPoS,解释 framing、错误检测、协议分发、地址配置、执行上下文与生命周期差异。 [TOC] SLIP(Serial Line Internet Protocol,串行线路 IP)和 PPPoS(PPP over Serial)都能让 IP 数据穿过 serial byte stream,但二者解决的问题并不相同。SLIP 是一个极简的 IP datagram framing:它告诉接收端一段 IP 数据在哪里开始/结束,并对少数字节做 escaping;PPPoS 则把完整 PPP 放到串行链路上,因此除了 framing,还具有 FCS(Frame Check Sequence,帧校验序列)错误检测、Protocol multiplexing(按 PPP Protocol 字段复用多种上层协议)、LCP(Link Control Protocol,链路控制协议)、可选认证、IPCP(Int...
32-httpd-altcp
教程 32:从 httpd_init() 到 http_sent()——HTTPD、altcp、fsdata 与 HTTP 连接生命周期 摘要:从 lwIP HTTPD 的真实初始化入口追踪监听、连接状态、请求解析、fsdata 文件查找、TCP 背压与 ACK 驱动续传,理解 altcp 如何把 HTTP 应用与 TCP/TLS 传输解耦。 [TOC] Stage 07~10 已经建立 TCP handshake、byte stream、ACK、重传与乱序处理。Stage 32 进入 lwIP 自带的 HTTPD(HTTP server application):altcp 是 lwIP 的 TCP-like connection abstraction,用统一接口承接普通 TCP 或后续 TLS wrapper;fsdata 则是把静态网页/资源生成成可编译进 firmware 的 C 数据,使没有 POSIX filesystem 的 MCU 也能提供 HTTP 文件。S1S2S6S7 HTTP(Hypertext Transfer Protoco...
33-altcp-tls-https
教程 33:从 https_ex_init() 到 http_recv()——altcp、mbedTLS、TLS Handshake 与 HTTPS 数据通路 摘要:从 HTTPS example 真实入口追踪 TLS 配置、TLS-over-TCP wrapper、握手、密文/明文回调与 ACK 桥接,解释同一 HTTPD 如何运行在 HTTPS 上。 [TOC] HTTPS(HTTP over TLS)不是另一套 HTTP parser,而是把 HTTP request/response 放进 TLS(Transport Layer Security,传输层安全协议)保护的连接中,再由 TCP 可靠传输。TLS 在 TCP 字节流上定义 Record(记录) 作为自己的传输单元,并在 Handshake(握手) 阶段协商安全参数、建立共享密钥。altcp 是 lwIP 的 TCP-like connection abstraction,mbed TLS 是这里实际执行 TLS 状态机与密码学的库;HTTPD 仍继续使用 Stage 32 的 http...
34-mqtt
教程 34:MQTT 从协议流程到 lwIP 源码——连接、订阅、发布与回调链 摘要:从 MQTT 的发布订阅模型、会话建立、消息确认与异常掉线机制入门,再把每个协议动作逐步映射到 lwIP MQTT 的真实源码与回调链。 [TOC] MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种面向发布/订阅模型的应用层消息协议。连接到消息系统的程序或设备称为 Client(客户端),负责集中接收、匹配和转发消息的服务称为 Broker(消息代理服务器),消息使用 Topic(主题) 作为路由名称。Client 通常通过 TCP 这类可靠字节流连接 Broker,而不是直接寻找另一个订阅者建立点对点消息通道。S5S8 本篇面向第一次接触 MQTT 的读者:先把发布/订阅关系、控制报文、消息确认、连接保活和异常掉线通知这些机制讲清楚,再沿一次真实会话把协议动作映射到 lwIP 源码。目标源码是项目固定的 lwIP 2.2.2 development snapshot;其 mqtt_client_connec...
36-sntp-system-time
教程 36:从 sntp_example_init() 到 sntp_process()——SNTP、DHCP/DNS、Timer 与系统时间同步 摘要:从 upstream SNTP example 追踪 Server 来源、DNS/UDP 请求、响应校验、Timer 与系统时间更新,并说明可靠时间为何会影响 TLS 证书验证和云连接。 [TOC] SNTP(Simple Network Time Protocol,简单网络时间协议)是 NTP(Network Time Protocol,网络时间协议)的简化客户端使用方式。设备通常作为 Client,经 UDP 向时间 Server 发送请求,从响应里的 NTP timestamp 得到 wall clock 时间,再通过平台 hook 更新系统时钟。MCU/IoT 产品常在 TLS/Cloud 建连前先完成这一步,因为证书有效期判断、日志时间和业务时间戳都依赖一个足够可信的系统时间。S6S9 Stage 13 已经追过 DHCP(Dynamic Host Configuratio...
35-mqtt-tls-reconnect-keepalive
教程 35:从 tls_config 到 mqtt_cyclic_timer()——MQTT over TLS、Keep Alive、Timeout 与应用侧 Reconnect 摘要:沿 MQTT TLS transport、Keep Alive、request timeout 与断线清理源码,明确 lwIP 与应用侧 reconnect/resubscribe 的责任边界。 [TOC] MQTT over TLS 不是另一套 MQTT 协议。**Keep Alive(保活)**是 MQTT 层的空闲活性约定,空闲时通过 PINGREQ/PINGRESP 维持会话;request timeout 是 lwIP 对某个异步 MQTT 操作等待过久的实现超时;reconnect 则是连接断开后重新建立 MQTT session 的应用策略。Stage 34 已经完整建立正常 MQTT 会话,本篇只从这些异常生命周期问题继续。S1S7 mqtt_connect_client_info_t::tls_config 是 public connection 参数里...







