1、数据包最初由网卡驱动中断接收,通过调用 tcpip_input() 送入 LwIP 协议栈;
2、在 tcpip_inpkt() 中将 ip_input() 通过 mbox (本质为消息队列) 投递至线程 “t_netproto”,并在线程中执行 ip_input();
3、在 ip_input() 中针对 IPv4 报文调用 ip4_input() 进行处理。针对 TCP 报文,tcp_input() 处理了基本的协议规则;
4、针对有效数据包,通过调用 TCP_EVENT_RECV(即调用 tcp_recv() 注册的 recv_tcp())将数据包通过 mbox 发送至应用线程接收部分;
5、应用线程接收部分通过 socket 接口调用 read() 读取数据包,本质即通过 mbox 接收传递过来的消息,调用流程如下: