1、网络协议简介
HTTP(应用层协议):(超文本传输协议)工作与客户端-服务器架构上 HTTP需要同步、HTTP是帧头和规则多的重量级协议且设备只能单向主动向服务器发出数据,无法被动的接收来自网络的数据
MQTT(应用层协议)、COAP轻量即、异步通信协议
FTP:文件传输协议(应用层)网盘文件传输功能都是基于FTP实现的
ARP:主机的网络地址定义、网络地址和MAC地址之间的映射
网络协议的分层模型:

在这里插入图片描述
在这里插入图片描述
LWIP:Lightnweight IP 轻量化的TCP/IP协议
特性:
在这里插入图片描述在这里插入图片描述
LWIP优点:开销低、用宏裁剪内核、支持的协议比较完整、实现了常见的应用程序:DHCP、DNS、HTTP、MQTT、TFTP、SNTP客户端等
编程接口:RAWAPI 、NETCONN API 和Socket API
LWIP为嵌入式而生,相比Linux和Windows的TCP/IP协议栈功能不算完整(缺点 LWIP对于OSI模型中的分层不够明确 清晰)

LWIP官方文件Contrib包-Demo文件
下载链接:添加链接描述

编程接口:RAW/Callback API 适用于无操作系统的裸机环境
在操作系统环境中使用,应用程序效率高,内存开销小,但代码可读性差
NETCONN API 基于操作系统(信号量和邮箱机制实现)

LWIP内核代码和网络应用程序分离成了独立的线程,LWIP内核线程只负责数据包的封装和拆封,不进行应用层处理,提高了系统对网络数据包得处理效率
需要至少两个独立的线程(操作系统情况下),一个用于网络应用程序一个用于LWIP内核处理;
在这里插入图片描述
SOCKET API 可移植性高 BSDSocket ,可读性好

1、物理层和数据链路层:
STM32的ETH外设:通过DMA控制器进行介质访问控制(MAC),实现了MAC层的任务
ETH支持MII和RMII接口用于物理层连接
RMII:7根线
MII:16根线
在这里插入图片描述

2、LWIP网络接口管理:
netif结构体:LWIP使用一个数据结构描述一个网卡,由于网卡直接和物理层相关,所以物理层底层驱动需要用户完成
LWIP中ethernetif.c文件中的函数是底层函数
netif结构体对LWIP而言,就是一个虚拟的网卡

如果有多个网卡,LWIP会将netif描述的网卡连接成一个链表,链表就记录每个网卡的netif

netif的使用:需要把网卡挂载到netif_list链表上,LWIP通过链表管理网卡

3、LWIP内存管理:
内存分配策略:(1)固定大小内存块(2)利用内存堆进行动态分配
C标准库中的malloc和free进行内存分配,C标准库在嵌入式设备中存在问题,系统每次调用库函数执行的时间不一样

4、网络数据包:
LWIP中的TCP/IP模糊分层,结构不是很清晰,以便于提高效率(LWIP各层之间的资源是共用的)

5、LWIP网卡接收数据流程
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