28-ESP32-S3 lwIP 轻量级 TCP/IP 协议栈

ESP32-S3 lwIP

介绍

ESP32-S3 是一款集成了Wi-Fi 和蓝牙功能的微控制器。它的设计初衷是为了方便嵌入式系统的开发。不过你可能会好奇,ESP32-S3 怎么实现与外部网络的通信呢?这里就要提到一个开源的 TCP/IP 协议栈,它叫做lwIP(轻量级 IP)。

通过使用 lwIP 库,ESP32-S3 可以轻松实现与外部网络的交互。它能发送和接收数据包,并处理网络连接等操作。因此,可以说ESP32-S3 是借助lwIP来实现网络功能的利器。

TCP/IP 协议栈是什么

TCP/IP协议栈是一种用于计算机网络通信的协议集合。它包括传输控制协议(TCP)和互联网协议(IP),这两种协议是最早也是最核心的协议。TCP/IP协议栈定义了数据如何在网络中传输,以及如何通过网络地址找到网络上的设备。网络协议体系本身很复杂庞大,内容很多,这里只做简单讲解

TCP/IP 协议栈概述

TCP/IP 协议栈(Transmission Control Protocol/Internet Protocol)是一组用于计算机网络通信的协议集合。它被设计为模块化结构,每一层都有特定的功能,彼此协同工作,共同实现可靠的数据传输。TCP/IP 协议栈分为四层:应用层、传输层、网络层和数据链路层。

各层次详解

1. 应用层

应用层是 TCP/IP 协议栈的顶层,负责处理特定的应用程序通信。它包含许多常用的协议,每个协议对应不同的应用服务。

应用层协议描述示例应用
HTTP(HyperText Transfer Protocol)用于万维网(WWW)上的数据通信,支持浏览器与服务器之间的交互网页浏览
FTP(File Transfer Protocol)用于在网络中传输文件文件传输
SMTP(Simple Mail Transfer Protocol)用于电子邮件的发送和接收电子邮件
DNS(Domain Name System)将域名解析为 IP 地址,方便用户访问网站域名解析
2. 传输层

传输层的主要功能是提供端到端的通信服务,确保数据可靠传输。它有两个主要协议:

传输层协议描述特点
TCP(Transmission Control Protocol)提供可靠的、面向连接的服务通过三次握手建立连接,确保数据包有序和完整传输,提供流量控制和拥塞控制
UDP(User Datagram Protocol)提供无连接的服务,适用于需要快速传输且不要求高可靠性的应用没有连接建立和断开过程,不保证数据包的顺序和完整性,但传输延迟较低
3. 网络层

网络层负责数据包在网络中的路由选择和转发,主要协议是 IP(Internet Protocol)。

网络层协议描述
IP(Internet Protocol)负责将数据包从源地址传送到目标地址,提供不可靠、无连接的数据传输服务
ICMP(Internet Control Message Protocol)用于网络设备之间发送控制消息,如 Ping 命令用于检测网络连接状态
ARP(Address Resolution Protocol)将 IP 地址解析为物理地址(MAC 地址),用于局域网内通信
RARP(Reverse Address Resolution Protocol)将物理地址解析为 IP 地址,常用于无盘工作站启动
4. 数据链路层

数据链路层负责在物理网络上的数据传输,具体实现取决于底层网络技术,如以太网、Wi-Fi 等。

数据链路层协议描述
以太网(Ethernet)规定了物理层和数据链路层的技术标准,使用 MAC 地址进行帧的标识和传输
Wi-Fi基于 IEEE 802.11 标准,实现无线局域网通信,包含多种协议和加密方式,确保数据安全传输

数据传输过程

以一个简单的 HTTP 请求为例,来说明 TCP/IP 协议栈的工作过程:

