庐山真面目之——LWIP初探

news2024/12/23 14:51:04

目录

LWIP简介

网络层协议分层模型介绍

 LWIP源代码结构

lwip源码文件说明

lwip的contrib包文件说明

 以太网接入MCU方案

LWIP结构框图


LWIP简介

lwIP 是 Light Weight(轻型)IP 协议,有无操作系统的支持都可以运行。lwIP 实现的重点 是在保持 TCP/IP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM 和 40K 左右的 ROM 就可以运行,这使 lwIP 协议栈适合在低端的嵌入式系统中使用。lwIP 的设计理 念下,既可以无操作系统使用,也可以带操作系统使用既可以支持多线程,也可以无线程。它 可以运行在 8 位以及 32 位的微处理器上,同时支持大端、小端系统。总的来说:lwIP 是一款 小型、开源的 TCP/IP 协议栈。

简单来说就是为了在内存如金的嵌入式系统中,既能满足完整TCP/IP协议栈功能的同时,又能够最小化要消耗的内存,LWIP是一个精简型的TCP/IP协议栈,是一个阉割的TCP/IP协议栈。

实现的主要功能有:

  • ARP协议:以太网地址解析协议,属于网络层
  • IP协议:包括IPV4和IPV6,支持IP分片与重装,支持多网络接口下数据包转发,属于网络层
  • ICMP协议:Internet控制报文协议,用于网络调试和维护;如常用的ping功能就属于该协议,属于网络层
  • IGMP:Internet组管理协议,属于网络层,用于网络组管理,可以实现多播数据的接收
  • UDP:用户数据报协议,属于网络层,属于传输层,是一个面向无连接的不可靠传输协议
  • TCP:支持TCP拥塞控制,RTT估计,快速恢复和重传,属于传输层,是一个面向连接的可靠传输协议
  • DNS:域名解析,属于应用层,我们经常难以记住主机地址,容易记住域名,比如www.baidu.com就是一个域名
  • SNMP:简单网络管理协议,属于应用层协议
  • DHCP:动态主机配置协议,属于应用层协议
  • AUTOIP:IP地址自动配置,属于应用层协议
  • PPP:点对点协议,属于应用层协议

网络层协议分层模型介绍

说到计算机网络,就不得不先说有名的 OSI 模型,国际标准化组织 ISO 于 1984 提出的 OSI RM(Open System Interconnection Reference Model,开放系统互连参考模型),其模型结构 分为应用、表示、会话、传输、网络、数据链路、物理层共 7 层,每一层负责不同通信功能, 但它既复杂又不实用。TCP/IP 体系结构则不同,它现在得到了非常广泛的应用。TCP/IP 是一 个四层的体系结构,它包含应用层、传输层、网络层和网络接口层,不过从实质上讲,TCP/IP 只有最上面的三层,因为最下面的网络接口层并没有具体内容。因此在学习计算机网络的原理 时往往采取折中的方法,即综合 OSI 模型和 TCP/IP 模型的优点,采用一种只有五层协议体系 的结构,这样即简洁又能将概念阐述清楚,这五层协议体系结构如下图所示:

简单来说OSI七层模型就是理论派,TCP/IP协议栈就是实践派。

 应用层:HTTP超文本传输协议,HTTPS更安全的超文本传输协议,FTP文件传输协议,SMTP简单的邮件传输协议,DNS域名服务,OSPF开发最短路径优先等协议,他们直接为用户的应用进程提供服务。

传输层:负责向两个主机中进程之间的通讯提供服务。由于一个主机可以同时运行多个进程,所以传输层分为复用和分时功能。传输层主要使用两种协议,TCP和UDP协议。

网络层:负责分组交换网上的不同主机提供的通信服务务,在发送数据时,网络层把传输层 产生的报文段或用户数据封装成分组或包进行传送。在 TCP/IP 体系中,由于网络层使用 IP 协 议,因此分组也叫做 IP 数据报,简称数据报。

数据链路层:在两个相邻的节点之间传送数据时,数据链路层将网络层提交下来的 IP 数 据报组装成帧。

物理层:物理层的任务就是透明地传送比特流。

知道数据帧最多包含1500个字节,当发送的数据超过这个长度时,需要进行分片和重组的操作。

