LWIP协议栈解析(一)

LWIP协议栈解析(一)——概述

  1 概述

        lwip是瑞典计算机科学院的Adam Dunkels开发的一个小型开源TCP/IP协议栈,其实现重点是在保持TCP协议主要功能的基础上减少对RAM的占用,因此适用于嵌入式开发板这类存储资源较小的设备。

        lwip提供了三种API:

        (1)RAW API。它将协议栈与应用程序放在一个进程里,该接口基于函数回调技术,适合在无操作系统环境,对比于其他两种API,可提高应用程序的效率、节省内存开销。但代码可读性差,容易出现丢包现象。

        (2)NETCONN API。它基于操作系统的 IPC 机制(即信号量和邮箱机制) 实现, 它的设计将 LwIP 内核代码和网络应用程序分离成了独立的线程。它相较于RAW API,简化了编程工作,使用户用户可以像操作文件一样操作网络连接(打开/关闭、读/写数据),避免了内核程序与应用程序之间的数据拷贝,提高了数据递交的效率。但它需要耗费更多的时间和内存,且需要用户对lwip使用的数据结构有所了解。

        (3)SOCKET API。即套接字编程,它对网络连接进行了高级的抽象,使得用户可以像操作文件一样操作网络连接。lwip中的SOCKET API采用BSD SOCKET。相较于 NETCONN API, SOCKET API 具有更好的易用性。使用 Socket API 编写的程序可读性好,便于维护,也便于移植到其它的系统中。 SOCKET API在内核程序和应用程序之间存在数据的拷贝,这会降低数据递交的效率。另外,SOCKET API 是基于NETCONN API 实现的,所以效率要比NETCONN API更低。

2 lwip1.4.1文件夹文件组织

        lwip1.4.1版本是最广为应用的版本,其文件夹文件组织如图1所示。

图1 lwip1.4.1文件夹文件组织

(1)doc:该文件夹是供给用户使用的移植说明文档。

(2)src:该文件夹包含了LwIP的源码。

(3)test:该文件夹是官方提供的测试程序。

(4)CHANGELOG:该文档记录了版本的新特性和改动。

(5)COPYING:该文档是作者的版权说明文档。

(6)FILES:该文档讲述了doc、src文件夹的用途。

(7)UPGRADING:该文档记录了版本间的改动,为旧版本的升级提供说明。

2.1 doc目录下的文件

        doc目录下的文件结构如图2所示,每个文件的作用在FILES文件中已给出具体说明。

图2 doc目录下的文件结构

       文件FILES内容如图3所示。

图3 doc目录下文件FILES内容

(1)savannah.txt,说明如何获得当前lwip开发版本的源码。

(2)contrib.txt,说明如何作为开发者为lwip贡献。

(3)rawapi.txt,说明lwip RAW/Callback API编程中的核心API,同时也提供其他API编程方式和多线程的概述。

(4)snmp_agent.txt,说明lwip SNMP代理方法。

(5)sys_arch.txt,说明lwip的系统抽象层接口。

2.2 src目录下的文件

        src目录是整个lwip的核心部分,其目录结构如图4所示。

图4 src文件夹目录结构

       通过查看FILES文档,可知各文件夹包含内容如图5所示。

图5 src目录下文件FILES内容

(1)api,包含高级API源码,即NETCONN API和SOCKET API,若用户使用RAW/Callback API编程,则无需该文件夹。

(2)core,包含TCP/IP协议栈的核心源码,协议应用、内存管理以及RAW/Callback API编程。

(3)include,包含lwip头文件。

(4)netif,包含通用网络接口文件以及ARP相关文件。

  

更多内容详见下一节:LWIP协议栈解析(二)——网络数据包管理

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值