层次处理步骤
应用层用户在浏览器中输入网址,浏览器生成 HTTP 请求
传输层HTTP 请求被封装为 TCP 报文,TCP 协议添加源端口、目标端口、序列号等信息
网络层TCP 报文被封装为 IP 数据包,添加源 IP 地址、目标 IP 地址等信息
数据链路层IP 数据包被封装为帧,添加源 MAC 地址、目标 MAC 地址等信息,通过物理网络传输

数据在各层之间传递时,每一层都添加自己的头部信息,通过封装和解封装过程,实现数据从源到目的的可靠传输。

🚨有一点需要注意的是,TCP/IP协议栈和传统的OSI模型并不完全一样。TCP/IP协议栈是一个更简化的模型,它更加强调实际的协议实现和因特网的实际运作方式。相比之下,OSI模型更加全面和理想化,它提供了一个框架来描述不同系统之间的交互方式。
在这里插入图片描述

lwIP 简介

lwIP(轻量级TCP/IP协议栈)是一个专为嵌入式系统设计的开源TCP/IP协议栈。它被创造得非常小巧,只需占用几十KB的RAM和约40KB的ROM。lwIP提供了一套完整的TCP/IP网络协议功能,包括TCP、UDP、IPv4、IPv6、ICMP、IGMP、SNMP、ARP、PPP等协议。同时,lwIP非常灵活,既可以在无操作系统环境下工作,也能与多种操作系统兼容。这给开发者提供了更大的自由度。它具备内存占用小、代码简单、易于移植等优点,非常适合在像ESP32-S3这样的微控制器上使用。

lwIP 特性参数

特性描述
内存占用lwIP 在内存占用方面进行了优化,使其适用于资源受限的嵌入式系统。具体内存占用取决于配置和版本,但通常来说,它可以仅使用十几 KB 的 RAM 和大约 40 KB 的 ROM 即可运行。
协议实现
应用层未实现,需要开发者自行集成或实现特定应用程序
传输层实现了 TCP/UDP 协议功能
网络层实现了 IP 协议、ARP 协议和 ICMP 协议功能
扩展性支持一些实验性的扩展,例如 IPv6 协议
硬件接口
WiFi 网络接口支持 WiFi 连接
以太网网络接口支持以太网连接
用户编程接口
RAW低级接口,适合高效的网络编程
NETCONN中级接口,提供线程安全的函数调用
SOCKET高级接口,类似 BSD 套接字,适合应用程序开发
硬件支持网络接口层的实现依赖于底层硬件和驱动程序。开发者需要根据具体的硬件平台和需求进行相应的配置和优化。
其他特性
PPP 协议支持点对点通信协议
DHCP 协议支持动态分配 IP 地址

lwIP 与TCP/IP 体系结构的对应关系

lwIP 是一个轻量级的开源 TCP/IP 协议栈,它实现了 TCP/IP 体系结构的核心协议。下面的表格展示了 lwIP 各个模块与 TCP/IP 体系结构各层的对应关系:

TCP/IP体系结构lwIP实现
应用层lwIP提供了TCP/IP协议栈的实现,包括IP、TCP、UDP、ICMP等协议
传输层lwIP实现了TCP和UDP协议
网络层lwIP实现了IP协议
网络接口层lwIP并没有实现,这一层由硬件来实现

嘿,看上面那张图,你就能一目了然地明白lwIP软件库主要是怎么一回事。😊 它实际上就是按照TCP/IP的架构分成三个层次:应用层、传输层和网络层。 这几层一起合作来处理和传送数据包,确保数据在网络中可靠地传输。💻可是,网络接口层作为TCP/IP协议栈的最底层,它的功能可不是通过软件能完完全全实现的。🔌 它的主要任务就是把数据包转换成光电模拟信号,这样才能在物理媒介上传输。这个过程涉及到与硬件直接打交道,比如数据的调制解调和信号的转化,这些可都是软件无法模拟或实现的。🔋 所以,虽然lwIP软件库不能负责网络接口层的功能,但是它能够与底层硬件紧密配合,从而提供完整而高效的TCP/IP通信功能。✨ 这也是为什么lwIP成为适用于资源有限的嵌入式系统的最佳选择。💪

