没有合适的资源?快使用搜索试试~ 我知道了~
首页LwIP协议栈设计与实现详解:资源受限系统的嵌入式解决方案
LwIP协议栈设计与实现详解:资源受限系统的嵌入式解决方案
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 66 浏览量
更新于2024-07-04
收藏 858KB PDF 举报
"LwIP协议栈的设计与实现_中文译稿.pdf"是一份深入解析LwIP(Lightweight Internet Protocol)协议栈的详细文档,由瑞典的Adam Dunkels撰写,特别针对资源受限的嵌入式系统进行优化。LwIP的设计目标是提供一个轻量级、内存效率高且代码紧凑的TCP/IP协议栈解决方案,以满足在内存和处理能力有限的环境中高效运行的需求。 该文档详细介绍了LwIP的设计过程,特别是如何通过裁剪API(应用程序编程接口)来避免数据复制,从而降低内存使用和代码复杂性。它着重讨论了协议栈的实现策略,包括但不限于底层网络协议(如IP、ICMP、UDP等)、网络连接管理和数据包处理的算法与数据结构。此外,文中还涵盖了内存管理和缓冲区管理这类关键子系统的内部工作原理。 作者以一种易于理解的方式阐述了LwIP的体系结构,使读者能够掌握其核心组件的功能和工作方式。文章还包含了LwIP的参考手册,为开发者提供了丰富的技术指南,以及实际应用LwIP的示例代码,帮助读者将理论知识转化为实践。 随着近年来物联网(IoT)和嵌入式系统的快速发展,对轻量级网络协议的需求日益增长,LwIP因其性能和资源效率的优势,成为许多小型设备和嵌入式系统开发者的首选。通过阅读这份文档,读者不仅可以了解LwIP的设计理念,还能学习到如何在资源受限的环境中有效利用这一协议栈,提升系统的整体效能。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/85275351/bg9.jpg)
TCP/IP 协议栈 LwIP 的设计与实现 - 6 -
了网络系统不会使用系统中所有可用内存,即使网络系统使用了所有自己的内存,也不会扰
乱其它程序的操作。
在内部,内存管理模块通过在每一个内存分配块的顶部放置一个比较小的结构体来保存
内存分配纪录。这个结构体拥有三个成员变量,两个指针一个标志,见图 4。next 与 prev
分别指向内存的下一个和上一个分配块,used 标志标示该内存块是否已被分配。
图 4 存储区分配结构
内存管理模块根据所申请分配的大小来搜索所有未被使用的内存分配块,检索到的最先
满足条件的内存块将分配给申请者。已经分配的内存块被回收后,使用标志 used 清零。为
了防止内存碎片的产生,上一个与下一个分配块的使用标志会被检查,如果他们中的任何一
个还未被使用,这个内存块将被合并到一个更大的未使用内存块中。
7 网络接口
在 LwIP,物理网络硬件的设备驱动通过一个与 BSD 中相似的网络接口结构来表示。见
图 5。网络接口保存在一个全局链表中,它们通过结构体中的 next 指针连接。
每一个网络网络接口都拥有一个名字,保存在图 5 中的 name 字段。两个字符的名字标
识网络接口使用的设备驱动的种类并且只用于这个接口在运行时由人工操作进行配置的情
况。名字由设备驱动来设置并且应该反映通过网络接口表示的硬件的种类。比如蓝牙设备
(bluetooth)的网络接口名字可以是 bt,而 IEEE 802.11b WLAN 设备的名字就可以是 wl。
既然网络接口的名字不必具有唯一性,因此 num 字段被用来区分相同类别的不同网络接口。
三个 IP 地址 ip_addr,netmask 与 gw 用于 IP 层发送和接收信息包,有关它们的具体使
用说明见下一节。一个网络接口只能拥有一个 IP 地址,每一个 IP 地址应当创建一个网络接
口。
当收到一个信息包时,设备驱动程序调用 input 指针指向的函数。
网络接口通过 output 指针连接到设备驱动。这个指针指向设备驱动中一个向物理网络
发送信息包的函数,当信息包被发送时由 IP 层调用。这个字段由设备驱动的初始设置函数
填充。output 函数的第三个参数 ipaddr 是应该接收实际的链路层帧的主机的 IP 地址。它不
翻译 焦海波 6/2/2006
Click to BUY NOW!
P
D
F
-
X
C
h
a
n
g
e
E
d
i
t
o
r
w
w
w
.
t
r
a
c
k
e
r
-
s
o
f
t
w
a
r
e
.
c
o
m
Click to BUY NOW!
P
D
F
-
X
C
h
a
n
g
e
E
d
i
t
o
r
w
w
w
.
t
r
a
c
k
e
r
-
s
o
f
t
w
a
r
e
.
c
o
m
![](https://csdnimg.cn/release/download_crawler_static/85275351/bga.jpg)
TCP/IP 协议栈 LwIP 的设计与实现 - 7 -
必与 IP 信息包的目的地址相同。特别地,当要发送 IP 信息包到一个并不在本地网络里的主
机上时,链路层帧会被发送到网络里的一个路由器上。在这种情况下,给 output 函数的 IP
地址将是这个路由器的地址。
最后,state 指针指向网络接口的设备驱动特定状态,它由设备驱动设置。
struct netif {
struct netif *next;
char name[2];
int num;
struct ip_addr ip_addr;
struct ip_addr netmask;
struct ip_addr gw;
void (* input)(struct pbuf *p, struct netif *inp);
int (* output)(struct netif *netif, struct pbuf *p,
struct ip_addr *ipaddr);
void *state;
};
图 5 netif 结构
8 IP 处理
LwIP 仅实现了 IP 层大部分的基本功能,能够发送、接收以及转发信息包,但是不能接
收和发送 IP 分片包,也不能处理携带 IP 参数选项的信息包。不过对大多数的应用来说,这
不会引起任何问题。
8.1 接收信息包
对到达的 IP 信息包,由网络设备驱动调用 ip_input()函数开始处理。在这里完成对 IP
版本字段及包头长度的初始完整性检查,同时还要计算和验证包头校验和。协议栈假定代理
会重新组合 IP 分片包为一个完整的包,因此它会把收到的 IP 分片包直接丢掉。同样,信息
包携带的 IP 参数选项也被认为已经由代理处理过,这些内容会被删掉。
接下来,函数检查目的地址是否与网络接口的 IP 地址相符以确定信息包是否到达预定
主机。网络接口在链表中被排序并且采用了线性检索。因为预计接口的数量比较少,所以没
有实现比线性检索更好的检索策略。
如果一个到达的信息包被发现已经到达了目的主机,则由协议字段来决定信息包应该传
送到哪一个上层协议。
8.2 发送信息包
外发的信息包由 ip_output()函数处理,该函数使用 ip_route()函数查找适当的网络接口来
传送信息包。当外发的网络接口确定后,信息包传给以外发网络接口为参数的 ip_output_if()
函数。在这里,所有的 IP 包头字段被填充,并且计算 IP 包头校验和。IP 信息包的源及目标
地址作为参数被传递给 ip_output_if()函数。源 IP 地址可以被忽略,不过在这种情况下外发
网络接口的 IP 地址会作为 IP 信息包的源 IP 地址被使用。
ip_route()函数通过线性检索网络接口链表找到适当的网络接口。在检索期间,用网络接
口的网络掩码对 IP 信息包的目标地址进行掩码运算。如果经掩码运算的目标地址等与同样
经掩码运算的接口 IP 地址(
即网络地址相等,同在一个子网中,译者注),则选择这个接口。如
翻译 焦海波 6/2/2006
Click to BUY NOW!
P
D
F
-
X
C
h
a
n
g
e
E
d
i
t
o
r
w
w
w
.
t
r
a
c
k
e
r
-
s
o
f
t
w
a
r
e
.
c
o
m
Click to BUY NOW!
P
D
F
-
X
C
h
a
n
g
e
E
d
i
t
o
r
w
w
w
.
t
r
a
c
k
e
r
-
s
o
f
t
w
a
r
e
.
c
o
m
剩余46页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/f6f011970f0f4dc0b48561c888fd7c9f_xipengbozai.jpg!1)
卷积神经网络
- 粉丝: 352
- 资源: 8440
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)