物联网LWIP网络开发

D1以太网基础知识

1.4STM32以太网外设

以太网外设逻辑框图

 总线矩阵:DMA与内存建立关系 

问题1:MAC做什么

MAC帧格式

帧填充和CRC计算

 以太网外设FIFO&DMA

 1门限模式2存储转发模式(常用)

DMA

DMA描述结构

DMA多采用链式结构 

DMA描述符格式

TDESO-3表示一个完整的描述符

TDES0表示控制和状态位

TDES1发送缓冲区的大小与长度

TDES2缓冲区地址 

 TDES3指向下一个描述符

链模式机制

了解一下

 以太网外设初始化

 1.5TCP/IP协议簇初体验上

ARP协议

ARP协议是地址解析协议(Address Resolution Protocol)的缩写,它是TCP/IP协议簇中的一个重要协议。以下是关于ARP协议的详细解释:

ARP协议概述


定义:ARP协议主要用于将网络层(IP层)的地址解析为链路层(数据链路层)的地址,即将IP地址映射到MAC地址,确保数据包能够在局域网内正确传输。

为什么需要ARP

需要ARP协议的原因主要有以下几点:

1.地址映射:在网络通信中,数据包需要通过网络层(IP层)和链路层(数据链路层)进行传输。IP地址用于网络层寻址,而MAC地址用于链路层寻址。ARP协议能够将IP地址映射到MAC地址,确保数据包能够在局域网内正确传输。

2.确保通信:在局域网中,设备之间需要知道对方的MAC地址才能进行直接通信。ARP协议通过查询和响应机制,帮助设备获取目标设备的MAC地址,从而确保通信的顺利进行。

3.提高效率:ARP协议引入了缓存机制,设备会将解析到的IP地址和MAC地址的映射关系存储在ARP缓存中。这样,在下次通信时,设备可以直接从缓存中查询MAC地址,而无需再次进行ARP查询,从而提高了通信效率。

4.支持动态网络:ARP协议是动态的,它允许设备在需要时动态地解析IP地址和MAC地址的映射关系。这种动态性使得ARP协议能够适应不断变化的网络环境。

综上所述,ARP协议是网络通信中不可或缺的一部分,它通过地址映射、确保通信、提高效率和支持动态网络等功能,为局域网内的设备提供了可靠的通信保障。

ARP协议工作原理

ARP流程

ARP请求:

当设备A需要向设备B发送数据时,但不知道设备B的MAC地址,设备A会广播一个ARP请求。
ARP请求中包含设备A的IP地址、MAC地址以及设备B的IP地址。

ARP应答:

设备B收到ARP请求后,检查请求中的目标IP地址是否与自己的IP地址匹配。
如果匹配,设备B会向设备A发送一个ARP应答,包含自己的MAC地址。

ARP缓存:

设备A收到ARP应答后,会将设备B的IP地址和MAC地址的映射关系存储在ARP缓存中。
下次设备A向设备B发送数据时,可以直接从ARP缓存中查询MAC地址,而无需再次广播ARP请求。

 ARP协议测试 

arp -a(或arp -g):显示本地ARP缓存表。这会列出所有已知的IP地址到MAC地址的映射,这对于验证ARP表项是否正确非常有用。
arp -d :删除指定IP地址的ARP缓存项。当你需要更新某个设备的MAC地址时,可以先删除旧的缓存项,然后等待它重新解析。
arp -s :添加静态ARP缓存项。这允许你手动将IP地址映射到MAC地址,这在特定网络环境中可能会用到。

ICMP协议

一.ICMP概述 

ICMP(Internet Control Message Protocol)协议,即互联网控制报文协议,是TCP/IP协议族中的一个重要子协议。它主要用于在IP网络中传输控制和错误信息,以检测网络连接状态、诊断网络故障、测试网络性能等。

二、ICMP协议的基本原理

ICMP协议是网络层的一个协议,它的报文不直接传送给数据链路层,而是封装成IP分组后再传送给数据链路层。ICMP协议是IP协议的一个组成部分,它只解决IP协议可能出现的不可靠问题,不能独立于IP协议而单独存在。ICMP协议的主要作用是在网络上发送控制信息或错误信息,为其他协议提供必要的控制和管理。

