LwIP是适用于嵌入式的TCP/IP 协议栈,RT-Thread(来自于国内的开源实时嵌入式操作系统)就默认采用LwIP作为网络协议栈,因为其占据着较低的RAM和ROM空间,在嵌入式领域有着比较广泛的应用。
负责IP层处理的函数位于src/core/ipv4/和src/core/ipv6文件夹下,这里以ipv4为例,来看看IP层的处理流程。
LwIP实现了接收包、发送包、转发包、数据分片重装等功能。
实现ip层处理的函数有ip_route()、ip_forward()、ip_input()、ip_output_if()、 icmp_input()、icmp_dest_unreach()等
1)接收包
当网络数据到来的时候,中断会触发驱动程序调用ip_input()函数,ip_input()函数实现了确定报头、确定协议版本号、计算校验和、调用ip_route()对报文进行转发、对分片的IP数据报进行重组、将数据报发向高层协议等。