> 文章列表 > LWIP协议与TCP/IP

LWIP协议与TCP/IP

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

电动牙刷