lwIP是一个小型的开源的TCP/IP协议栈(精简版的TCP/IP协议),博客借用了其他博客的内容在此声明。
TCP/IP协议栈结构
应用层:HTTP,MQTT,NTP、FTP.......
传输层:TCP协议(用于不可靠设备可靠传输),UTP协议(用于可靠设备的不可靠传输)
网络层:IP、ARP、ICMP······
链路层:数据链路层(由单片机的MAC内核完成)
物理层(PHY芯片完成)
总结:应用层传输层网络层由lwip完成链路层由MAC内核和PHY芯片完成
TCP/IP协议栈的数据封装与解封装
发送封装
用户数据->应用层首部+用户数据->TCP/UDP首部+应用层首部+用户数据->IP首部+TCP/UDP首部+应用层首部+用户数据->MAC首部+IP首部+TCP/UDP首部+应用层首部+用户数据+MAC尾部
接收解包(与发送反向)
总结:封装:数据添加各层协议的首部;解封装:在各层间除去自层的首部
lwIP结构
业务逻辑: 用户逻辑实现,例如怎么发
lwIP API: HTTP、MQTT······
netconn 、RAW 、Socket(套接字)
lwIP CORE: TCP UDP
ip4.c
IP ARP ······· ICMP
ethernet netif sys_arch
HardwareDriver MAC内核
RMII MII
PHY
名词解释:
HTTP:
HTTP(超文本传输协议)是一种用于在网络上传输超文本的应用层协议。它定义了客户端(如浏览器)和服务器之间的通信规则,支持请求和响应模型,以便传输网页、图片、视频等多种资源。HTTP是Web的基础,允许用户通过URL访问内容。
MQTT:
MQTT(消息队列遥测传输)是一种轻量级的消息传输协议,特别适用于物联网(IoT)环境。它基于发布/订阅模式,使设备能够高效地交换数据。
主要特点:
轻量级:MQTT协议设计简单,数据包小,适合带宽有限或资源受限的环境。
发布/订阅模式:客户端可以发布消息到主题,其他订阅了该主题的客户端会接收到消息。这种模式解耦了消息的发送者和接收者。
QoS级别:MQTT支持三种服务质量(Quality of Service)级别,确保消息传递的可靠性:
QoS 0:最多一次(不保证送达)
QoS 1:至少一次(保证送达,但可能重复)
QoS 2:仅一次(确保消息准确送达且不重复)
持久会话:支持客户端持久会话,即使客户端断开连接,消息仍会被保留,直到客户端重新连接。
轻松的连接管理:使用心跳机制(keep-alive)管理连接状态,适合移动设备和不稳定网络环境。
netconn
netconn
是LWIP(轻量级IP协议栈)中的一个API,提供了一个简单的接口来处理TCP和UDP网络连接。它基于事件驱动模型,适合资源受限的嵌入式系统。主要特点:
简化的接口:
netconn
提供了一组相对简单的函数来创建、绑定、监听和接受连接,便于开发。支持TCP和UDP:通过相同的API,可以轻松处理这两种协议,降低了学习和开发的复杂性。
多线程支持:
netconn
可以在多线程环境中使用,适合需要并发处理的应用。异步操作:支持异步操作,使得可以在不阻塞主循环的情况下进行网络通信。
使用步骤:
创建一个
netconn
实例。绑定到特定端口。
监听连接(对于TCP)。
接受连接并进行数据收发。
RAW
在网络编程中,"RAW"通常指的是原始套接字(Raw Socket),这是一种允许用户直接访问网络协议栈的接口。原始套接字常用于网络协议的开发、网络监控和安全分析等领域。
主要特点:
底层访问:RAW套接字允许开发者直接构造和发送网络层(如IP)及其以上层的协议数据包。
灵活性:开发者可以自定义协议和数据包格式,适用于特殊需求的网络应用。
多协议支持:可以用于多种协议的实现,包括TCP、UDP和ICMP等。
网络监控:RAW套接字常用于抓包工具,可以用于监听和分析网络流量。
使用场景:
网络测试和调试:开发和测试新的网络协议。
安全分析:用于网络入侵检测系统(NIDS)和其他安全工具。
流量监控:分析和监控网络流量的工具。
Socket
Socket是一种用于实现网络通信的接口,它允许程序通过网络传输数据。通过Socket,开发者可以创建客户端和服务器应用程序,支持多种传输协议,如TCP和UDP。
主要特点:
双向通信:Socket支持双向数据传输,允许客户端和服务器相互发送和接收消息。
多种协议支持:常用的协议包括TCP(流式传输,可靠性高)和UDP(数据报传输,速度快但不保证可靠性)。
异步操作:Socket可以在阻塞或非阻塞模式下工作,适用于不同的应用场景。
跨平台:大多数操作系统都支持Socket编程,使得开发的应用能够在不同平台间运行。
使用步骤:
创建Socket实例。
绑定到特定IP地址和端口(服务器端)。
监听连接(TCP)或直接发送数据(UDP)。
接受连接(TCP)或接收数据。
进行数据传输。
关闭Socket。
TCP
TCP(传输控制协议)是一种面向连接的协议,确保数据在网络中的可靠传输。它广泛用于各种应用程序,如网页浏览、电子邮件和文件传输。
主要特点:
可靠性:TCP通过确认应答和重传机制,确保数据包准确到达接收端。
顺序传输:数据包按发送顺序到达,避免了乱序问题。
流量控制:TCP使用滑动窗口机制控制数据流,防止接收端溢出。
拥塞控制:通过算法动态调整数据发送速率,以应对网络拥堵。
工作流程:
建立连接:通过三次握手(SYN, SYN-ACK, ACK)建立连接。
数据传输:双方可以双向发送数据。
断开连接:通过四次挥手(FIN, FIN-ACK, ACK)安全关闭连接。
UDP
UDP(用户数据报协议)是一种无连接的传输协议,提供快速的数据传输,但不保证数据的可靠性和顺序。它适用于实时应用,如视频会议、在线游戏和语音通话。
主要特点:
无连接:UDP不需要在传输前建立连接,减少了延迟。
数据报模式:每个数据包(数据报)独立发送,可能会丢失或乱序。
低开销:相较于TCP,UDP的头部开销较小,效率高。
简单性:UDP实现简单,适合需要快速传输的应用。
使用场景:
实时应用:视频流、语音通话等对延迟敏感的场景。
广播和多播:用于向多个接收者发送数据。
简单查询响应:如DNS请求。
ip4.c
ip4.c
通常是用于处理 IPv4 网络协议的 C 语言源文件。下面是一个简单的示例代码,展示了如何创建一个基础的 IPv4 Socket 客户端和服务器。
IP
ARP
ARP(Address Resolution Protocol)是一个网络协议,用于在局域网内通过 IP 地址查找相应的 MAC 地址。ARP 主要用于 IPv4 网络,下面是一些 ARP 的基本概念和工作原理。
ARP 的工作原理
ARP 请求:当一个设备(如计算机)需要发送数据到同一局域网内的另一个设备时,它首先会检查自己的 ARP 缓存中是否已经存在目标设备的 MAC 地址。如果没有,它会发送一个 ARP 请求广播到网络上,请求目标 IP 地址对应的 MAC 地址。
ARP 响应:网络中的所有设备都会接收到这个 ARP 请求,只有目标 IP 地址的设备会响应。该设备会发送一个 ARP 响应,包含自己的 MAC 地址。
更新 ARP 缓存:发送请求的设备会接收该响应,并将目标 IP 地址与其 MAC 地址存储在自己的 ARP 缓存中,以便下次直接使用。
ARP 消息格式
ARP 消息包括以下几个字段:
硬件类型:表示网络类型(如以太网)。
协议类型:通常为 IPv4。
硬件地址长度:MAC 地址的字节数(通常为 6)。
协议地址长度:IP 地址的字节数(通常为 4)。
操作:指示是 ARP 请求(1)还是 ARP 响应(2)。
发送者硬件地址:发送请求或响应的设备的 MAC 地址。
发送者协议地址:发送请求或响应的设备的 IP 地址。
目标硬件地址:目标设备的 MAC 地址(在请求中通常为 0)。
目标协议地址:目标设备的 IP 地址。
ARP 的作用
动态映射:ARP 允许设备动态地解析 IP 地址到 MAC 地址,适应网络中设备的变化。
局域网通信:在局域网中,ARP 是确保数据包能够正确送达目标设备的重要协议。
ARP 缓存
操作系统会维护一个 ARP 缓存,以减少频繁的 ARP 请求。缓存中的条目会在一段时间后过期,防止信息过时。
ICMP
ICMP(Internet Control Message Protocol)是一种网络层协议,用于在网络设备之间发送控制消息和错误报告。它是 TCP/IP 协议族的重要组成部分,主要用于诊断和管理网络问题。以下是 ICMP 的一些关键点:
主要功能
错误报告:当数据包在网络中无法送达目标时,ICMP 会生成错误消息。例如,网络不可达、主机不可达或超时等。
诊断工具:ICMP 被广泛用于网络诊断工具,如
ping
和traceroute
。ping
通过发送 ICMP 回显请求(Echo Request)来测试与目标的连通性,目标设备回应 ICMP 回显应答(Echo Reply)。流量控制:ICMP 还可以用于网络拥塞控制,发送源主机有关拥塞的通知。
ICMP 消息类型
ICMP 消息主要有两种类型:
错误消息:如目标不可达、时间超时、参数问题等。
查询消息:如回显请求和应答,时间戳请求和应答等。
ICMP 的重要性
ICMP 是维护和管理网络的关键工具,能够提供重要的反馈信息,有助于网络管理员诊断和解决连接问题。由于其功能的重要性,ICMP 在许多网络安全策略中受到关注,防火墙通常会对 ICMP 流量进行过滤。
ethernet
以太网(Ethernet)是一种广泛使用的局域网技术,最初由施乐公司(Xerox)在 1970 年代开发,并成为了局域网通信的标准。以下是以太网的一些关键特性和概念:
基本概念
工作原理:以太网使用帧(Frame)进行数据传输。数据在网络中以帧的形式发送,每个帧包含目标和源地址、数据负载及错误检测信息。
地址:每个以太网设备都有一个唯一的 MAC 地址(媒体访问控制地址),用于在同一局域网内识别设备。
拓扑结构:以太网支持多种网络拓扑,包括星型、总线型和环型。现代以太网通常使用星型拓扑,中心节点为交换机。
传输介质
以太网可以通过多种介质传输,包括:
双绞线(Twisted Pair):常见的以太网电缆类型,适用于家庭和小型办公室。
光纤(Fiber Optic):用于高带宽和长距离传输,通常在企业和数据中心使用。
无线(Wireless):虽然传统以太网是有线的,但 Wi-Fi 技术也被广泛应用于网络连接。
以太网标准
以太网经历了多个发展阶段,常见的标准包括:
10BASE-T:传输速率为 10 Mbps 的以太网。
100BASE-TX(快速以太网):传输速率为 100 Mbps。
1000BASE-T(千兆以太网):传输速率为 1 Gbps。
10GBASE-T(10千兆以太网):传输速率为 10 Gbps。
更高速度标准:包括 25G、40G、100G 和更高速率的以太网标准。
以太网协议
以太网协议定义了数据帧的格式和传输方式,常用的以太网协议包括 IEEE 802.3 和 IEEE 802.1Q(用于虚拟局域网,VLAN)。
以太网的优势
简单易用:以太网技术相对简单,易于安装和维护。
成本效益:以太网设备(如交换机和电缆)通常价格合理,适合各种规模的网络。
可扩展性:可以轻松增加新的设备,而不会影响网络性能。
netif
“Netif”通常指的是网络接口(Network Interface),它是计算机或网络设备中用于连接网络的组件。以下是一些关于网络接口的基本概念:
基本概念
定义:网络接口是设备与网络之间的交互点,负责发送和接收数据包。每个网络接口都有一个唯一的标识符,如 MAC 地址。
类型:
有线接口:如以太网接口,通过网线连接到网络。
无线接口:如 Wi-Fi 接口,使用无线信号连接到网络。
虚拟接口:用于虚拟化环境中的虚拟机,可以通过软件创建,通常用于网络隔离或虚拟局域网(VLAN)。
协议:网络接口通常支持多种网络协议,如 TCP/IP、UDP 等,用于数据的封装和传输。
功能
数据封装:网络接口负责将数据封装成网络帧,以便在网络中传输。
地址处理:处理源和目标地址,以确保数据包能够正确发送到目标设备。
错误检测:通过校验和等机制检测数据在传输过程中是否发生错误。
网络接口的管理
配置:网络接口的配置包括设置 IP 地址、子网掩码、网关等参数。
状态监控:监控网络接口的状态和流量,以确保网络连接的健康和性能。
sys_arch
“sys_arch”通常与操作系统的架构相关,尤其是在嵌入式系统或实时操作系统(RTOS)中。它涉及系统架构层,主要负责底层硬件和上层应用之间的接口。以下是一些关键点:
基本概念
定义:sys_arch 是一种抽象层,提供操作系统与硬件之间的接口,帮助管理任务调度、内存管理和同步机制。
任务管理:处理任务的创建、删除和调度,使得不同任务可以在系统中并发执行。
同步机制:提供信号量、互斥锁等同步工具,帮助不同任务之间协调共享资源。
底层接口:与特定硬件平台交互,管理中断、时钟和其他硬件资源。
MAC内核
MAC内核(Microkernel Architecture)是一种操作系统内核设计理念,其目标是将核心功能最小化,提供基本的系统服务,而将其他服务(如设备驱动、文件系统和网络协议等)移至用户空间。以下是一些关键概念和特点:
关键概念
微内核架构:MAC内核将内核功能最小化,通常只包含进程管理、内存管理和基本的设备管理。
用户空间服务:除了基本的内核功能外,其他系统服务在用户空间中运行。这种设计使得系统更灵活,便于扩展和维护。
消息传递机制:微内核通常依赖于高效的消息传递机制来实现内核和用户空间服务之间的通信。
特点
模块化:服务可以独立开发和维护,降低了系统的复杂性。
安全性和稳定性:由于大部分服务在用户空间中运行,系统崩溃的风险降低,增加了整体的稳定性。
可移植性:微内核设计通常与特定硬件解耦,易于移植到不同的平台。
例子
一些著名的微内核操作系统包括:
MINIX:教育和研究用的微内核操作系统。
QNX:用于嵌入式系统和实时应用的微内核操作系统。
L4:一个微内核架构的系列,广泛用于研究和实际应用。
RMII
RMII(Reduced Media-Independent Interface)是一种用于以太网控制器和物理层设备之间的接口标准。它旨在简化连接,并减少所需的引脚数量。以下是一些关于RMII的关键点:
主要特点
引脚减少:与MII(Media-Independent Interface)相比,RMII减少了引脚数量,通常使用只有两对信号线(传输和接收),以及时钟和控制信号。
传输速率:RMII支持10 Mbps和100 Mbps的以太网速度,适用于大多数中小型网络应用。
时钟信号:RMII使用一个25 MHz的时钟信号来同步数据传输,而MII则使用两个不同频率的时钟。
灵活性:RMII设计可以与多种以太网物理层设备兼容,提供了较好的灵活性。
发送位宽2位
MII
MII(Media-Independent Interface)是一种用于以太网控制器和物理层设备(如以太网芯片)之间的接口标准。以下是一些关于MII的关键点:
主要特点
数据传输:MII支持10 Mbps和100 Mbps的以太网速度,允许全双工和半双工操作。
引脚配置:MII通常使用16根引脚,包括数据传输、接收信号、时钟信号和控制信号。
灵活性:它可以与多种不同类型的物理层设备(PHY)兼容,适用于各种网络应用。
同步:数据传输通过时钟信号进行同步,使得接收和发送的数据能够准确匹配。
MII发送位宽为4位
PHY
PHY(Physical Layer Device)是指网络通信中物理层的硬件组件,负责将数据从物理信号转换为数字信号,反之亦然。它是实现网络连接的关键部分,通常与MAC(媒体接入控制)层配合工作。
主要功能
信号转换:PHY将数字信号转换为模拟信号,适合在物理媒介(如电缆、光纤)中传输。
编码和解码:进行必要的编码和解码,以保证信号在传输过程中的可靠性。
速率支持:支持不同的传输速率,如10 Mbps、100 Mbps(以太网)、1 Gbps等。
错误检测:某些PHY设计中包含错误检测和纠正功能,增强数据传输的可靠性。
接口:PHY通常通过MII、RMII或其他接口与MAC层进行连接。
MAC简介
STM32自带有10Mbit/100Mbit/s的以太网MAC内核
特性
传输速率:支持外部PHY接口实现10/100Mbit速率传输
协议:符合IEEE802.3/3的MII和RMII接口与快速以太网PHY通讯
工作模式:支持半双工和全双工操作。
站管理接口:支持通过MDIO接口配置和管理PHY设备
ST的ETH框架
以太网DMA数据包以DMA方式发送和接收,发送和接收最大1500字节,所以STM32以太网收发缓冲FIFO为2KB是足够的
PHY交互接口
数据通道:介质接口RMII/MII
管理通道:SMI站管理接口,MOC,MDIO
SMI站管理接口
允许应用程序通过时钟线和数据线访问任意PHY寄存器,最多可访问32个PHY
MDC:时钟周期引脚(最大频率为:2.5MHZ)
MDIO:数据输入/输出比特流
SMI帧格式
在《STM32F4XX中文参考手册》中给出的SMI帧格式如下:
SMI帧包括8个字段:
(1)前导码(Preamble):每次读写或写入PHY设备均需要先发送前导码,报头字段对应于MDIO线上32个连续的逻辑“1”位以及MDC上的32个周期。该字段用于和PHY设备建立同步。
(2)帧起始(ST):帧起始共2bit,值为01b。用于验证线路从默认逻辑“1”状态变为逻辑“0”状态,然后再从逻辑“0”状态变为逻辑“1”状态。
(3)操作(OP):定义正在进行的事件(读取或写入)的类型。01b表示写入,10b表示读取。
(4)PHY地址(PADDR):PHY地址一共有5位,因此可以寻址最多32个PHY设备。最先发送和接收地址的MSB位。
(5)寄存器地址(RADDR):寄存器地址一共有5位,因此可以最多对所选PHY设备的32个不同寄存器进行寻址。最先发送和接收地址的MSB位。
(6)周转(TA):周转字段一共有2位,它被定义在RADDR和DATA字段之间,避免在读取事件出现竞争现象。读取PHY设备时,主机将TA的2个位驱动为MDIO线上的高阻态。PHY设备必须将TA的第一位驱动为高阻态,将TA的第二位驱动为逻辑“0”。
写入PHY设备时,主机必须将TA字段设置为10b,PHY设备必须将TA的2个字段驱动为高阻态。
(7)数据(DATA):数据字段为16位。发送和接收的均是寄存器的MSB位。
(8)空闲:MDIO被驱动为高阻态。三态驱动器必须被禁止,PHY的上拉电阻使线路保持逻辑“1”状态。
最后,可以用以下2个图片表示SMI的写入和读取PHY设备寄存器报文格式:
写入报文:
读取报文:
介质接口MII和RMII(重要)
用于MAC与外接的PHY设备互联,支持10M/100Mbit数据传输,以太网帧转发到PHY设备中
数据传输过程:数据进入缓冲区以太网DMA传输到TXFIOF,再传输到MAC内核(以太网帧)通过MII或RMII将数据传输到PHY,PHY将数据以以光电信号发送到以太网中。接收过程与传输过程相反。
MII与RMII比较
相同特性:
1、支持外部PHY接口实现10/100Mbit/s的传输速率
2、符合IEEE802.3协议标准
不同特性:
1:引脚数量:MII 17个(8个数据线,两个时钟线),RMII 9个
2:参考时钟:MII介质接口的TX_CLK和RX_CLK由PHY芯片提供,让MAC内核以这个时钟采集收发数据。RMII介质接口的REF_CLK,MACK内核以这个时钟采集收发数据
3、发送位宽:MII 4位,RMII 2位,虽然传输位宽不同但是RMII传输速度是MII的两倍,因此他们传输数据速率是相同的。
注意:RX_ER和RX_DV是用来检测以太网帧是否有效性,而CRS和COL以及CRS_DV在全双工模式下无效
MII参考时钟来源有两个 :MCO输出25MHz以及外部晶振输出25MHz
注意:MII接口中的TX_CLK和RX_CLK时钟是根据数据传输速率挂钩的,10Mbit/s:2.5MHz;100Mbit/s:25MHz.
RMII
RMII的参考时钟来源有两个:MOC经过倍频PLL输出50MHz以及外部晶振输出50MHz(必须同时提供PHY和MAC)
从时钟频率可以看出RMII时钟是MII的两倍