LWIP协议与TCP/IP

news2024/11/22 11:32:56

1. 学习一个东西,先了解这个东西是干什么用的哪些场景会用到它与自己已经掌握的其他知识的联系

        a. 例如:LWIP这个东西是干什么用的:他就是一个裁剪后保持大部分TCP/IP功能的协议。用少量的资源消耗实现一个较为完整的TCP/IP协议栈,其中“完整”主要指的是TCP协议的完整性,实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。此外LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。

        b.例如:哪些场景会用到LWIP这个协议:基本上如果你想实现TCP/IP这个协议,就可以用到这个。比如TCP,UDP协议,比如工业总线上的Modbus,比如想要实现网关路由的功能,只要是用到以太网的,都可以实现功能,还有一些物联网像MQTT等。

        c.例如:他与linux上直接编写TCP/IP协议的区别:Linux系统中有完整的TCP/IP协议的实现。但是可执行代码往往有数兆之大。需要高效的处理器熟读和大量的外存、内存开销。所以如果芯片是基于Linux kernel的话,就没必要在重复造轮子。LWIP最大优势可以移植到操作系统上,也可以在无操作系统的情况下独立运行,且代码量小。是目前在嵌入式网络领域被讨论和使用很广泛的一个协议栈。开源特性和快速的版本更新效率。新版本还支持DNS、SNMP、DHCP、IGMP等高级应用功能。在资源有限的情况下实现TCP协议的主要功能。有自己的数据包和内存管理机制。所以LWIP需要根据自己的需求,一直相关的代码。

2. 对要学的东西梳理出一个大概的框架(这个框架是(理论框架 + 应用框架[code逻辑]))

2.1. LWIP的理论架构

a. LWIP的网络分层模型:就是TCP/IP的网络分层模型

b. LwIP 符合 TCP/IP 模型架构,规定了数据的格式、传输、路由和接收,以实现端到端的通信。(netif 用来描述一个网卡)

2.2 LWIP的应用code架构(下载一个相对完整的代码,去看一下这个功能的实现逻辑)

a. LWIP的软件架构:

参考:

LITIECX/lwip_linux: lwip协议栈的linux移植学习 (github.com)

LwIP协议栈粗解

b. LWIP中三种API所在的架构层次:

3. 在框架体系中,找到一条尽快熟悉架构的线,可以以一个想要实现的功能为攻破对象。因为框架内的内容大部分都是重复使用的,所以只要捋清楚一条线,其他的也就迎刃而解

a. 例如:我想做一个基于LWIP协议中TCP功能的实现;

4. 在确定自己要实现的功能后,先去理解这个功能的原理

a. 例如:TCP的原理是如何实现的。

参考:【lwip】12-一文解决TCP原理

