目录

2.1 LwIP简介

2.2 LwIP文件架构分析

2.2.1 LwIP软件架构

2.2.2 主要模块划分

2.3 IPC通讯机制

2.4 LwIP的3种编程接口

2.4.1 RAW/Callback API

2.4.2 Netconn API


2.1 LwIP简介

LWIP(Light Weight Internet Protocol,轻型网络协议栈)最初是由瑞典计算机科学研究所开发的。在嵌入式系统不断发展的背景下,传统的完整 TCP/IP 协议栈对于资源受限的嵌入式设备(比如一些内存小、处理能力有限的微控制器应用场景)来说过于庞大和复杂,难以有效应用。LWIP 为了满足嵌入式设备接入网络、实现简单网络通信功能的需求,旨在提供一个占用资源少、易于在嵌入式系统中实现和使用的轻量化网络协议栈。

LWIP 支持多种常见的网络协议,主要包括以下这些:

  1. ARP(地址解析协议):实现 IP 地址到物理地址(MAC 地址)的映射,使网络设备能通过 IP 地址找到对应的硬件接口进行通信,是以太网环境中通信的基础协议之一。
  2. IP(网际协议):包括 IPv4 和 IPv6,是网络层的核心协议,负责数据包的寻址和路由选择,支持 IP 分片与重装,以及多网络接口间的数据包转发,实现不同网络之间的数据传输。
  3. TCP(传输控制协议):提供可靠的、面向连接的传输服务,具备拥塞控制、RTT(往返时间)估算、快速恢复和快速转发等特性,保证数据传输的准确性、有序性,并能进行重传处理,适用于对可靠性要求高的场景(如文件传输、网页访问)。
  4. UDP(用户数据报协议):一种无连接的传输层协议,相比 TCP 更简单高效,不保证数据传输的可靠性,但传输延迟小,适合对实时性要求高、允许少量数据丢失的场景(如实时视频流、简单数据上报)。
  5. ICMP(互联网控制消息协议):主要用于在 IP 网络中传递控制消息和进行差错报告,例如常见的 “ping” 命令就基于此协议,可用于检测网络连通性、报告数据包传输中的错误等。
  6. IGMP(互联网组管理协议):支持主机加入或离开多播组,使设备能够接收特定多播组的数据包,适用于多播通信场景,如多媒体数据的组播传输。
  7. PPP(点对点协议):支持点对点的通信连接,包括 PPPoE(基于以太网的点对点协议),常用于拨号上网等场景,实现两个节点之间的数据传输。
  8. DNS(域名系统):负责将域名解析为对应的 IP 地址,使设备能通过易记的域名访问网络中的主机,而无需直接记忆复杂的 IP 地址。
  9. DHCP(动态主机配置协议):自动为网络中的设备分配 IP 地址、子网掩码、网关等网络配置信息,简化网络设备的配置过程,提高网络管理效率。
  10. AUTOIP(自动 IP 配置):当网络中没有 DHCP 服务器时,自动为设备分配一个属于特定网段(169.254.0.0/16)的 IP 地址,使设备能在小型网络中实现基本通信。
  11. SNMP(简单网络管理协议):用于网络设备的管理和监控,允许管理设备收集网络中各节点的信息、配置设备参数等,实现对网络的集中管理。

优点

  • 资源占用少:LWIP 的设计核心就是轻量化,它的代码量相对传统的 TCP/IP 协议栈要小很多,对内存的需求也较低,很适合在资源受限的嵌入式设备中运行,比如常见的 8 位、16 位或者低端 32 位微控制器所构建的物联网节点设备等。
  • 可移植性强:它有着良好的分层架构和代码设计,能够方便地移植到不同的操作系统以及硬件平台上,无论是常见的实时操作系统(如 FreeRTOS、uC/OS 等),还是一些裸机环境下,都可以进行适配移植。
  • 功能相对完整:尽管是轻量级的协议栈,但涵盖了网络通信中常用的基础协议,能满足大多数嵌入式设备接入网络进行简单通信以及与外部服务器交互等常见需求,比如实现设备的远程配置、数据上报等功能。

缺点

  • 功能扩展性有限:对于一些非常复杂、高级的网络功能需求,LWIP 可能无法很好地满足,毕竟其设计初衷是面向资源受限情况提供基本网络通信功能,不像一些大型的、用于服务器端的全功能 TCP/IP 协议栈那样具备丰富的拓展性和高级特性。
  • 性能在高负载下受限:在面对大量并发连接、高速率的数据传输等高强度网络负载场景时,由于其资源占用和自身设计定位的限制,性能可能不如一些专门为高性能服务器等设计的重型协议栈,可能会出现丢包、延迟增加等情况。