数据在传输过程中涉及到封包和解包的操作,如下图所示:

 LWIP源代码结构

其中涉及的文件主要分LWIP源码和contrib包,contrib包提供用户LWIP移植文件以及相关的LWIP的demo.它不属于LWIP内核的一部分,它只是起到一个提供移植文件和学习实例的作用。

lwip源码文件说明

 从上图可知,lwip-2.1.3 文件夹包含的文件和文件夹非常多,读者只了解 src 文件夹下的内 容即可,其他文件和文件夹与移植无关。下面我们简单的了解一下这些文件和文件夹的作用。

(1) CHANGELOG 该文件主要记录 lwIP 源码更新。

(2) COPYING 该文件主要记录 lwIP 开源软件 license。

(3) FEATURES 该文件主要描述 lwIP 的特点。

(4) FILES 该文件主要介绍 lwIP 源码包的文件目录信息。

(5) README 该文件是 lwIP 自述文件。

(6) UPGRADING 该文件主要描述 lwIP 升级版本。

(7) doc 文件夹 该文件夹里面是关于 lwIP 的一些文档,这些文档比较零散,不建议参考。

(8) src 文件夹 该文件夹包含 lwIP 源码文件,这里是非常重要的!!!!,它包含了五个文件夹,这些文件 夹的作用如下表所示:

文件夹        说明
api文件夹Netconn API和Socket API与操作系统相关
apps文件夹

应用程序,httpd、mqtt、tftp、sntp、snmp

core文件夹LWIP内核源文件
include文件夹lwip所有模块的头文件
netif文件夹处理链路层数据包

其中具体的核心源代码文件是core下的文件;

 从这里我们会发现,lwIP 是由一系列的模块组合而成的,这些模块包括:TCP/IP 协议栈 的各种协议、内存管理、数据包管理、网卡管理、网卡接口、基础功能、API 接口模块等,每 一个模块是由几个源文件和一个头文件集合,这些头文件全部放在 include 文件夹下,而源文 件都是放在 core 文件夹下。

lwip的contrib包文件说明

其中,我们只需要关注的就是apps、example和ports文件夹即可,这些文件介绍如下所示;

 以太网接入MCU方案

主要分为两种,一种是传统的软件TCP/IP协议栈以太网接入方案,一种是硬件TCP/IP协议栈接入方案。

上面是传统软件实现的TCP/IP协议栈,这种方案由 MCU(MAC)+ PHY(芯片)实现以太网物理连接。

所谓全硬件 TCP/IP 协议栈是将传统的软件协议 TCP/IP 协议栈用硬件化的逻辑门电路来实 现。芯片内部完成 TCP、UDP、ICMP 等多种应用层协议,并且实现了物理层以太网控制 (MAC+PHY)、内存管理等功能,完成了一整套硬件化的以太网解决方案。

LWIP结构框图

 

其中,LwIP为用户提供三组API接口:

sequential API(Netconn API) 为普通的、顺序的程序提供了使用lwIP栈的方法。依赖操作系统,所有操作都需要协议栈去处理,应用程序与协议栈通信,通过发送消息方式进行,因此这种方式会造成频繁的任务切换,速度相比RAW API慢了许多。在操作系统上推荐使用本API

BSD Socket API  建立在sequential API之上的,封装出的一套BSD Socket API。同样依赖操作系统,效率低,消耗的资源更多。

Raw API(native API / callback) 基于零拷贝发送和接收的事件驱动的API,在没有操作系统的情况下唯一可用的API。操作较复杂但速度最快,效率最高。

这里不得不介绍下STM32的MAC内核框架:

