LWIP协议与TCP/IP

article/2025/8/23 3:28:10

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://chatgpt.dhexx.cn/article/AY4Ji3uG.shtml

相关文章

[Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)

文章目录 线程概念进程和线程的关系线程的优点线程的缺点 线程控制Linux线程和接口关系的认识线程创建线程ID及进程地址空间布局线程等待线程终止线程终止状态线程分离LWP和pthread_t 线程概念 线程是在进程内部运行的一个执行分支(执行流),…

实现线程的三种方式KLT/ULT/LWP

大家好,我是神韵,是一个技术&生活博主。关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间。欢迎来点赞打卡,你们的行动将是我无限的动力。 今日主题是:实现线程的三种方式KLT/LWP/ULT 三种…

Linux——一文彻底了解进程id和线程id的关系(什么是pid、tgid、lwp、pthread_t)

目录 一.内核层面:pid & tgid 二.函数调用层面:getpid & gettid & pthread_self 三.用户层面:PID & LWP(TID) 四.总结 一.内核层面:pid & tgid 首先,我们要清楚&#…

LWIP简介

1介绍 lwIP 是 TCP/IP 协议套件的小型独立实现。lwIP TCP/IP 实现的重点是减少 RAM 使用同时仍然有一个完整的 TCP。这使得 lwIP 适合使用在具有数十 KB 可用 RAM 和空间的嵌入式系统中大约 40 KB 的代码 ROM。 lwIP 最初由计算机和网络的 Adam Dunkels 开发瑞典计算机科学研究…

Linux进程、线程模型,LWP,pthread_self()

一.定义 关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么? 在现代操作系统中,进程支持多线程。进程是资源管理的最小单元&…

Linux下线程(LWP)的相关概念

一.概念 线程:一个进程内部的控制序列。或者说在一个程序里的一个执行路线 首先明确一个概念,在Linux下是没有进程的控制块的,使用进程模拟的线程。一个进程中至少有一个线程。所以进程跟线程的数量是一对(一)多的。…

Linux-线程(LWP)

文章目录 线程线程概念进程今天的进程 vs之前的进程私有和共享资源实验验证线程的优点:线程的缺点:线程异常线程的用途: 线程控制创建线程(1)先创建两个线程:链接时要引入第三方库。(2)创建多个线程:(3)线程的健壮性不…

护眼色的RGB值 和 颜色代码

在搜索引擎搜“护眼色”,就会搜出一堆关于保护眼睛的屏幕颜色文章,说的统统是一种颜色,有点像绿豆沙的颜色。方法就是在屏幕设置里。 色调: 85; 饱和度: 123; 亮度: 205; R: 199; G: 237; B: 204; 颜色代码是: #…

护眼绿RGB值

网上流行护眼色的RGB值分别为: R: 204 G: 232 B: 207 以matlab R2017b ,设置背景色为护眼绿 为例: 预设——>颜色——> 取消勾选 使用系统颜色——> 背景——>RGB——> RGB依次输入 204, 232, 207—…

护眼参数设置

2019独角兽企业重金招聘Python工程师标准>>> 一、护眼背景色参数 柔和的豆沙绿: 色调:85 饱和度:123 亮度:205 对眼睛有益的RGB数值分别是(199,237,204) 二、eclipse左侧背景色设置 这是跟系统设…

Win10如何设置护眼色

https://blog.csdn.net/xiao297328/article/details/79888156 效果图: 在cmd中输入regedit 重启电脑即可

pdf阅读器修改背景颜色 护眼色

1, pdf and word setting 护眼色 586 3215 1586155 RGB: 170, 207, 184 2, 福昕阅读器设置 3 adobe acrobat

eclipse设置护眼色(一劳永逸)

无需在eclipse中设置,避免切换工作空间后失效。 第一步:首先使用 Win R 组合快捷键,打开“运行”,然后键入打开注册表命令regedit,按回车键确认打开。 第二步:打开注册表之后,依次在左侧树状菜…

vscode调教界面为护眼色

第1步:在vscode上安装主题插件Atom One Light Theme 在扩展商店里输入atom关键词(或者直接输入全), 找到如下对应的插件安装并使用 确认使用(如果没有更改过快捷键,那么ctrl按住不放,再依次按…

word设置背景色为护眼的绿色

word 2019设置背景色为护眼的绿色 原创不易,路过的各位大佬请点个赞 步骤一 新建一个word空白文档。 步骤二、 依次点开“设计-页面颜色”,选择自己想要的背景色。一般豆沙绿的参数是:红:202,绿:234&…

idea常用护眼色的RGB值调整

1.保护眼睛颜色的RGB数值 银河白 #FFFFFF RGB(255, 255, 255)杏仁黄 #FAF9DE RGB(250, 249, 222)秋叶褐 #FFF2E2 RGB(255, 242, 226)胭脂红 #FDE6E0 RGB(253, 230, 224)青草绿 #E3EDCD RGB(227, 237, 205)海天蓝 #DCE2F1 RGB(220, 226, 241)葛巾…

eclispe 护眼色设置

1.Eclipse字体大小调整: 窗口(Window)-首选项(Preferences)-> General)-> Appearence -> Colors And Fonts -> Java -> Java Editor Text Font -> Change : 2.Eclipse xml和jsp文件字体大小调整&#x…

eclipse 护眼色设置

1 调整eclipse editor区域背景色 背景颜色向你推荐:色调:85。饱和度:1 2 3。亮度:2 0 5 文档都不再是刺眼的白底黑字,而是非常柔和的豆沙绿色,这个色调是眼科专家配置的,长时间使用会很有效的…

idea设置背景护眼色

小伙伴们在敲代码时也要注意保护自己的眼睛哟,今天给大家介绍一种idea设置背景护眼色的办法。 1、打开你的idea,选择“文件”-->“设置”(英文版:“File”-->“Settings”) 2、点击“编辑器”-->“配色方案”…

护眼色的RGB值

1、对于现代人来说,长时间对着电脑或手机,致使我们的眼睛非常疲惫、干涩,那么设置好电脑的背景色,就会让我们的眼睛得到一定程度的放松,当然更好的办法还是做下眼保健操或走走,眺望下窗外的花草树木等。 网…