5. 基于我找到的那条线,梳理出这个东西如果按照步骤是怎样运作的。(以结果为导向,分析问题的时候就要想这个原理和步骤之间有什么关系

a. 例如:实现TCP的设计方案;下面只是一个很粗糙的流程图,还需要具体的深入研究,基于LWIP的TCP是如何实现的。

6. 基于这条线的框架,将其拆解成各个模块,之后再根据各个模块补充细节

a. 例如:如上图的设计方案可以看出,首先TCP我需要分为客户端与服务端

TCP传输需要涉及到Socket编程

b. 基于理论的实现流程,协议层报文间的封装与拆封流程图:

c. 基于应用code的实现流程,LWIP协议中TCP的数据收发实现的流程图:

TCP服务端

TCP客户端

7. 通过给自己提问,带着问题一层一层的挖每个模块更细节的内容

a. 例如:LWIP 是软件那么而怎样让硬件和软件无缝连接起来呢?网卡又多种多样,怎样才能让 LWIP 使用同样的软件兼容不同的硬件平台?

参考:LWIP中netif结构体的介绍

  https://www.cnblogs.com/lizhuming/p/15487094.html

  https://www.cnblogs.com/lizhuming/p/15487160.html

LWIP 中使用了一个 netif 结构体来描述网卡但是网卡是直接和硬件平台打交道的:

  • 用户提供最底层接口函数。
  • LWIP 提供统一的 API。
  • 举例:
    • 收:如网卡的初始化和网卡的收发数据,当 LWIP 底层得到数据之后,才会传入到内核中去处理。
    • 发:LWIP 内核需要发送数据包的时候,也需要调用网卡的发送函数。
  • LWIP 中的 etherneif.c 文件的函数通常为硬件打交道的底层函数当有数据需要通过网卡接收或者发送数据的时候就会被调用,通过 LWIP 的协议栈的内部进行处理后,从应用层就能得到数据或者可以发送数据。

b. 例如:LWIP中的TCP是如何实现三次握手和四次挥手的

参考:【lwip】12-一文解决TCP原理

8. 最后根据这条线,将所有的枝干全部理解后,整理出来,这样就基本理解了这块功能,其他模块也都一通百通。最后自己在手写一份代码,基本就差不多了。

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

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

相关文章

大数据实战 --- 淘宝用户行为数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup hiveserver2 1>/dev/null 2>…

从零开始的ChatGLM 配置详细教程

从零开始的ChatGLM配置教程 文章目录 从零开始的ChatGLM配置教程一,前言二,环境配置1、下载ChatGLM项目2、配置程序运行环境 三、在HuggingFace下载chatGLM-6B模型1,安装 Git Lfs2,下载相关文件3,在HuggingFace中下载相…

什么是隔离放大器

隔离放大器(也称为单位增益放大器)是一种提供隔离的运算放大器电路电路的一部分与另一部分电路不同,这样就不会在电路的一部分中使用、消耗或浪费功率。 现在将对此进行彻底解释,因为这乍一看似乎是一个令人生畏的话题&#xff0c…

【TCP Wrappers】

目录 一、保护原理二、TCP Wrappers 保护机制的两种方式三、TCP Wrappers 的访问策略四、TCP Wrappers 机制的基本原则1、允许所有,拒绝个别2、允许个别,拒绝所有实列 一、保护原理 二、TCP Wrappers 保护机制的两种方式 1.直接使用 tcpd 程序对其他服务…

JavaFx 自定义封装 DateTimePicker 时间选择组件(支持时分秒)

JavaFx DateTimePicker 时间选择组件 javaFx 自定义时间选择组件 DateTimePicker, javaFx 源代码不支持时分秒选择,该代码组件支持时分秒选择,同时也支持清空、取消、此刻等操作! 效果如下图所示: 源码地址&#xff…

AXI4总线学习笔记

AXI4 总线是 ARM 公司开发的一种总线,广泛应用于 Xilinx 的 IP 核中,比如笔者近期涉及 DDR 的读写控制,需要用到 MIG IP 核,这个 IP 核就通过 AXI4 总线进行控制。 AXI4 共有 5 种通道:读地址通道 ARC,读数…

虽然音视频开发只是功能组件开发,但薪资远高于普通开发岗……

首先要明白一件事情,音视频开发是功能组件开发而不是应用开发。应用开发的具体需求基本上是定制化的,而且需求一直在改,比如今天加个按钮,明天改个风格,只要应用还在天天都有活干。而功能组件开发的需求大多都比较统一…

一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

目录 Filter过滤器 作用 应用场景 拦截器Interceptor Aspect切片 三者对比 执行顺序 拦截层面 过滤器Filter和拦截器Interceptor的区别 Filter过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤…

vue3组件间怎么通信?简述一下通信方式

在写 vue3 的项目中,我们都会进行组件通信,除了使用 pinia 公共数据源的方式除外,我们还可采用那些更简单的API方法呢?给大家介绍介绍几种父子组件和子父组件通信的方式。 1、父子组件通信 1.1 defineProps 父子组件通信我们第一…

【Redis】Redis数据结构——链表

【Redis】Redis数据结构——链表 注意事项: 本文第三点redis中操作列表的相关命令可参考博文: 【Redis】Redis基础命令集详解_Etui۹(・༥・)و ̑̑的博客-CSDN博客 本文参考内容如下: 1、Redis数据结构——链表 - 随心…

MySQL_第07章_单行函数

第07章_单行函数 讲师:尚硅谷 - 宋红康(江湖人称:康师傅) 官网: http://www.atguigu.com 1. 函数的理解 1.1 什么是函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我…

音视频八股文(3)--ffmpeg常见命令(2)

07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: ffplay -window_title "test time" -ss 2 -t 10 -autoe…

[计算机图形学]辐射度量学、渲染方程与全局光照(前瞻预习/复习回顾)

一、前言 我们前面讲到的Blinn-Phong着色,Whitted-Style光线追踪都有一定问题,那就是它们并没有严格的按照物理规则定义各个变量。比如,Blinn-Phong中的光的强度,并没有一个确切的单位。同时Whitted-Style光线追踪我们也做了很多简…

二十分钟深入详解<二叉搜索树>!!!

目录 前文 一,什么是二叉搜索树? 1.1 二叉搜索树的概念 二, 二叉搜索树的常用操作及其实现 2.1 查找 2.2 插入 2.3 删除 三,二叉搜索树的应用 3.1 K模型 3.2 KV模型 四,二叉搜索树的性能分析 五,…

SolidWorks建模|渲染装饰件

使用SOLIDWORKS软件建模是许多工程师的选择,对于SOLIDWORKS渲染,也有很多问题,接下来,我们就用SOLIDWORKS建模渲染装饰件的例子来讲解。 1.点击“插入”-“曲面”-“拉伸曲面”,选择上视基准面作为草绘平面&#xff0…

CC2564CRVMR无线音频解决方案、ADE9000ACPZ模拟前端 (AFE) 电路图【MX66L2G45GXRI00 2Gb】FLASH - NOR

CC2564CRVMR 双模蓝牙控制器是一个完整的Bluetooth BR、EDR和低能耗HCI解决方案,可减少设计工作量并缩短上市时间。CC2564C器件基于TI的第七代蓝牙内核,提供符合蓝牙4.2标准的产品验证解决方案。当与微控制器单元 (MCU) 耦合时,该HCI器件具有…

Unity与Andriod交互错误合集

一、无法调用安卓中的方法no non-static method with name‘’ 报错如下,。在保证代码中的方法名没有问题,并且调用的方法名的返回值和传递的参数等都没有问题的情况下, 第一、查看在Unity项目中jar包存放的位置是否正确,需要放在…

LeetCode算法小抄 -- 经典图论算法 之 并查集算法

LeetCode算法小抄 -- 经典图论算法 之 并查集算法 经典图论算法并查集算法动态连通性思路平衡性优化路径压缩Union Find 算法[130. 被围绕的区域](https://leetcode.cn/problems/surrounded-regions/)[990. 等式方程的可满足性](https://leetcode.cn/problems/satisfiability-o…

2023-spring 2.探险营地 — 字符串

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱2023-spring 2.探险营地 题目描述:探险家小扣的行动轨迹&a…

SAM Segment Anything

https://arxiv.org/pdf/2304.02643v1.pdf 包含三个主题:Task、Model、Data Task(任务): 需要定义一个 足够通用的图像分割任务,可以提供一个强大的预训练目标,并支持广泛的下游应用程序。 Model&#xf…