LwIP学习笔记1 - LwIP的设计目的、分层设计思想及模块划分概览

引言

LwIP是嵌入式常用的TCP/IP协议栈组件,学习LwIP有助于深入理解嵌入式中的以太网应用。本文翻译注解了作者Adam Dunkels 2001年写的LwIP论文报告的Abstract、session1~3部分,有助于从一个更宏观的角度来理解LwIP。原文链接:Adam Dunkels’ initial LwIP paper

| 文章如有疏漏,欢迎指出~

文章目录

  • 引言
  • 正文
    • 0 Abstract-LwIP论文概述:
    • 1 Introduction-LwIP的背景和意义
    • 2 Protocol layering-LwIP的分层设计思路
    • 3 Overview-LwIP的分层及子模块概览

正文

0 Abstract-LwIP论文概述:

LwIP是TCP/IP协议栈的实现。LwIP协议栈关注如何减少内存使用量和代码大小,使LwIP适用于资源非常有限的小型客户端,如嵌入式系统。为了减少处理步骤和内存消耗,LwIP使用特制的API,无需进行任何数据复制。
本报告描述了LwIP的设计和实现。描述了协议实现及其子系统(如memory和buffer管理系统)中使用的算法和数据结构。本报告中还包括LwIP API的参考手册和使用 LwIP 的一些代码示例。

1 Introduction-LwIP的背景和意义

在过去的几年里,(社会对)将计算机和计算机支持的设备连接到无线网络的兴趣稳步增长。
计算机与日常设备的无缝集成越来越紧密,价格也在下降。
与此同时,蓝牙和IEEE 802.11b无线局域网等无线网络技术正在兴起。
这促使医疗保健,安全和安保,运输和加工工业等领域产生了许多新的富有吸引力的场景。
传感器等小型设备可以连接到现有的网络基础设施,如全球互联网,并从任何地方进行监控。
//注解:有越来越多的设备通过网络连在了一起

互联网技术已经证明自己足够灵活,可以融入过去几十年不断变化的网络环境。
虽然互联网技术最初是为ARPANET等低速网络开发的,但如今的互联网技术运行在一个更大范围的链路技术上,在带宽和误码率方面已具有截然不同的特征。
在未来的无线网络中使用现有的互联网技术是非常有利的,因为大量使用互联网技术的应用进程已被开发了出来。
此外,全球互联网的大规模连接也是一个强大的动力。
//注解:互联网技术灵活度高、适用范围广、前景广阔,联网好处多多

由于传感器等小型设备通常倾向于设计得体积小且便宜,因此互联网协议在小型设备上的实现将不得不面临有限的计算资源和内存的挑战。
本报告描述了一个名为LwIP的小型TCP/IP stack的设计和实现,该stack足够小,可以在最小系统中使用。
//注解:在万物互联的时代趋势背景下,设备联网必然面临资源有限的挑战,LwIP应运而生。

本报告的结构如下: //注解:讲了Adam Dunckle的这篇文章的主要结构
第2~4节概述了LwIP堆栈
第5节介绍了操作系统仿真层 - the operating system emulation layer
第6节介绍了memory和bubffer管理 - the bu®er and memory management subsystems
第7节介绍了LwIP的网络接口抽象 - network interface functions
第8~10节描述了IP、UDP和TCP协议的实现
第11、12节介绍如何与LwIP接口并介绍LwIP API
第13、14节分析了实施情况
第15节提供了LwIP API的参考手册
第17、18节显示了各种代码示例

2 Protocol layering-LwIP的分层设计思路

TCP/IP套件中的协议设计遵循分层设计思想,每个协议层解决通信问题中一个独立的部分。
这种分层设计可以作为设计LwIP的参考,因为每个协议都可以分开独立实现。
然而,以严格分层的方式实现LwIP可能会增加协议层之间的通信开销而降低整体性能。
为了克服这些问题,设计LwIP时可以让其他层的协议知道某层协议的某些内部信息。但必须注意,在各层之间仅共享重要信息。
//注解:LwIP参考TCP/IP的分层设计思想进行设计,但为了减少CPU资源消耗和内存消耗,不会完全参照TCP/IP,有的时候分层会不那么严格。

大多数TCP/IP的实现会让application layer和lower protocol layer之间严格分层,而lower protocol layers之间可以或多或少地交错。
在大多数操作系统中,lower protocol layers作为操作系统内核的一部分实现,具有用于与application layer的进程通信的入口点。
application program作为TCP/IP的抽象实现,其中网络通信与进程间通信或file I/O只有很小的差异。
这样做意味着,由于应用进程不知道较低层使用的buffer机制,因此它无法利用此信息来重用buffer。例如,重用使用频繁的数据。此外,当应用进程发送数据时,必须将此数据从application layer进程的内存空间复制到内部buffers中,然后才能由网络代码进行处理。
//注解:讲了讲大多数TCP/IP的实现中的分层比较严格,内存和buffer要在层与层之间传来传去。开销大,有可以优化的空间。

在最小系统(如LwIP的目标系统)中使用的操作系统通常不会在内核和application layer进程之间维持一个很严格的边界。
这允许LwIP通过共享内存在application layer进程和lower layer protocol之间用更轻松的方式实现通信。
特别地,application layer可以知道lower layer使用的buffer处理机制。因此,应用进程可以更有效地重用buffer。
此外,由于application layer进程与networking code共享内存,因此application layer进程可以直接读取和写入内部buffers,从而节省了内存复制所消耗的系统资源。
//注解:讲了讲LwIP通过共享内存、打破层壁垒的方式节约了CPU资源和内存占用量

3 Overview-LwIP的分层及子模块概览

//注解:下面讲LwIP怎么分层的
与许多其他的TCP/IP实例一样,分层协议设计已作为LwIP实现设计的指南。
每个协议作为一个单独的模块实现,每个模块都有一些函数作为本协议的接口。
尽管协议是分开实现的,但如上所述,为了提高处理速度和内存使用相关的性能,会有一些违背分层设计思想的跨层设计。
例如,在验证传入TCP段的校验和以及解复用段时,TCP模块必须知道该段的源IP地址和目标IP地址。TCP模块不是通过函数调用将这些地址从别的模块获得,而是自己就知道IP标头的结构,因此可以自己提取此信息。 //注解:一个LwIP通过跨层处理的例子

//注解:下面讲LwIP由哪些模块组成
LwIP由很多模块组成:
(1) TCP/IP协议模块:​​IP、ICMP、UDP和TCP
(2) 支持模块:
操作系统仿真层(第5节)- the operating system emulation layer
缓冲区和内存管理子系统(第6节)- the bu®er and memory management subsystems
网络接口函数和用于计算Internet校验和的函数(第7节)- network interface functions
一个抽象API(第12节)- Application Program Interface

你可能感兴趣的:(network,笔记,网络)