STM32内置了一个MAC内核,它实现了TCP/IP协议栈模型的数据链路层功能。STM32内置以太网框架如下所示:

 从上图可以看出,绿色框框的 RX FIFO 和 TX FIFO 都是 2KB 的物理存储器,它们分别存 储网络层递交的以太网数据和接收的以太网数据,而以太网 DMA 是网络层和数据链路层的中 间桥梁,是利用存储器到存储器方式传输。红色框框的内容可分为两个部分讲解,RMII 与 MII 是 MAC 内核(数据链路层)与 PHY 芯片(物理层)的数据通道,它们用来传输以太网数 据,而 MDC 和 MDIO 是 MAC 内核对 PHY 芯片的管理和配置,它们是站管理接口(SMI)所 需的通信引脚。 站管理接口(SMI)允许应用程序通过 2 条线:时钟(MDC)和数据线(MDIO)访问任 意 PHY 寄存器。该接口支持访问多达 32 个 PHY。应用程序可以从 32 个 PHY 中选择一个 PHY,然后从任意 PHY 包含的 32 个寄存器中选择一个寄存器,发送控制数据或接收状态信息。 任意给定时间内只能对一个 PHY 中的一个寄存器进行寻址。在 MAC 对 PHY 进行读写操作的 时候,应用程序不能修改 MII 的地址寄存器和 MII 的数据寄存器。在此期间对 MII 地址寄存 器或 MII 数据寄存器执行的写操作将会被忽略。例如关于 SMI 接口的详细介绍大家可以参考 STM32F4xx 中文参考手册的 824 页。总的来说:MAC 帧数据是通过 MII 和 RMII 传输至 PHY 芯片,也就是说 RMII 和 MII 介质接口是数据链路层与物理层的数据传输桥梁。(这里涉及的各种接口在EDA以太网实验中有所了解,可以参考网上的详细讲解)

(1条消息) MII,RMII,SMII,GMII,RGMII,SGMII接口定义 和 MDIO接口定义_ltqshs的博客-CSDN博客_sgmii接口

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio compose的简单使用与案例实现

Compose是Android团队与JetBrain大力推动的新一代UI框架,它能够简化安卓界面的开发,让本来繁琐的xml文件写法变为简便的kt文件写法。 其声明式 UI、更简单的自定义、实时且带交互的预览功能更是让安卓开发锦上添花 android compose框架的使用一.前置知识…

vue+elementUI 使用腾讯地图

效果如下 引入地图qqmap 刚开始我是直接用 npm install qqmap&#xff0c;但是好像只有v1版本的&#xff0c;我需要用v2版本的&#xff0c;所以直接使用script标签加载API服务。 文件&#xff1a;/public/index.html <script charset"utf-8" src"https:…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java双笙映画ou5oj

毕业设计也不需要做多高端的程序&#xff0c;毕业设计对于大多数同学来说&#xff0c;为什么感觉到难&#xff0c;最重要的一个原因&#xff0c;那就是理论课到实践课的转变&#xff0c;很多人一下不适应&#xff0c;本能开始拒绝&#xff0c;如果是一个考试&#xff0c;大家都…

spring boot基于Java的电影院售票与管理系统毕业设计源码011449

电影院售票与管理系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对电影院售…

SpringBoot —— 整合RabbitMQ常见问题及解决方案

前言 企业中最常用的消息中间件既不是RocketMQ&#xff0c;也不是Kafka&#xff0c;而是RabbitMQ。 RocketMQ很强大&#xff0c;但主要是阿里推广自己的云产品而开源出来的一款消息队列&#xff0c;其实中小企业用RocketMQ的没有想象中那么多。 至于Kafka&#xff0c;主要还是…

常见的推荐算法原理介绍

常见的推荐算法原理介绍&#xff0c;随着互联网的发展短视频运营越来越精准化&#xff0c;我们身边常见的抖音、火山小视频等软件让你刷的停不下来&#xff0c;这些软件会根据你的浏览行为推荐你感兴趣的相关内容&#xff0c;这就用到了很多推荐算法在里面。 在淘宝购物&#…

Linux 负载均衡介绍之LVS工作模式-DR直接路由模式

Linux 负载均衡介绍之LVS工作模式-DR直接路由模式 图示&#xff1a; 工作原理&#xff1a; ①.客户端将请求发往前端的负载均衡器&#xff0c;请求报文源地址是CIP&#xff0c;目标地址为VIP。 ②.负载均衡器收到报文后&#xff0c;发现请求的是在规则里面存在的地址&#x…

[Java反序列化]—Shiro反序列化(二)

0x01 这篇利用CC链来进行RCE 利用分析 在shiro-web 中加上CC依赖 <dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version><scope>compile</scope>…

ZKP方案衍变及对比

