LWIP协议与TCP/IP

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

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

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

相关文章

JavaWeb05(删除增加修改功能实现连接数据库)

目录 一.实现删除功能 1.1 url如何传参? xx.do?参数参数值&参数名参数值 1.2 servlet如何拿对应值? //根据参数名拿到对应的参数值 String str req.getParameter("参数名") 1.3 如何询问? οnclick"return con…

Python实现图像的手绘效果

用Python实现手绘图像的效果 1.图像的RGB色彩模式 图像一般使用RGB色彩模式,即每个像素点的颜色由红、绿(G)、蓝(B)组成。RGB三个颜色通道的变化和叠加得到各种颜色,其中: R红色,取值范围,0-255G绿色,取值…

【Java笔试强训 8】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥两种排…

什么是JVM?

目录 1、JVM的学习内容 2、JVM概述 3、字节码 4、虚拟机 5、HotSpot VM 6、Java代码的执行流程 1、JVM的学习内容 JVM大概分为三部分: 内存与垃圾回收字节码与类的加载性能监控与调优 2、JVM概述 JVM是运行在不同操作系统上的,和硬件没有直接交…

荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

文章目录 前言一、配置 buildroot 及编译二、写 QT 代码三、编译可执行文件四、拷贝到 SD 卡五、上板子测试六、资源自取 前言 有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作…

数据库单实例升级

一、单实例环境,全时长二个半钟多。详细图文说明到这下载 1、停止所有oracle相关进程。 Emctlstop dbconsole Isqlplusctl stop Lsnrctl stop sqlplus /nolog sql>conn /as sysdba Connectedtoanidleinstance. sql>shutdown 然后,冷备份下数据库cp…

第十二章 Transform组件(下)

上一章节中我们介绍了Transform组件的属性和方法。我们发现 Transform 中有right,up和forward,而 Vector3 类中也有right,up和forward,他们是一回事嘛?我们使用Forward来说明两者之间的区别。我们知道,改变…

nodejs+vue+elementui学生毕业生离校系统

学生毕业离校系统的开发过程中。该学生毕业离校系统包括管理员、学生和教师。其主要功能包括管理员:首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等,前台首页;首页、离…

软件测试的测试用例

1.白盒和黑盒测试: 黑盒测试:把代码看成一个黑盒子,只关心输入和输出结果之间的关系 产品功能是否符合要求; 白盒测试:能够看到代码本身,针对代码本身进行测试,测试代码本身的逻辑是否符合规范。 2.测试用…

SOFA Weekly|SOFAArk 社区会议预告、Layotto 社区会议回顾、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

c#笔记-内置类型

内置类型 内置类型是一些有关键字表示的类型。关键字具有非常高的优先级,可以让你在没有别的配置的情况下, 只要用的是c#就可以使用。这也意味着这些类型是非常重要,或是基本的东西。 整数:byte, sbyte, short, ushort, int, ui…

展望Flink各版本及新特性

展望Flink各版本及新特性 一 Flink 1.9 版本1.1 细粒度批作业恢复1.2 State Processor API1.3 Stop-with-Savepoint1.4 新 Blink SQL 查询处理器预览1.5 Table API / SQL 的其他改进 二 Flink 1.10 [重要版本 : Blink 整合完成]2.1 内存管理及配置优化2.2 统一的作业提交逻辑2.…

【WCH】CH32F203基于内部RTC+I2C SSD1306 OLED时钟和温度显示

【WCH】CH32F203基于内部RTCI2C SSD1306 OLED时钟和温度显示 📌相关篇《【WCH】CH32F203基于内部RTC时钟I2C SSD1306 OLED显示》📺显示效果: ✨主要是在其基础 上增加温度显示,温度数据来源于DS18B20,更换了OLED驱动显…

大型Saas系统的权限体系设计(二)

X0 上期回顾 上文《大型Saas系统的权限体系设计(一)》提到2B的Saas系统的多层次权限体系设计的难题,即平台、平台的客户、客户的客户,乃至客户的客户的客户如何授权,这个可以通过“权限-角色-岗位”三级结构来实现。 但这个只是功能权限&am…

Apache安装与基本配置

1. 下载apache 地址:www.apache.org/download.cgi,选择“files for microsoft windows”→点击”ApacheHaus”→点击”Apache2.4 VC17”,选择x64/x86,点击右边download下面的图标。 2. 安装apache (1)把…

【LeetCode】1000题挑战(220/1000)

1000题挑战 没有废话,直接开刷! 目录 1000题挑战 没有废话,直接开刷! 第一题:119. 杨辉三角 II - 力扣(Leetcode) 题目接口 解题思路 代码: 过过过过啦!&#x…

【软考备战·希赛网每日一练】2023年5月2日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源:2023年05月02日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 三、知识查缺 复习 流水线技术。序列图(顺序图)用于展现系统中一个用例和多…

【五一创作】[论文笔记]图片人群计数CSRNet,Switch-CNN

2018(有代码)_CSRNet (10次) 应用最最广泛的:e, is the most widely used while working with counting problems. 2018_CVPR——CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes https://arxiv.org/abs/1802.100…

第八章 集合函数

文章目录 前言一、聚合函数介绍1 、AVG (平均值) 和SUM (求和)函数2 、MIN(最小值)和MAX(最大值)函数3 、COUNT函数问题:用count(*),count(1),count(列名)谁好呢? 二、G…

嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库,但MySQL这种数据库明显只能本地访问,把软…