lwip

简介

        lwIP(light-weight IP)最初由瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels开发,现在由Kieran Mansley领导的一个全球开发团队开发、维护的一套用于嵌入式系统的开放源代码TCP/IP协议栈,它在包含完整的TCP协议的基础上实现了小型化的资源占用,因此它十分适合于应用到嵌入式设备中,其占用的资源体积RAM大概为几十kB,ROM大概为40KB。lwIP结构精简,功能完善,因而用户群较为广泛。

RT-Thread中的lwIP


        RT-Thread实时操作系统就采用了lwIP做为默认的TCP/IP协议栈,同时根据小型设备的特点对lwIP进行了再次优化,使其资源占用体积进一步地缩小,RAM 的占用可缩小到5kB附近(未计算上层应用使用TCP/IP协议时的空间占用量)。主要特性:

    • 协议:IP,ICMP,UDP,TCP,IGMP,ARP,PPPoS,PPPoE
    • DHCP client,DNS client,AutoIP/APIPA(Zeroconf),SNMP agent(private MIB support)
    • APIs:专门针对增强性能实现的API接口,可选的类BSD的Socket API。
    • 延伸的特点:多个网络接口的IP转发,TCP拥塞控制,RTT往返时间估算、快速恢复和快速重传

        由于原版的lwIP更适合于在无操作系统的情况下运行,所以RT-Thread在移植lwIP的过程中根据RT-Thread的特点进行了适当调整。其结构如下图所示:

        RT-Thread操作系统中的lwIP是从lwIP发布原始版本移植过来,然后添加了设备层以替换原来的驱动层。不同于原版,这里RT-Thread对于以太网数据的收发采用了独立的双线程(erx线程与etx线程)结构:

    • erx线程用于以太网报文的接收──当以太网硬件设备收到网络报文产生中断时,中断服务例程将会通过邮箱的形式唤醒erx线程,让erx线程主动进行以太网报文收取过程,当erx线程收到有效网络报文后,它通过邮箱的形式通知给LwIP的主线程(tcp线程);
    • tcp的发送操作则是通过邮箱的形式唤醒etx线程进行实际的以太网硬件写入。在正常情况下,erx线程和etx线程的优先级是相同的,用户可以根据自身实际要求进行微调以侧重接收或发送。