LWIP协议栈
1. LWIP协议介绍
LWIP 是瑞典计算机科学院(SICS)的Adam Dunkels 等开发的一个小型开源的TCP/IP 协议栈。LWIP 是轻量级 IP 协议,有无操作系统的支持都可以运行, LWIP 实现的重点是在保持 TCP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM 和 40K 左右的 ROM 就可以运行,这使LWIP协议栈适合在低端的嵌入式系统中使用。
LWIP支持的协议种类:
- DNS,域名解析;
- SNMP,简单网络管理协议;
- DHCP,动态主机配置协议;
- UDP 协议,用户数据报协议;
- TCP 协议,支持 TCP 拥塞控制, RTT 估计,快速恢复与重传等;
- 提供三种用户编程接口方式:raw/callback API、sequential API、BSD-style socket API;
- IP 协议,包括 IPv4 和 IPv6,支持 IP 分片与重装,支持多网络接口下数据转发;
- AUTOIP, IP 地址自动配置;
- ICMP 协议,用于网络调试与维护;
- IGMP 协议,用于网络组管理,可以实现多播数据的接收;
- ARP 协议,以太网地址解析协议;
- PPP,点对点协议,支持 PPPoE
LWIP协议源码模型如下图示:
2. LWIP编程接口
LWIP提供了三种编程接口,分别为 RAW API、 Netconn API和Socket API
- RAW API:内核回调型API,在没有操作系统支持的中,只能使用RAW API进行开发
- Netconn API:基于操作系统的IPC机制(即信号量和邮箱机制)实现的,将LWIP内核代码和网络应用程序分离成了独立的线程,因此LWIP内核线程就只负责数据包的TCP/IP封装和拆封,而不用进行数据的应用层处理,大大提高了系统对网络数据包的处理效率
- Socket API:即套接字,它对网络连接进行了高级的抽象,使得用户可以像操作文件一样操作网络连接
RAW API和Netconn/Socket API的区别如下表所示:
3. LWIP硬件接口
LWIP可以通过链表挂载多个以太网外设,每个外设的interface结构体中包含IP地址、硬件信息、驱动相关信息以及其他可选项
- IP information:包括IP地址、子网掩码和网关相关信息
- Hardware information:包括MAC地址和Flags标示相关信息
- Driver function:包括输入、输出和回调函数相关信息