庐山真面目之——LWIP初探

这篇具有很好参考价值的文章主要介绍了庐山真面目之——LWIP初探。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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协议栈就是实践派。

庐山真面目之——LWIP初探

庐山真面目之——LWIP初探

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

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

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

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

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

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

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

庐山真面目之——LWIP初探

 LWIP源代码结构

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

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初探

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

lwip的contrib包文件说明

庐山真面目之——LWIP初探

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

庐山真面目之——LWIP初探

 以太网接入MCU方案

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

庐山真面目之——LWIP初探

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

庐山真面目之——LWIP初探

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

LWIP结构框图

 庐山真面目之——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内置以太网框架如下所示:

庐山真面目之——LWIP初探

 从上图可以看出,绿色框框的 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接口文章来源地址https://www.toymoban.com/news/detail-420219.html

到了这里,关于庐山真面目之——LWIP初探的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【lwIP(第四章)】网络接口

    lwIP协议栈支持多种不同的网络接口(网卡),由于网卡是直接和硬件平台打交道,硬件不同则处理也是不同的,所以由用户提供最底层的接口函数,lwIP提供统一的接口,但是底层的实现需要用户自己去完成(ethernetif.c) 一个系统中可能有多个网络接口,有可能是以太网,有

    2023年04月22日
    浏览(35)
  • Kafka的底层“真面目”

    kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。 kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做

    2024年02月11日
    浏览(32)
  • 揭开Spring MVC的真面目

    官方对于Spring MVC的描述为: Spring Web MVC是基于Servlet API框架构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring-MVC”。 目录 Spring MVC 介绍 学习Spring MVC 连接 @RequestMapping 指定类型 获取参

    2024年01月21日
    浏览(30)
  • 【微信小程序入门到精通】— 带你揭开数据绑定的真面目

    对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的同时也将其分享给大家! 本篇文章主要介绍数据绑定这一名词,那么我们如何在小程序页面定义数据并且使用呢? 首先我们介绍一下数据绑定

    2024年02月09日
    浏览(45)
  • 1.物联网LWIP网络,TCP/IP协议簇

    一。TCP/IP协议簇 1.应用层:FTP,HTTP,Telent,DNS,RIP 2.传输层:TCP,UDP 3.网络层:IPV4,IPV6,OSPF,EIGRP 4.数据链路层:Ethernet,FrameRelay,Is-Is 注意:IWIP是完全按照TCP/IP协议来创建 2.OSI七层模型与TCP/IP协议模型 3.通讯过程 应用层:FTP协议 传输层:TCP协议 网络层:IP协议 链路层:

    2024年02月11日
    浏览(36)
  • 五一长假暴露了电动爹的真面目,而新能源汽车市场似乎也到了转折点

    4月份国内市场汽车销量数据已经出炉,同比来说仍然保持了很高的增长,不过环比数据却显示出新能源汽车市场似乎已到了转折点,繁荣期似乎已经结束,淘汰赛开始了。 一、五一长假再次暴露了电动爹的真面目 新能源汽车长途旅行首先就是怕塞车,在开空调的情况下续航

    2024年02月02日
    浏览(32)
  • RT-Thread 组件-网络组件-Lwip UDP说明①

    1.1 协议简介 UDP (User Datagram Protocol):用户数据报协议,是一种简单、无连接、不可靠的传输协议。 无需建立连接、没有提供任何流量控制、拥塞控制机制,收到的报文也没有确认,因此 UDP 的传输速度快,但不能保证数据到达目的地。 与我们熟知的 TCP 协议一样,都属于 OS

    2024年02月22日
    浏览(40)
  • GD32F470之网络lwip+UDP配置+lan8720芯片

    先申明,本栏目用的都是GD32F470芯片240M,软件用的是keil,编写用的是C++(其实和C没有区别). 和STM32的lwip配置大致一样,主要不一样的地方在于 PHY的配置顺序问题,下面会讲到. 我用的是lan8720,所以头文件要修改一下,在gd32f4xx_enet.h中。 把PHY_TYPE改为LAN8700, PHY_ADDRESS改为0, 这是

    2023年04月09日
    浏览(47)
  • linux网络初探

    IP地址=网络地址+主机地址,网络地址(网络号)相同的主机为本地网络中的主机,可以直接相互通信,而网络地址不同的主机为远程网络中的主机,相互通信必须通过本地网关(Gateway)。包括A、B、C、D、E五类。 A类 网络号规定首位为0,因此第一个字节0-127,但由于特殊地址

    2024年02月06日
    浏览(27)
  • 网络编程 初探windows编程

    目录 一、什么是Winodws编程 二、开发环境搭建以及如何学习 三、VA助手安装 四、第一个Win32程序 五、窗口类句柄/窗口类对象 六、Winodws消息循环机制 七、Windows数据类型 Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过程,通常涉及使用 Windows API、.NET Framework、

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包