三.ping和网络诊断

 打开CMD

  • -t:不间断地Ping指定的主机,直到管理员中断(Windows特有)。
  • -n:指定发送的回显请求数(Windows和Linux均支持)。
  • -l:发送指定大小的数据包(Windows和Linux均支持,但需注意数据包大小限制)。
  • -a:将地址解析为主机名(Windows特有)。
  • -f:在数据包中设置“不分段”标记(Windows特有,仅适用于IPv4)。
  • -i TTL:设置数据包的生存时间(Time To Live,TTL)(Windows和Linux均支持)。
  • -w timeout:指定等待每次回复的超时时间(毫秒)(Windows特有)。
  • -4 或 -6:强制使用IPv4或IPv6地址(Windows和Linux均支持)。

 

//TTL表示经过了几次路由,初始值位255,每经过一个路由器,就减一 

DHCP协议

一.DHCP概述

 DHCP(Dynamic Host Configuration Protocol)协议,即动态主机配置协议,是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。DHCP协议由RFC 2131定义,并位于OSI 7层协议模型的应用层,向下调用UDP协议工作,采用客户端/服务器通信模式。

二、DHCP协议的定义与作用

DHCP协议是一种用于局域网(LAN)的网络协议,主要作用是为网络上的每个设备动态分配IP地址、子网掩码、默认网关地址、域名服务器(DNS)地址和其他相关配置参数,以便这些设备可以与其他IP网络通信。简单来说,DHCP协议能够自动给内网机器分配IP地址等信息,降低了配置和部署设备的时间,同时也降低了发生配置错误的可能性。

三、DHCP协议的地址分配机制

DHCP协议提供了两种地址分配机制:

  1. 动态分配机制:通过DHCP为主机分配一个有使用期限(租期)的IP地址。这种分配机制适用于主机需要临时接入网络或者空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。租期到期或者客户端下线释放地址后,服务器会收回该IP地址,并继续分配给其他客户端使用,从而提高了IP地址的利用率。
  2. 静态分配机制:网络管理员通过DHCP为指定的主机分配固定的IP地址。这种方式避免了人工配置发生错误,方便管理员统一维护管理。

DNS协议

DNS协议(Domain Name System Protocol)是互联网上的一项重要服务,主要用于将域名(如www.example.com)转换为对应的IP地址(如192.0.2.1),从而使人更方便地访问互联网。DNS协议是一个分布式的数据库系统,它采用客户-服务器模式工作,并遵循一定的层次结构和解析流程。

一、DNS协议概述
  • 定义:DNS(Domain Name System)是一个由分层的DNS服务器实现的分布式数据库,也是一个应用层协议,它使得主机能够查询分布式数据库以获取所需信息。
  • 作用:DNS协议的主要作用是将域名解析为IP地址,同时也支持反向解析(即将IP地址解析为域名)和其他类型的DNS记录查询。
  • 传输层协议:DNS协议通常运行在UDP协议上,使用53端口进行通信。当DNS查询被截断时,应使用TCP协议进行重试。

1.6 TCP/IP协议簇初体验下

IP协议

一、IP协议的基本概述
  • 定义:IP协议是TCP/IP协议族中的网络层协议,它定义了数据包在网络中传输的标准和规则。
  • 作用:IP协议使得数据包能够在不同的网络之间传输,实现数据的互联互通。
二、IP协议的特点
  1. 无状态:IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输、接收都是相互独立的。这种服务最大缺点是无法处理乱序和重复的IP数据报,但优点是简单高效。
  2. 无连接:IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指定对方的IP地址。
  3. 不可靠:IP协议不能保证IP数据报能准确到达接收端,只是会尽最大努力。一旦发送失败,就通知上层协议,而不会试图重发。
三.IP地址分类 

IP地址主要分为五类:A类、B类、C类、D类和E类。 

A类,B类主要为广域网

C类为局域网,D类组播用

四.子网划分

五.ipconfig命令 
  • /all:显示所有网络适配器的完整 TCP/IP 配置信息。这包括 DHCP(动态主机配置协议)信息、DNS 服务器、物理地址(MAC 地址)等。

    示例:ipconfig /all

  • /release 和 /renew:这两个选项通常与特定的适配器一起使用,用于释放或重新获取 DHCP 分配的 IP 地址。由于这些操作具有潜在的网络中断风险,它们现在较少使用,且通常需要与特定的适配器名称一起使用(例如,ipconfig /release "本地连接")。然而,请注意,从 Windows Vista 开始,ipconfig /release 和 ipconfig /renew 命令对无线适配器(如 Wi-Fi)的支持有限,可能需要使用其他方法(如 netsh 命令行工具)来管理无线连接的 DHCP 配置。

  • /flushdns:虽然这不是 ipconfig 命令的直接选项,但经常与 ipconfig 一起提及,因为它用于清除 DNS 解析器缓存。该命令的语法是 ipconfig /flushdns,它可以帮助解决某些与 DNS 相关的网络问题。

  • /displaydns:同样,虽然这不是 ipconfig 的直接选项,但 ipconfig /displaydns 命令用于显示 DNS 解析器缓存的内容,这有助于诊断 DNS 解析问题。

