LwIP简介
LwIP是TCP/IP协议中一种独立、简单的实现,其设计目的在于:在保证嵌入式产品拥有完整TCP/IP功能的同时,又能保证协议栈对处理器资源的有限消耗,其运行一般仅需几十kB的RAM和40kB左右的ROM。目前LwIP版本众多,但各个高级版本之间功能并没有太大的变化,高版本会修复低版本许多Bug,移植过程各版本也无明显差异,1.4.1版本中实现的主要功能有:
(1)ARP协议,以太网地址解析协议;
(2)IP协议,包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据转发;
(3)ICMP协议,用于网络调试与维护;
(4)IGMP协议,用于网络组管理,可以实现多播数据的接收;
(5)UDP协议,用户数据报协议;
(6)TCP协议,支持TCP拥塞控制、RTT估计、快速恢复与重传等;
(7)提供三种用户编程接口方式:Raw/Callback API、Sequential API、BSD-style Socket API;
(8)DNS,域名解析;
(9)SNMP,简单网络管理协议;
(10)DHCP,动态主机配置协议;
(11)AUTOIP,IP地址自动配置;
(12)PPP,点对点协议,支持PPPoE。
TCP/IP协议栈分层思想
TCP/IP协议的开发出现在OSI标准之前,因此它并没有按照OSI模型中描述的各种结构来实现,而是有着自己的协议层次划分特点。所有层次结构中,第一层为高一层提供服务。
- 网络接口层(Network Interface Layer)
网络接口层是TCP/IP协议模型的最底层,主要负责网络上数据帧的发送和接收,数据帧是底层网络传输的基本单元,即负责数据的打包和解包。- 网络层(Internet Layer)
网络层负责在主机之间的通信中选择数据报的传输路径,即路由。- 传输层(Transport Layer)
传输层主要提供应用程序之间的通信服务,这种通信又称为端到端的通信。提供可靠的传输服务,采用协商、确认、重发等机制。- 应用层(Application Layer)
应用层是分层模型的最高层,它最简单的解释就是利用传输层提供了数据传输功能发送自己数据到对方。传输层协议类型有多种,不同的类型意味着不同的传输速度和可靠性,而往往这二者是不可兼得的。所以每个应用程序选择最合适的传输服务类型,以使双方之间的数据传输达到最佳效果。
LwIP协议栈分层思想
如果按照上述这种严格的分层模式来实现TCP/IP协议,会使数据包在各层间的递交变得非常慢,因为它涉及到一系列的内存拷贝问题,因此,系统总体性能也会受到影响。为此LwIP内部并没有采用完整的分层结构,它会假设各层间的部分数据结构和实现原理在其他层是可见的,这样,在数据包递交过程中,各层协议可以直接对数据包中属于其他层次协议的字段进行操作。
应用程序和LwIP协议内核之间交叉访问,这种做法最直接的好处是网络程序的性能能够有很大的提高,特别是小型嵌入式领域。但是,这种做法要求应用程序开发者对内核有足够的了解,应用程序的稳定性和可用性建立在开发者对内核的熟悉程度上。