1. 引言 2019年是ZKP方案创新井喷的一年。 2019年10月&#xff0c;Chiesa在#zk0x04上的分享 State of the SNARG-scape - Alessandro Chiesa (UC Berkeley, StarkWare, Zcash)&#xff0c;有&#xff1a; 根据reference string的类型&#xff0c;可将zk-SNARKs分类为&#…

1.集群环境搭建

1.集群信息概览 2.集群环境搭建 2.1第一台服务器 修改静态ipvim /etc/sysconfig/network-scripts/ifcfg-ens33修改主机名echo first-node /etc/hostname修改主机名映射echo 192.168.226.140 first-node >> /etc/hosts echo 192.168.226.141 second-node >> /…

Redis缓存 缓存穿透+缓存雪崩+缓存击穿的原因及其解决方案

Redis缓存 缓存穿透缓存雪崩缓存击穿的原因及其解决方案 文章目录Redis缓存 缓存穿透缓存雪崩缓存击穿的原因及其解决方案一、缓存穿透是什么&#xff1f;解决方案&#xff1a;二、缓存雪崩是什么&#xff1f;解决方案三、缓存击穿是什么&#xff1f;解决方案一、缓存穿透是什么…

【保姆级·创建对象】如何通过factory-method创建对象

这个步骤在createBeanInstance()方法中有使用&#xff0c;我们先来看下这个方法中都干了些啥(&#xff61;&#xff65;ω&#xff65;&#xff61;)&#xff89; 首先&#xff0c;方法开头确认了beanClass是否被加载&#xff08;因为只有被加载叻的对象才是可以实例化的&#…

深入浅出MySQL事务和锁定语句

https://dev.mysql.com/doc/refman/8.0/en/sql-transactional-statements.html 13.3事务和锁定语句 13.3.1启动事务、提交和回滚语句 开启事务 begin START TRANSACTION提交事务 COMMIT回滚事务 ROLLBACK查询自动提交 show SESSION VARIABLES where variable_name "…

深入浅出InnoDB Locking

https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html 本节讨论的所有锁都是在 InnoDB 引擎下 MySQL 实现行锁定主要使用共享锁和排他锁。也就是常说的读写锁。 A shared (S) lock permits the transaction that holds the lock to read a row. An exclusive (X) l…

若依多租户集成浅析(基于数据源隔离)

背景 这边有个做 saas 化应用的需求&#xff0c;要求做到数据源级别隔离&#xff0c;选了 RuoyiCRM: 基于若依Vue平台搭建的多租户独立数据库CRM系统&#xff0c; 项目不断迭代中。欢迎提BUG交流~ (gitee.com) 这个项目做分析 先放一下码云上作者画的图&#xff0c;后面我把整…

股票量化怎样分析股票数据精准选股?

在日常的股票量化交易过程中&#xff0c;通常有不少的交易者会借助股票数据接口来分析股票数据&#xff0c;并且经过一番股票量化分析之后&#xff0c;做到精准选股也是很有可能的事情。那么&#xff0c;普通投资者进行股票量化怎样分析股票数据选好股呢&#xff1f; 首先来了…

springboot:集成Kaptcha实现图片验证码

文章目录springboot&#xff1a;集成Kaptcha实现图片验证码一、导入依赖系统配置文件二、生成验证码1、Kaptcha的配置2、自定义验证码文本生成器3、具体实现三、校验验证码1、controller接口2、自定义前端过滤器3、自定义验证码处理过滤器4、自定义BodyReaderFilter解决读取bod…

Redis——Jedis的使用

前言 接上文&#xff0c;上一篇文章分享了在Linux下安装redis&#xff0c;以及redis的一些命令的使用。本文要分享的内容是java使用代码连接操作redis。 一、连接redis 这里我们要用到Jedis&#xff0c;那么什么是Jedis 简单来说&#xff0c;Jedis就是Redis官方推荐的Java连接…

【元胞自动机】模拟电波在整个心脏中的传导和传播的时空动力学研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

(八)SpringCloud+Security+Oauth2--token增强个性化和格式化输出

一 token的个性化输出 我们知道token默认的输出格式是: {"access_token": "21bd6b0b-0c24-40d1-8928-93274aa1180f","token_type": "bearer","refresh_token": "2c38965b-d4ce-4151-b88d-e39f278ce1bb","e…