LWIP学习笔记

LWIP代码组成

文件目录

这里以源码版本2.1.2为例。
在这里插入图片描述
源码解压后如上图所示,三个文件夹。
doc文件夹里由两个重要文件提一下,rawapi.txt是关于如何使用raw API;sys_arch.txt是关于移植说明,规定了需要实现的函数和宏定义等等。
在这里插入图片描述
src文件夹下一共有五个文件夹,apps, api, core, include, netif。
apps 包含了各种应用层协议;
api 包括了LWIP的sequential API和socket API两类接口函数和实现相关源码,需要操作系统支持;
core 是LWIP内核源代码,可以单独运行,无需操作系统支持;
include 包含协议栈使用的头文件;
netif 主要包含底层网络接口相关文件。

下图是CORE文件夹下的截图:
在这里插入图片描述

其中core文件夹是整个协议栈重点,包含了IP、ICMP、IGMP、TCP、UDP等核心协议以及建立它们之上的DNS、DHCP、SNMP等上层应用协议。
ipv4文件夹里由IPv4标准中与IP层数据处理相关的所有代码,同理ipv6是IPv6标准与IP层相关代码;
snmp文件夹、dns.c、dhcp.c分别实现的是简单网络管理协议、动态主机配置协议、域名系统协议。
init.c 包含一个与LWIP协议栈初始化密切相关函数,和一些协议栈配置信息的检查与输出。
mem.c memp.c 两种特有的内存管理方式实现对协议栈内存的有效管理。
netif.c 包含了协议栈接口管理的相关函数,协议栈支持多个网络接口。
pbuf.c 包含了协议栈内核使用的数据包管理函数,采用特殊的数据包结构,避免各层次间拷贝。提高数据传递效率,同时节省内存空间。
raw.c 为应用层提供了一种直接和IP数据包交互的方式,通TCP处于同一等级,享受IP层提供服务。
stats.c 包含协议栈内部数据统计与显示的相关函数,比如内存使用、邮箱、信号量等。
sys.c sys_arch.c 前者实现对操作系统模拟层封装,为协议栈提供统一邮箱、信号量操作函数。后者是完成对操作系统中邮箱和信号量函数的封装。前者是将后者的函数再次封装得到具有协议栈特色的邮箱、信号量操作函数。
tcp.c 对TCP控制块操作函数。
udp.c 包括UDP控制块管理、数据发送函数、数据接收函数等。

下图是api文件夹下截图:
在这里插入图片描述
如图所示,为用户提供了两种简单的上层api接口,一种是协议栈的sequent API,另一种是socket API。这两种API均是通过引进邮箱和信号量等通信与同步机制,实现对内核core中raw API封装和调用。
从用户对的角度来讲,两种API为程序开发提供了方便,但是不可避免降低了代码执行效率和整个系统的稳定性。
api_lib.c和api_msg.c包含了所有sequential API的实现相关函数,前者预留给洪湖的编程接口,后者是对消息封装和处理函数;
neibuf.c包含上层数据包管理函数的实现,netdb.c包含与主机名字转换相关函数,主要再socket中使用;netifapi.c包含上层网络接口管理函数的实现;sockets.c包含socket API实现;
tcpip.c提供上层API与协议栈内核交互的函数,是API功能实现的一个枢纽。

include文件夹下比较重要的文件就两个,一个是opt.h,包含所有内核参数的默认配置;另一个init.h文件,包含源代码相关的宏定义,如协议版本号等。

协议栈

协议栈构成如下:
在这里插入图片描述
对于应用层协议先不管,主要先学习ARP、IP、ICMP、UDP、TCP这些核心协议的原理与代码实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火山宝 && 王林宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值