UDP协议 

 一.UDP协议概述

UDP协议,全称为User Datagram Protocol(用户数据报协议),是一种工作在OSI(开放系统互连)模型中传输层的协议。它使用IP作为底层协议,为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。

二.UDP协议特性
  1. 无连接:UDP在发送数据前不进行连接,发送结束时也没有连接可以释放,减少了开销和发送数据之前的时延。
  2. 不可靠:UDP不保证可靠交付,因此主机不维持复杂的连接状态。如果因为网络故障导致报文无法发到对方,或者对方收到了报文但传输过程中乱序了,UDP协议层也不会给应用层任何错误反馈信息。
  3. 面向报文:UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方的UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。
  4. 无拥塞控制:UDP不进行拥塞控制,很多实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许网络发生拥塞时丢失一些数据,却不允许数据有太大的时延,UDP正好适合这种要求。
  5. 支持多种交互通信:UDP支持一对一、一对多、多对一和多对多的交互通信。
  6. 首部开销小:UDP只有8个字节的首部,这使得其协议本身更加轻量级

 TCP协议

一.TCP协议概述

TCP协议,全称为Transmission Control Protocol(传输控制协议),是TCP/IP协议族中传输层的一个核心协议。TCP协议在计算机网络中扮演着至关重要的角色,它确保数据在网络中的可靠传输。

二.TCP协议特性
  1. 面向连接:TCP协议在数据传输之前,需要通过三次握手过程建立连接,这种连接是端到端的,即源主机和目标主机之间的连接。数据传输结束后,还需要通过四次挥手过程断开连接。
  2. 可靠性:TCP协议通过多种机制确保数据的可靠传输,包括确认应答、超时重传、流量控制、拥塞控制等。这些机制使得TCP协议能够应对网络中的各种异常情况,如数据包丢失、乱序等。
  3. 基于字节流:TCP协议将应用程序发送的数据视为一个无结构的字节流,而不是一个个独立的数据包。这使得TCP协议能够灵活地处理各种类型的数据传输需求。
  4. 全双工通信:TCP协议支持全双工通信,即数据可以在同一时间内在两个方向上传输,这大大提高了数据传输的效率。

三.NC命令 
  • -h:打印帮助信息。
  • -l:指定nc将处于侦听模式,即作为server侦听指定端口。
  • -n:不对任何指定的地址、主机名或端口进行任何DNS或服务查找,直接使用IP地址。
  • -p:指定本机应该使用的源端口。
  • -s:指定发送数据的源IP地址,适用于多网卡机。
  • -u:指定nc使用UDP协议,默认为TCP。
  • -v:输出交互或出错信息,新手调试时尤为有用。
  • -w:设置超时秒数,后面跟正整数。
  • -z:表示zero,即扫描时不发送任何数据。
  • -k:强制nc在其当前连接完成后继续侦听另一个连接,必须与-l一起使用。
四、TCP协议与UDP协议的比较

 

D2以太网开发快速上手

2.1LWIP协议栈

LWIP应用场景

以太网DTU

一、定义与概述

以太网DTU(Data Transfer Unit)是一种数据传输单元,它利用以太网技术,将串口数据转换为IP数据,或者将IP数据转换为串口数据,通过以太网网络进行远程数据的传输和监控。以太网DTU广泛应用于需要长距离传输且网络环境良好的场景,如工业自动化、环境监测等领域。

二、功能与应用
  1. 数据采集和透传:以太网DTU可以连接多个传感器或仪器仪表,采集到的数据经过处理后通过以太网网络透传到云平台或监控中心。
  2. 远程监控和控制:通过以太网DTU,用户可以实现对设备的远程监控和控制,包括查看设备状态、接收报警信息、远程控制开关和调整参数等。
  3. 数据存储和分析:以太网DTU可以将采集到的数据存储到云端服务器,并进行数据分析和处理,帮助用户实时了解设备的运行状况和数据趋势。
三、技术原理

以太网DTU的技术原理主要涉及到数据采集、数字转换、数据处理、数据传输和数据存储等几个方面。它首先将传感器或仪表等设备采集到的模拟信号或数字信号进行采集,然后将模拟信号转换为数字信号进行处理,最后通过以太网接口将处理后的数据发送到远程服务器或云平台。