2.2 LwIP文件架构分析

2.2.1 LwIP软件架构

LwIP采用分层架构,遵循TCP/IP协议栈的四层模型(应用层、传输层、网络层、链路层),同时支持多种操作系统抽象接口(如无操作系统、FreeRTOS、uC/OS等)。

2.2.2 主要模块划分

LwIP源码主要由以下几个核心模块构成:

模块

功能

core

核心协议实现(IP、ICMP、UDP、TCP、ARP、IPv6等)

netif

网络接口管理(NIC驱动接口)

apps

上层应用协议(HTTP、FTP、SNMP、MQTT、TFTP等)

api

3种编程接口:RAW API、Netconn API、Socket API

arch

架构相关代码(CPU类型、字节序、编译器特性)

include

所有头文件,定义数据结构、宏、函数原型

ports

针对特定平台的移植代码(如STM32、ESP32、Linux模拟等)

2.3 IPC通讯机制

进程间通信(IPC)是操作系统中不同进程之间交换数据和信息的过程。在Linux系统中,提供了多种IPC机制,每种机制都有其独特的优点和应用场景。以下是一些常见的IPC机制:

  1. 管道(Pipe):管道是一种单向通信机制,通常用于父子进程之间的通信。可以使用pipe()系统调用创建一个管道,然后使用fork()创建子进程,一个读取,一个写入。管道是半双工的,数据只能在一个方向上流动,并且只能用于具有亲缘关系的进程之间的通信。
  2. 命名管道(Named Pipe,FIFO):命名管道是一种有名的通信管道,允许不相关的进程之间进行通信。可以使用mkfifo命令或mkfifo()函数创建命名管道。与匿名管道不同,命名管道提供了一个路径名与之关联,允许没有亲缘关系的进程进行通信。
  3. 消息队列(Message Queue):消息队列允许进程通过消息来进行通信。可以使用msgget()、msgsnd()和msgrcv()等系统调用来创建和操作消息队列。消息队列可以存储具有特定格式的数据,每条消息可以包含一个类型标识和数据部分,这使得消息队列比管道更灵活。
  4. 共享内存(Shared Memory):共享内存是一种允许多个进程访问同一块物理内存的IPC方式。它是IPC中最快速的方式,因为共享内存方式的通信没有中间过程,而管道、消息队列等方式则是需要将数据通过中间机制进行转换。共享内存直接将某段内存段进行映射,多个进程间的共享内存是同一块的物理空间,因此不需要进行复制,可以直接使用此段空间。但需要注意的是,共享内存本身并没有同步机制,需要程序员自己控制。
  5. 信号量(Semaphore):信号量是一种计数器,用于控制对多个进程共享的资源进行的访问。它们常常被用作一个锁机制,在某个进程正在对特定的资源进行操作时,信号量可以防止另一个进程去访问它。
  6. 套接字(Socket):套接字是一种通用的IPC方式,不仅限于同一台主机,还可以在不同主机上的进程之间进行通信。套接字通常用于网络编程,但也可以用于本地进程间通信(Unix域套接字)。

2.4 LwIP的3种编程接口

LwIP提供了3种编程接口,分别为RAW/Callback API、NetconnAPI、Socket API。它们的易用性从左到右依次提高,而执行效率从左到右依次降低,用户可以根据实际情况选择合适的API进行网络应用程序的开发。

2.4.1 RAW/Callback API

RAW/Callback API是指内核回调型的API,RAW/Callback API是LwIP的一大特色,在没有操作系统支持的裸机环境中,只能使用这种API进行开发,同时这种API也可以用在操作系统环境中。RAW/Callback API的优点有两个:

  • 可以在没有操作系统的环境中使用。
  • 在有操作系统的环境中使用时,对比另外两种API,可以提高应用程序的效率,节省内存开销。

RAW/Callback API的优点是显著的,但缺点也是显著的:

基于回调函数开发应用程序时的思维过程比较复杂,利用回调函数去实现复杂的业务逻辑时会很麻烦,而且代码的可读性较差。

