15-ipv4-ipv6-overview
教程 15:IPv4 与 IPv6——从网络层工作原理到嵌入式工程取舍 摘要:从前 14 篇已经建立的 IPv4 主线出发,对照 IPv6 的地址、邻居发现、自动配置、ICMP、分片、DNS 与过渡机制,并说明 MCU、Linux 与云场景需要掌握到什么程度。 [TOC] IP(Internet Protocol,网际协议)位于网络层,负责让一个 IP datagram 在不同链路和路由器之间被转发到目标 IP 节点。IPv4 与 IPv6 是 IP 的两个主要版本:IPv4 使用 32-bit address,IPv6 使用 128-bit address,同时重新设计了 Header、邻居发现、自动配置、multicast 与 fragmentation 等网络层机制。S3S4 所谓“best effort”并不表示网络完全不可靠,而是 IP 层本身不承诺每个 datagram 一定送达、只送一次或按序到达;可靠传输、重传与有序 byte stream 等语义由 TCP 等更高层机制提供。这个边界解释了为什么 IPv4/IPv6 可以替换网络层机制,而 MQ...
17-igmp-ipv4-multicast
教程 17:从 IP_ADD_MEMBERSHIP 到 igmp_input()——IPv4 Multicast、IGMPv2、MAC Filter 与组成员状态机 摘要:从 RTP multicast example 的 IP_ADD_MEMBERSHIP 入口追踪 IGMPv2 加组、Report/Query/Leave、定时器与 MAC 映射,并用真实 PCAP 验证调用链。 [TOC] IPv4 multicast(IPv4 组播)让发送者把一个 IPv4 datagram 发送到 multicast group address(组播组地址),所有已经加入该组、并且链路路径允许该组流量通过的接收者都可以获得同一份数据。IGMP(Internet Group Management Protocol,互联网组管理协议)不是业务数据协议,而是 IPv4 Host 与本地 multicast router 之间维护“哪些组当前有成员”的控制协议。S3S4 本文标题中的 MAC Filter 指 Ethernet MAC(Media Access Con...
19-checksum-hardware-offload
教程 19:从 ip_chksum_pseudo() 到 netif->linkoutput()——lwIP 校验和、Checksum Offload 与驱动边界 摘要:沿 UDP/TCP 的真实收发路径解释 lwIP Internet checksum、pseudo header、per-netif checksum 控制,并明确软件校验和与 MAC/DMA 硬件卸载之间的驱动职责边界。 [TOC] Checksum(校验和)用于让接收方发现报文头部或 payload 在传输过程中发生的比特错误。lwIP 的 IPv4、TCP、UDP、ICMP/ICMPv6 会在不同层生成或验证各自的 Internet checksum;**Checksum Offload(校验和卸载)**则表示把其中一部分工作从 CPU/lwIP Core 交给 NIC(Network Interface Controller,网卡控制器)、Ethernet MAC(Media Access Control,媒体访问控制)或 DMA(Direct Memo...
20-ethernet-dma-zero-copy
教程 20:从 netif->linkoutput() 到 pbuf_custom——Ethernet Driver、DMA Buffer、所有权与 Zero-copy 摘要:建立 lwIP pbuf、Ethernet Driver、DMA buffer 与 zero-copy 的 ownership 模型,解释 TX/RX copy、scatter-gather、custom pbuf 与 Cache 边界。 [TOC] Stage 19 已经把发送路径追到 netif->linkoutput():从这一层开始,lwIP Core 不再决定 MAC/DMA 怎样搬运 frame,而是把已经形成的 Ethernet frame 交给 Port/Driver。对带 Ethernet DMA 的 MCU 而言,真正困难的部分不是“会不会调用 DMA”,而是 pbuf、Driver buffer、DMA descriptor 和硬件之间的所有权何时转移,哪一方什么时候可以重新使用内存。S1 Zero-copy(零拷贝)在本文中特指:尽量让...
21-ethernet-descriptor-ring-backpressure
教程 21:从 DMA Descriptor Ring 到 netif->input()——ISR、Polling、TX Completion 与 Backpressure 摘要:建立 Ethernet DMA descriptor ring 的生产者—消费者模型,解释 TX/RX ownership、completion、refill、backpressure 与线程上下文边界。 [TOC] Stage 20 已经建立了 pbuf、DMA buffer 与 Driver 之间的 ownership contract,但 ownership 正确并不等于系统一定稳定。Ethernet DMA 通常通过一个固定数量的 descriptor(描述符)循环工作:CPU/Driver 不断提交要发送的 buffer,DMA 不断消费;RX 方向则由 DMA 填充 buffer,Driver 再把完成的 packet 交给 lwIP。只要“提交速度、完成速度、回收速度”失去平衡,有限 ring 就会被占满或耗尽。S1 Backpressure(背压)指下游资...
22-phy-link-autoneg
教程 22:从 PHY Auto-Negotiation 到 netif_set_link_up()——Link Up/Down、MAC 速率与协议栈恢复 摘要:建立 Ethernet PHY link lifecycle,解释 Auto-Negotiation、MAC speed/duplex、admin/link 状态与 lwIP link-up/down 恢复链。 [TOC] Stage 21 已经把 descriptor ring、completion 和 backpressure 串成了一个稳定的数据面模型,但 DMA 能不能真正发送/接收还有一个更底层前提:PHY 已经建立物理链路,而且 MAC 的速率与双工模式和 PHY 的协商结果一致。 PHY(Physical Layer Transceiver,物理层收发器)负责把 MAC(Media Access Control,媒体访问控制)产生的数字链路数据转换成双绞线上的物理信号,并检测对端是否存在。Auto-Negotiation(自动协商)是 Ethernet...
23-vlan-8021q-offload
教程 23:从 ethernet_input() 到 LWIP_HOOK_VLAN_SET——802.1Q VLAN Tag、VID/PCP 与硬件 Offload 摘要:沿 Ethernet RX/TX 真实路径追踪 802.1Q 标签解析、字段映射、VLAN 策略 hook 与软硬件卸载边界。 [TOC] VLAN(Virtual Local Area Network,虚拟局域网)用于在同一套 Ethernet 基础设施上建立彼此隔离的二层广播域。IEEE 802.1Q 定义了常见的 Customer VLAN Tag(C-Tag):在线上 Ethernet frame 中插入 4-byte tag,其中 TPID(Tag Protocol Identifier)标识 tag 类型,TCI(Tag Control Information)内部再保存 VID(VLAN Identifier)、**PCP(Priority Code Point)**与 DEI(Drop Eligibility Indicator)。S3S5 标题中的 hardware ...
24-mdns-dns-sd
教程 24:从 mdns_example_init() 到 mdns_recv()——mDNS、DNS-SD、Probe/Announce 与 PTR/SRV/TXT 服务发现 摘要:从 upstream mDNS example 追踪 Probe/Announce、PTR/SRV/TXT 与 Query/Response,并用真实 48 帧抓包将源码和线上报文逐项互证。 [TOC] mDNS(Multicast DNS,多播 DNS)把 DNS 风格的名称解析限制在本地链路:querier(查询端)和 responder(响应端)通过 UDP 5353 向 IPv4 224.0.0.251 或 IPv6 FF02::FB 交换 DNS 格式的 Query/Response,而不是先把 .local. 名称交给传统递归 DNS server。S3 DNS-SD(DNS-Based Service Discovery,基于 DNS 的服务发现)进一步约定如何用 DNS Resource Recor...
25-autoip-ipv4-link-local
教程 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 与链路变化。 [TOC] AutoIP 是 lwIP 对 IPv4 Link-Local 自动配置机制的实现。IPv4 Link-Local 的目标是在没有可经路由器转发的 IPv4 配置时,仍让同一二层链路上的设备获得本地 IPv4 连通性;动态候选地址来自 169.254.1.0 到 169.254.254.255,绑定后使用 /16,不依赖默认 gateway,因此它解决的是同链路连通性,不是“没有 DHCP 时自动获得 Internet access”。S3 地址不能选中后立刻使用,因为同一链路上的另一台设备可能已经使用同一个地址。ACD...
26-snmp-mib2
教程 26:从 snmp_example_init() 到 mib2_counters——SNMPv2c、OID Tree、GET/GETNEXT/GETBULK 与 MIB2 摘要:从 SNMP 示例入口追踪 UDP 161、PDU/OID 解析、MIB2 可管理对象与读写边界、GET/GETNEXT/GETBULK、接口统计和线程模型。 [TOC] SNMP(Simple Network Management Protocol,简单网络管理协议)把设备管理抽象成 manager 发请求、agent 读取或修改管理对象并返回结果。本篇的 agent 是 lwIP SNMP 模块;manager 可以是 NMS(Network Management System,网络管理系统)或 snmpget/snmpwalk 一类管理工具。默认 request/response transport 使用 UDP 161。S1S3 MIB(Management Information Base,管理信息库)定义“有哪些...