综上所述,以太网DTU作为一种专门设计的无线终端设备,在物联网和工业自动化等领域发挥着重要作用。

WIFI模块(ESP8266)

LWIP协议介绍

 LWIP支持的TCP/IP协议种类

从上到下,我们可以看到不同的协议层和它们之间的关系。最顶部是应用层,包括SNMP(简单网络管理协议)、DNS(域名系统)和DHCP(动态主机配置协议)。中间部分是传输层,有UDP(用户数据报协议)和TCP(传输控制协议),以及IGMP(组播多点广播协议)。在底部是Internet Protocols,包括ICMP(互联网控制消息协议)、IGMP、ARP(地址解析协议)和PPP(会话同步协议)。

LWIP编程接口

 “RAW API”和“Netconn / Socket APl”是两个不同的名称,分别代表了两种不同的软件接口。在这些接口中,“RTOS”表示实时操作系统,它不需要任何特定的接口,而“Netconn / Socket APl”表示高级网络接口,则需要一个特定的接口来实现其功能。此外,该表还详细介绍了这些接口的功能,例如控制、调用方法、结构、复杂性、内存等。

LWIP硬件接口

 AutoIP不常用

2.2STM32以太网外设编程

编程流程

原理图分析->PHY手册分析->以太网及其他外设初始化->LWIP配置

原理图分析

PHY手册分析

PHY地址

PHY寄存器
BMCR(基本模式控制寄存器)

 

 BMSR

以太网及其他外设初始化

外设初始化

使能SWD接口->使能ETH->配置ETH GPIO->使能USART1 

配置PHY

配置PHY地址为0x01->配置PHYSTS寄存器地址为0x10->配置Speed Status掩码为0x0002->配置Duplex Status掩码为0x0004

配置LWIP

使能LWIP->禁止DHCP服务->配置网卡IP 地址信息

printf重定位
int fputc(int ch,FILE *f)
{
  while((USART->SR & 0x40)==0);
  USART1->DR = (uint8_t) ch;
  return ch;
}
开发板硬件连接 

 2.3RAW  API编程模型

RAW API

TCP connection setup

tcp_new

struct tcp_pcb *tcp_new(void)
//函数说明
    Creates a new connection in indentifier(PCB).If memory is not available for creating the new pcb, NULL is returned.
//参数
    void
//返回值
    new pcb

tcp_bind()

err_t tcp_bind(struct tcp_pcb *pcb, in addr t *ipaddr,u16-t port)

 tcp_listen

struct tcp_pcb *tcp_listen(struct tcp_pcb *pcb)

tcp_accept

void tcp_accept(struct tcp_pcb *pcb,err_t (* accept))(void *arg, struct tcp_pcb *newpcb,ree_t err))
//参数

 tcp_connect

Sending TCP data

tcp_write

tcp_sent

Receiving TCP data

tcp_recv

tcp_recved  

Application polling

tcp_poll

Closing and aborting connections

tcp_close

tcp_error

tcp_abort

2.4TCP回响服务器实现及源码分析上

tcp_echoserver.c.h移植

文件目录

STM32Cube_FW_F4_V11.24.1\projects STM324xG EVAL \Applications\lwip\LWIP_TCP_Echo_Server\Src\Inc

实验分析

 移植tcp_echoserver.c文件

  main.c添加tcp_echoserver_init

  编译烧写

 使用NC命令进行连接

 发送任意数据等待回响

tcp_echoserver业务分析
static struct tcp_pcb *tcp_echoserver_pcb;

/* ECHO protocol states */
enum tcp_echoserver_states
{
  ES_NONE = 0,
  ES_ACCEPTED,
  ES_RECEIVED,
  ES_CLOSING
};

/* structure for maintaing connection infos to be passed as argument 
   to LwIP callbacks*/
struct tcp_echoserver_struct
{
  u8_t state;             /* current connection state */
  u8_t retries;
  struct tcp_pcb *pcb;    /* pointer on the current tcp_pcb */
  struct pbuf *p;         /* pointer on the received/to be transmitted pbuf */
};

void tcp_echoserver_init(void);
static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb, err_t err);
static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err);
static void tcp_echoserver_error(void *arg, err_t err);
static err_t tcp_echoserver_poll(void *arg, struct tcp_pcb *tpcb);
static err_t tcp_echoserver_sent(void *arg, struct tcp_pcb *tpcb, u16_t len);
static void tcp_echoserver_send(struct tcp_pcb *tpcb, struct tcp_echoserver_struct *es);
static void tcp_echoserver_connection_close(struct tcp_pcb *tpcb, struct tcp_echoserver_struct *es);