WiFi MAC 内核简介

WiFi MAC(媒体访问控制)内核是WiFi通信的核心部分,负责处理WiFi的物理层和数据链路层的任务。ESP32-S3的WiFi MAC内核支持802.11b/g/n协议,可以在2.4GHz频段进行通信。它还支持多种安全协议,包括WEP、WPA/WPA2和WPA3。

关于ESP32的WiFi MAC内核,大致来说,它就是在玩TCP/IP协议的那层网络接口的角色。咱们看看下面这张图来介绍WiFi通讯的情况,就像这张图上面画的那样。

在这里插入图片描述
从上图见,ESP32-S3芯片有内置的WiFi MAC内核。咱们发数据到网络时,数据先转成无线信号,然后发到连接的WiFi路由器中。然后,路由器通过网线把数据传到目标主机,完成数据传输。

lwIP Socket 编程接口

为了方便将其他平台上的网络应用程序移植到lwIP,并让更多开发者快速上手,作者设计了三种应用程序编程接口:2️⃣RAW 、2️⃣NETCONN 和2️⃣Socket 。RAW接口只适用于无操作系统环境,对于ESP32内嵌FreeRTOS操作系统来说无法使用。Socket接口更简易实现了网络连接(作者推荐使用),因此,为了网络连接,建议使用Socket API。

lwIP Socket API

在LwIP中,Socket API是基于NETCONN API之上来实现的。以下是lwIP中的一些主要Socket API:

  • socket():这个函数的功能是向内核申请一个套接字。
  • bind():该函数的功能与netconn_bind()函数是一样的,用于服务器端绑定套接字与网卡信息。
  • connect():用于建立与指定套接字的连接。
  • listen():用于监听指定套接字的连接请求。
  • accept():用于接受连接请求。
  • read(), recv(), recvfrom():用于从套接字接收数据。
  • sendto(), send(), write():用于向套接字发送数据。
  • close():用于关闭套接字。
  • ioctl(), ioctlsocket():用于控制套接字的行为。
  • setsockopt():用于设置套接字选项。
  • getsockopt():用于获取套接字选项。

更详细的信息,可以参考这篇文章。

总结

参考资料

正点原子DNESP32S3 开发板教程-IDF 版

乐鑫编程指南 lwIP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658533.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# TcpClient

TcpClient 自己封装的话,还是比较麻烦的,可以基于线程,也可以基于异步写,最好的办法是网上找个插件,我发现一个插件还是非常好用的:STTech.BytesIO.Tcp 下面是这个插件作者的帖子,有兴趣的可以…

OpenHarmony Liteos_A内核之iperf3移植心得

一、iperf3工作原理 iperf3主要的功能是测试基于特定路径的带宽,在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报并记下发送的时间,或者客户端在一定的时间内发送数据并记下发送的总数据。带宽的…

MySQL--二进制日志

目录 一、作用 二、binlog配置 1.查看当前配置 2.修改配置文件​ 3.binlog配置参数解释 三、binlog记录内容说明 1.记录内容 2.DDL、DCL记录格式 3.DML记录格式 4.记录内容查看 四、bin_log_format 记录模式 1.行模式 Row 2.语句模式 Statement 3.混合模式 五、…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议,在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

【Matlab函数分析】绘图函数:mesh网格曲面图

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

FTP协议——BFTPD基本操作(Ubuntu+Win)

1、描述 本机(Win10)与虚拟机(Ubuntu22.04.4)上的BFTPD服务器建立FTP连接,执行一些基本操作。BFTPD安装教程:FTP协议——BFTPD安装(Linux)-CSDN博客 2、 步骤 启动BFTPD。启动文件…

Spring MVC 工作流程源码分析

