🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本书以LwIP 2. 1.2为主要对象进行讲解,后续中出现的LwIP如果没有特殊声明,均指2.1.2版本。此时的LwIP 2. 1.2为最新版本,可能当这本书写完的时候,LwIP又被更新了,对于学习而言,大家其实不必纠结于是否必须用最新的版本,因为2.1.2版本和它后面的版本在移植和应用方法上并没有什么区别。 LwIP全名:Light weight IP,意思是轻量化的TCP/IP协议,是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。LwIP的设计初衷是:用少量的资源消耗实现一个较为完整的TCP/IP协议栈,其中“完整”主要指的是TCP协议的完整性,实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。此外LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。 LwIP具有主要特性: 1. 支持ARP协议(以太网地址解析协议)。 2. 支持ICMP协议(控制报文协议),用于网络的调试与维护。 3. 支持IGMP协议(互联网组管理协议),可以实现多播数据的接收。 4. 支持UDP协议(用户数据报协议)。 5. 支持TCP协议(传输控制协议),包括阻塞控制、RTT 估算、快速恢复和快速转发。 6. 支持PPP协议(点对点通信协议),支持PPPoE。 7. 支持DNS(域名解析)。 8. 支持DHCP协议,动态分配IP地址。 9. 支持IP协议,包括IPv4、IPv6协议,支持IP分片与重装功能,多网络接口下的数据包转发。 10. 支持SNMP协议(简单网络管理协议)。 11. 支持AUTOIP,自动IP地址配置。 12. 提供专门的内部回调接口(Raw API),用于提高应用程序性能。 13. 提供可选择的Berkeley接口API,即 Socket套接字 (在多线程情况下使用) 。 LwIP在嵌入式中使用有以下优点: 1. 资源开销低,即轻量化。LwIP内核有自己的内存管理策略和数据包管理策略,使得内核处理数据包的效率很高。另外,LwIP高度可剪裁,一切不需要的功能都可以通过宏编译选项去掉。LwIP的流畅运行需要40KB的代码ROM和几十KB的RAM,这让它非常适合用在内存资源受限的嵌入式设备中。 2. 所支持的协议较为完整。几乎支持TCP/IP中所有常见的协议,这在嵌入式设备中早已够用。 3. 实现了一些常见的应用程序:DHCP客户端、DNS客户端、HTTP服务器、MQTT客户端、TFTP服务器、SNTP客户端等等。 4. 同时提供了三种编程接口:RAW API、NETCONN API(注:NETCONN API即为Sequential API,为了统一,下文均采用NETCONN API)和Socket API。这三种API的执行效率、易用性、可移植性以及时空间的开销各不相同,用户可以根据实际需要,平衡利弊,选择合适的API进行网络应用程序的开发。 5. 高度可移植。其源代码全部用C实现,用户可以很方便地实现跨处理器、跨编译器的移植。另外,它对内核中会使用到操作系统功能的地方进行了抽象,使用了一套自定义的API,用户可以通过自己实现这些API,从而实现跨操作系统的移植工作。 6. 开源、免费,用户可以不用承担任何商业风险地使用它。 7. 相比于嵌入式领域其它的TCP/IP协议栈,比如uC-TCP/IP、FreeRTOS-TCP等,LwIP的发展历史要更悠久一些,得到了更多的验证和测试。LwIP被广泛用在嵌入式网络设备中,国内一些物联网公司推出的物联网操作系统,其TCP/IP核心就是LwIP;物联网知名的WiFi模块ESP8266,其TCP/IP固件,使用的就是LwIP。 LwIP尽管有如此多的优点,但它毕竟是为嵌入式而生,所以并没有很完整地实现TCP/IP协议栈。相比于Linux和Windows系统自带的TCP/IP协议栈,LwIP的功能不算完整和强大。但对于大多数物联网领域的网络应用程序,LwIP已经足够了。