2)在操作系统环境中,应用程序代码与内核代码处于同一个线程,虽然能够节省任务间通信和切换任务的开销,但是相应地,应用程序的执行会制约内核程序的执行,不同的应用程序之间也会互相制约。在应用程序执行的过程中,内核程序将不可能得到运行,这会影响网络数据包的处理效率。如果应用程序占用的时间过长,而且恰巧这时又有大量的数据包到达,由于内核代码长期得不到执行,网卡接收缓存里的数据包就持续积累,到最后很可能因为满载而丢弃一些数据包,从而造成丢包的现象。

2.4.2 Netconn API

在操作系统环境中,可以使用Netconn API或者Socket API进行网络应用程序的开发。Netconn API是基于操作系统的IPC机制实现的,它将LwIP内核代码和网络应用程序分离成了独立的线程。如此一来,LwIP内核线程就只负责数据包的TCP/IP封装和拆封,而不用进行数据的应用层处理,大大提高了系统对网络数据包的处理效率。

在操作系统环境中,LwIP内核会被实现为一个独立的线程,名为tcpip_thread,使用Netconn API或者Socket API的应用程序处在不同的线程中,我们可以根据任务的重要性分配不同的优先级给这些线程,从而保证重要任务的时效性。简单来说,Netconn API的优缺点如下:

1)相较于RAW/Callback API,Netconn API简化了编程工作,使用户可以按照操作文件的方式来操作网络连接。但是,内核程序和网络应用程序之间的数据包传递,需要依靠操作系统的信号量和邮箱机制完成,这需要耗费更多的时间和内存,另外还要加上任务切换的时间开销,效率较低。

2)相较于Socket API,Netconn API避免了内核程序和网络应用程序之间的数据复制,提高了数据递交的效率。但是,Netconn API的易用性不如Socket API好,它需要用户对LwIP内核所使用的数据结构有一定的了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921059.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921059.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序-day3

页面导航跳转声明式导航注意:url开头要有/1. 导航到 tabBar 页面2. 导航到非 tabBar 页面3. 后退导航编程式导航跳转传参参数可以在onLoad里用option获取下拉刷新事件可在onPullDownRefresh中定义下拉事件对应操作在其中加入这个函数wx.stopPullDownRefresh()&#…

关于ES中文分词器analysis-ik快速安装

ES中文分词器插件 安装快速安装手动安装 应用ik_max_word 与 ik_smart 的区别验证是否生效 官方地址:https://github.com/infinilabs/analysis-ik 安装 快速安装 插件安装(将链接最后的版本号换成当前ES版本号): bin/elastics…

STM32G4 电流环闭环

目录一、STM32G4 电流环闭环1 电流环闭环PID控制2 电流环闭环建模附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)一、STM32G4 电流环闭环 1 电流环闭环 电流环框图 PID控制 时域和拉普拉斯域的传递函数 PID: P比例部分,I积分部分,D微分…

利用 Java 爬虫获取淘宝商品详情 API 接口

本文将详细介绍如何使用 Java 编写爬虫程序,通过淘宝开放平台的高级版 API 接口获取商品的详细信息。一、淘宝商品详情 API 接口概述淘宝开放平台提供了多个 API 接口用于获取商品的详细信息,其中 taobao.item.get 和 taobao.item.get_pro 是常用的接口。…

idea上传本地项目代码到Gitee仓库教程

前言:本地一个项目代码上传到Gitee仓库1.登录Gitee官网新建仓库(命名跟项目同名)2.idea添加Gitee插件(需要Restart)3.idea配置已安装git的路径4.idea添加Gitee账户5.给项目创建Git本地仓库Git仓库创建成功,…

往届生还有机会进入计算机这个行业吗?还能找见好工作吗

前言 最近有很多的往届生来咨询我,问我还能找见工作吗,还能进入这一行吗(大多数都是一些24届,考研失败的同学) 针对目前这种情况,还能不能进,只能说很难,非常难。 在这里&#xff0c…

Python爬虫实战:研究 Lines, bars and markers 模块,构建电商平台数据采集和分析系统

1. 引言 1.1 研究背景 随着互联网技术的飞速发展,网络上积累了海量的数据资源,这些数据蕴含着丰富的信息和价值。如何高效地获取、处理和分析这些数据,成为信息时代面临的重要课题。Python 作为一种功能强大的编程语言,凭借其丰富的库支持和简洁的语法,在网络数据爬取和…

大文件稳定上传:Spring Boot + MinIO 断点续传实践

文章目录一、引言:问题背景二、技术选型与项目架构三、核心设计与实现1. 初始化上传 (/init)2. 上传分块 (/chunk)3. 完成上传与合并 (/complete)4. 查询上传进度 (/progress)四、断点续传工作流程五、方案优势总结六、拓展优化七、方案优势对比一、引言&#xff1a…