前言: 我们知道 Spring MVC 的核心是前端控制器 DispatcherServlet,客户端所有的请求都会交给 DispatcherServlet 来处理,本篇我我们来分析 Spring MVC 处理客户端请求的流程,也就是工作流程。 Sping MVC 只是储备传送门&#x…

Talken - 语音命令系统

Talken - 语音命令系统 通过集成最先进的语音命令系统 Talken,释放游戏的全部潜力。 借助 Talken,您可以让玩家通过语音命令控制动作,从而重新定义游戏体验。 观看角色移动并对语音指令做出实时反应,模糊游戏与现实之间的界限。 主要特征: 🗣️ 语音驱动的游戏玩法:…

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律,来判断是否是归并排序,但实在太过于复杂,我很难去想出这样的规律…因此,参考了其他博主的思路——每做一次排…

7 步解决Android Studio模拟器切换中文输入

详细步骤传送地址:Android Studio 模拟器切换中文输入 目录 01 问题概述 02 模拟器的调试 01 问题概述 大家在使用Android Studio 软件进行项目演示时总会遇到一些输入框需要输入中文汉字的情况,由于AS自带的模拟器基本都是英文,这时就有同…

服务器主机托管一站式托管服务有哪些?

服务器主机托管一站式托管服务,作为现代企业信息化建设的重要一环,为企业提供了一种高效、安全、可靠的服务器运行环境。下面,我们将从多个方面详细介绍这一服务的内容。 一、硬件与基础设施 服务器主机托管服务首先涵盖了服务器硬件和网络基…

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1(反序列化命令执行漏洞)二、CVE-2018-8715(AppWeb认证绕过漏洞)三、apisix3.1 CVE-2020-13945(默认密钥漏洞)3.2 CVE-2021-45232(Dashboard API权限绕过导致RCE) 一…

vue3 手动简单 24h 甘特图封装

甘特图 手动封装简版甘特图,纯展示功能,无其他操作 文章目录 甘特图前言效果图组件使用总结 前言 开始的思路是使用echarts 瀑布图来体现,但是试验后发现,头部时间功能不满足,然未找到其他组件,于是手动封…

厨师服穿戴智能监测摄像机

随着科技的发展,智能监测摄像技术已经在各个领域得到了广泛应用。近年来,厨师服穿戴智能监测摄像机逐渐成为了厨房管理和食品安全监控的重要工具。这种设备能够为厨师提供实时监测和反馈,提高工作效率和食品安全,进一步提高整个餐…

网上书城|基于SprinBoot+vue的网上书城管理系统(源码+数据库+文档)

网上书城管理系统 目录 基于SprinBootvue的网上书城管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介…

贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!

贵州大学计算机科学与技术学院坐落在贵州大学北校区(贵阳花溪)。 学院现有教职工139人,其中专职教师126人,教授17人,副教授37人,讲师46人,高级实验师4人,实验师17人。具有博士学位的…

部署LAMP环境

红帽9搭建LAMP 安装Apache 2.安装数据库服务 3.安装php (1)使用IP访问/phpinfo.php 4.安装phpMyAdmin (1)数据库端口改为学号后五位 (2)登录phpmyadmin 5.SSH增加一个端口10022,fttp增加两个端口10080和8080 &#xf…

如何利用云平台上更好地规划安全生产教育与培训

在平台上进行安全教育和培训,可以采取以下步骤和策略,以确保教育的有效性和参与度: 一、明确教育目标和培训内容 确定教育目标:明确希望员工通过培训达到的安全意识和技能水平。 制定培训内容:根据行业特点、岗位需求…

科学技术创新杂志科学技术创新杂志社科学技术创新编辑部2024年第10期目录

科技创新 单桩穿越岩溶发育地层力学特征与溶洞处置措施研究 刘飞; 1-7《科学技术创新》投稿:cnqikantg126.com 基于多目标优化的中低压配电网电力规划研究 向星山;杨承俊;张寒月; 8-11 激光雷达测绘技术在工程测绘中的应用研究 张军伟;闫宏昌; 12-15 …