.h声明数据结构和API  

2.5TCP回响服务器实现及源码分析下

tcp_echoserver_init

tcp_echoserver_accept

tcp_echoserver_recv

tcp_echoserver_error

tcp_echoserver_poll

tcp_echoserver_sent

tcp_echoserver_send

tcp_echoserver_connection_close

### 回答1: 《lwip应用开发实战指南》是一本关于lwip协议栈应用开发的指南,以PDF形式提供。lwip是一个轻量级的开源TCP/IP协议栈,可以用于嵌入式系统和物联网设备的网络通信。 这本指南主要包含了lwip协议栈的原理介绍、应用示例和实战开发经验等内容。首先,指南会逐步介绍lwip协议栈的工作原理,包括数据包的封装和解封装、路由选择、连接管理等。读者可以通过这些基础知识了解lwip的工作流程和协议实现。 其次,指南还提供了一些lwip应用示例,例如建立基于lwip的服务器和客户端应用、使用lwip进行网络调试等。这些示例可以帮助读者更好地理解lwip的使用方法和技巧,并且提供了实际应用场景中的解决方案。 最后,指南还分享了一些实战开发经验和注意事项,帮助读者在开发lwip应用时避免常见的错误和问题。这些经验包括性能优化、内存管理、多线程处理等方面的技巧,可以帮助读者在实际开发中更好地利用lwip协议栈。 总体来说,这本《lwip应用开发实战指南》是一本对于想要学习和应用lwip协议栈的开发人员非常有用的资料。通过阅读这本指南,读者可以系统性地学习lwip的原理和使用方法,并且可以通过实际示例和经验分享来提升自己的开发水平。 ### 回答2: "lwip应用开发实战指南"是一本介绍lwIP(轻量级IP协议栈)应用开发的实战指南。该书针对lwIP提供了详细的开发指导和实例,有助于读者深入了解lwIP的原理和应用开发。 该指南首先介绍了lwIP的概念、特点和基本架构。随后,通过实际的案例演示,讲解了如何在不同的应用场景中使用lwIP进行网络通信。其中包括TCP/IP通信、UDP通信、网络调试等常见应用。 指南还详细介绍了lwIP网络接口、协议栈和内存管理等关键要点。读者可以通过学习这些内容,深入掌握lwIP的核心技术,提升应用的性能和可靠性。 此外,该书还提供了一些实用的开发技巧和调试方法,帮助读者解决lwIP应用开发中常见的问题。通过这些实例和技巧,读者可以更好地理解lwIP的工作原理,掌握lwIP开发中的关键技术。 总之,《lwip应用开发实战指南》是一本对于lwIP应用开发者来说非常有价值的参考书。其以简明扼要的方式介绍了lwIP的原理和应用开发技巧,为读者提供了一个实际操作中的指导。无论是初学者还是有一定经验的开发者,都可以从中获得一些宝贵的经验和启示。希望读者能够通过本书的学习,掌握lwIP开发技术,提高自己在网络应用开发中的水平。 ### 回答3: "LwIP应用开发实战指南"是一本针对LwIP(Lightweight IP)网络协议栈的应用开发实践指南的PDF电子书。LwIP是一种独立、可嵌入的开源网络协议栈,被广泛应用于嵌入式系统和物联网设备中。 这本指南通过实际案例和项目演示,详细介绍了如何使用LwIP协议栈进行应用开发。首先,它介绍了LwIP协议栈的基本概念和特性,包括TCP/IP协议、IP地址分配、套接字编程等内容。然后,它详细讲解了如何使用LwIP协议栈进行网络连接的建立和管理,包括网络接口的配置、DNS解析、TCP和UDP连接的建立等。同时,它还介绍了如何实现网络服务,例如HTTP服务器、FTP服务器等。 这本指南的特点之一是提供了大量的实例代码和可供实验的项目案例。读者可以通过按照书中的指导进行实验,逐步学习和掌握LwIP的应用开发技巧。同时,这本指南还强调了实践和调试的重要性,通过解决实际问题的方式,帮助读者更好地理解和应用LwIP协议栈。 总的来说,“LwIP应用开发实战指南”是一本面向嵌入式系统和物联网设备开发人员的指导书,它通过实例和项目案例,帮助读者深入了解和应用LwIP协议栈进行网络应用开发。无论是初学者还是有一定经验的开发人员,都能从中获益,并提升他们的应用开发能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值