表达式语言EL

表达式语言EL 1.EL表达式的作用 可以说&#xff0c;EL&#xff08;Expression Language&#xff09;表达式语言&#xff0c;就是用来替代<% %>的&#xff0c;EL比<%%>更简洁&#xff0c;更方便。 2.与请求参数有关的内置对象 1.使用表达式&#xff1a;<%request…

pycharm无法添加本地conda解释器/命令行激活conda时出现很多无关内容

本文主要解决以下两种问题&#xff1a;1.pycharm在添加本地非base环境时出现无法添加的情况&#xff0c;特征为&#xff1a;正在创建conda解释器--->弹出一个黑窗口又迅速关闭&#xff0c;最终无法添加成功2.在conda prompt中进行activate 指定env&#xff08;非base&#x…

LeetCode 844.比较含退格的字符串

给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a; 输入&#xff1a;s “ab#c”, t “a…

什么是涌浪电压

涌浪电压&#xff08;浪涌电压&#xff09;是电路或设备在运行时突然出现的、超出额定电压的瞬时过电压。它通常由雷击、电感性负载的断开、电力系统的故障切换或大型电容性负载的接通等原因引起。涌浪电压是一种高能量的瞬变干扰&#xff0c;可能损坏电子设备&#xff0c;如击…

uniapp 优博讯k329蓝牙打印机,设置打印机,一键打印

设置页面&#xff1a;<template><view class"pageBg"><u-navbar leftIconColor"#fff" :leftIconSize"28" title"打印设置" bgColor"#3c9cff" :placeholder"true"leftClick"$navigateBack&quo…

pikachu之sql注入

目录 XX型注入 insert/update注入 delete注入 "http header"注入 基于boolian的盲注 基于时间的盲注 宽字节注入&#xff08;wide byte注入&#xff09; pikachu靶场的字符型注入中xx or 11#可以得到所有用户的信息。 XX型注入 首先输入1探测一下。 然后返回…

TLS(传输层安全协议)

文章目录一、核心概念二、为什么需要 TLS/SSL&#xff1f;三、工作原理与详细流程握手步骤详解&#xff1a;1.ClientHello & ServerHello&#xff1a;2.服务器认证 (Certificate, ServerKeyExchange)&#xff1a;3.客户端响应 (ClientKeyExchange, Finished)&#xff1a;4.…

【SpringMVC】SSM框架【二】——SpringMVC超详细

SpringMVC 学习目标&#xff1a; 1.SpringMVC简介 1&#xff09;web访问流程1.web服务器通过浏览器访问页面2.前端页面使用异步提交的方式发送请求到后端服务器3.后端服务器采用&#xff1a;表现层—业务层—数据层的架构进行开发4.页面请求由表现层进行接收&#xff0c;获取用…

PostgreSQL表膨胀的危害与解决方案

PostgreSQL 的 表膨胀&#xff08;Table Bloat&#xff09; 是数据库中由于 MVCC&#xff08;多版本并发控制&#xff09;机制导致的一种常见性能问题&#xff0c;表现为物理存储空间远大于实际有效数据量。以下是详细解释及其危害&#xff1a;一、表膨胀的产生原因 1. MVCC 机…

Elasticsearch面试精讲 Day 5:倒排索引原理与实现

【Elasticsearch面试精讲 Day 5】倒排索引原理与实现 在“Elasticsearch面试精讲”系列的第五天&#xff0c;我们将深入探讨搜索引擎最核心的技术基石——倒排索引&#xff08;Inverted Index&#xff09;。作为全文检索系统的灵魂&#xff0c;倒排索引直接决定了Elasticsearc…

【小白笔记】基本的Linux命令来查看服务器的CPU、内存、磁盘和系统信息

一、 核心概念与命令知识点英文名词&#xff08;词源解释&#xff09;作用与命令CPU (中央处理器)Central Processing Unit&#xff1a;<br> - Central&#xff08;中心的&#xff09;&#xff1a;来自拉丁语 centralis&#xff0c;意为“中心的”。<br> - Process…

51c大模型~合集177

自己的原文哦~ https://blog.51cto.com/whaosoft/14154064 #公开V3/R1训练全部细节&#xff01; 刚刚&#xff0c;DeepSeek最新发文&#xff0c;回应国家新规 AI 生成的内容该不该打上“水印”&#xff1f;网信办《合成内容标识方法》正式生效后&#xff0c;De…