当前位置: 首页 > news >正文

ESP32和mDNS学习

目录

  • mDNS的作用
  • mDNS涉及到的标准文件
  • 组播地址
    • IPv4 多播地址
    • IPv6 多播地址
    • 预先定义好的组播地址
  • mDNS调试工具
  • 例程
  • mDNS如何开发和使用
    • 注册服务
    • 查询服务

mDNS的作用

mDNS 是一种组播 UDP 服务,用来提供本地网络服务和主机发现。

  • 你要和设备通信,需要记住IP地址不好记。用了mDNS只要几个名字就行。
  • 你需要快速知道局域网内是否有你想要的服务,用mDNS查一下就行。
  • 这个协议只在局域网内有效。
  • 先简单了解下什么是组播–一种被预先定义好的IP地址数字。用于实现一对多的通信。
组播是一对多。
广播是一对所有。

mDNS涉及到的标准文件

  • rfc6762
  • rfc6763

组播地址

  • 因为有IPV4和IPV6两类地址,因此组播也分两类。
  • 多播地址在网络通信中用于发送数据到多个接收器,而不是单一接收器或广播到所有接收器。多播地址有其特定的规则和范围

IPv4 多播地址

IPv4 多播地址范围是 224.0.0.0 到 239.255.255.255。这些地址进一步细分为特定用途的子范围:

局部网络控制块: 224.0.0.0 到 224.0.0.255这些地址保留用于本地网络内的协议控制消息,不会被路由器转发到其他网络。例如,224.0.0.1 是所有主机的多播地址,224.0.0.2 是所有路由器的多播地址。预留多播地址: 224.0.1.0 到 238.255.255.255这些地址用于全球范围的多播应用,且路由器会转发这些地址的数据包。本地管理地址: 239.0.0.0 到 239.255.255.255这些地址保留用于组织内部的多播,不会被全球路由。

IPv6 多播地址

IPv6 多播地址以 ff00::/8 前缀开头,并具有不同的范围标识符和子范围:

范围标识符(Scope Identifier):ff01:: 链路本地(Link-Local)ff02:: 本地网络(Local Network)ff05:: 站点本地(Site-Local)ff08:: 组织本地(Organization-Local)ff0e:: 全球范围(Global)预定义多播地址:ff02::1 所有节点地址(所有主机)ff02::2 所有路由器地址

预先定义好的组播地址

不同的标准,如果用到组播地址,会定义出组播地址的值。下面列出常见的。

常见IPv4 预定义组播地址
这些地址用于局域网内的控制消息,通常不被路由器转发。

224.0.0.1: 所有主机
224.0.0.2: 所有路由器
224.0.0.4: DVMRP 路由器
224.0.0.5: OSPF 路由器
224.0.0.6: OSPF 指定路由器
224.0.0.9: RIPv2 路由器
224.0.0.10: EIGRP 路由器
224.0.0.13: PIM 路由器
224.0.0.18: VRRP 路由器
224.0.0.22: IGMPv3
224.0.0.251: mDNS (Multicast DNS)
224.0.0.252: Link-Local Multicast Name Resolution (LLMNR)
224.0.1.1: NTP (Network Time Protocol)
224.0.1.22: H.323 网关发现

常见IPv4 预定义预留多播地址(224.0.1.0 - 238.255.255.255)

这些地址用于全球范围的多播应用,路由器会转发这些地址的数据包。

224.0.1.2: SGI-Dogfight(多用户虚拟现实游戏)
224.0.1.35: SVRLOC (Service Location Protocol)
224.0.1.60: AAP (AOL Access Protocol)
239.255.255.250: SSDP (Simple Service Discovery Protocol)

常见IPv4 预定义本地管理地址(239.0.0.0 - 239.255.255.255)

这些地址用于组织内部的多播,不会被全球路由。

常见IPv6 预定义组播地址
范围标识符(Scope Identifier)

ff01::: 节点本地(Node-Local)
ff02::: 链路本地(Link-Local)
ff05::: 站点本地(Site-Local)
ff08::: 组织本地(Organization-Local)
ff0e::: 全球范围(Global)

预定义多播地址

ff02::1: 所有节点(All Nodes)
ff02::2: 所有路由器(All Routers)
ff02::5: OSPF 路由器
ff02::6: OSPF 指定路由器
ff02::9: RIPv2 路由器
ff02::a: EIGRP 路由器
ff02::d: PIM 路由器
ff02::16: MLDv2(Multicast Listener Discovery version 2)
ff02::fb: mDNS (Multicast DNS)
ff02::1:3: Link-Local Multicast Name Resolution (LLMNR)
ff05::1:3: DHCPv6 服务器/中继代理

备注:
“组播”和“多播”在网络通信中基本上是同一个概念。两者指的是同一种技术。

mDNS调试工具

在电脑端,有两款,

  • 一款是Apple开发的Bonjour 的服务(有windows版本),这款我下载安装了,不会用尴尬,好像只能识别打印机服务。
  • 一款是在linux平台下的avahi(默认已安装),也有图形界面。后面会有这款工具的截图。

例程

ESP的mDNS文档和例程都放在下面的git 库里面

例程

  1. git下来后vscode打开例程。
  2. 设置wifi账号密码
    在这里插入图片描述编译和运行测试
    运行命令avahi-discover,打开图形界面,如下所示。
    在这里插入图片描述点击任意一项,就可以看到解析出来的数据。如下所示。
    在这里插入图片描述直接ping域名也是可以ping通的
ping esp32-mdns.local

在这里插入图片描述按下按钮0,打印如下信息。查询到局域网里有这些服务。
在这里插入图片描述

mDNS如何开发和使用

开发主要看需求,分两个需求:注册服务和查询服务。
根据自己的需求决定是否要做这两个动作。
下面只是把关键的代码片段拿出来,完整代码,请看例程。

初始化mdns
mdns_init() 这一步是通用的,不过是注册还是查询,都要先初始化。

注册服务

1.设置主机名
mdns_hostname_set(hostname)

2.设置实例名
mdns_instance_name_set(EXAMPLE_MDNS_INSTANCE)

3.注册服务

mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, 3) 
mdns_service_subtype_add_for_host("ESP32-WebServer", "_http", "_tcp", NULL, "_server") 

查询服务

例程将查询服务做了一次封装,只需要输入服务名和使用协议,就可以查网络中是否存在有这个服务。

在例程里,只要按一下按钮0,就回调用这个函数,并将查询结果在串口打印。

static void query_mdns_service(const char *service_name, const char *proto)

上面的函数实际是调用库函数,实现查询

mdns_query_ptr()

相关文章:

ESP32和mDNS学习

目录 mDNS的作用mDNS涉及到的标准文件组播地址IPv4 多播地址IPv6 多播地址预先定义好的组播地址 mDNS调试工具例程mDNS如何开发和使用注册服务查询服务 mDNS的作用 mDNS 是一种组播 UDP 服务,用来提供本地网络服务和主机发现。 你要和设备通信,需要记住…...

学习SQL如何使用CASE语句查询分析设备状态

学习SQL如何使用CASE语句查询分析设备状态 一、前言1. 问题背景2. SQL查询分析3. SQL查询解析 二、结论 一、前言 在实际应用中,经常需要对设备的状态进行监控和分析。通过SQL查询,我们可以有效地从数据库中提取和计算设备的状态信息。本文将介绍如何编…...

Gartner发布2024年零信任网络技术成熟度曲线:20项零信任相关的前沿和趋势性技术

大多数组织都制定了零信任信息安全策略,而网络是零信任实施领域的顶级技术。此技术成熟度曲线可以帮助安全和风险管理领导者确定合适的技术,以将零信任原则嵌入其网络中。 战略规划假设 到 2026 年,15% 的企业将在企业拥有的局域网上用 ZTNA …...

React hook 之 useState

在组件的顶部定义状态变量,并传入初始值,确保当这些状态变量的值发生变化时,页面会重新渲染。 const [something,setSomething] useState(initialState); useState 返回一个由两个值组成的数组:1、当前的 state,在首次…...

jenkins中shell脚本中使用构建参数化Groovy变量的四种方式

jenkins中shell脚本中使用构建参数化Groovy变量的四种方式: 以字符变量为例: 流水线代码: pipeline {agent {//label "${server}"label "${28}"}stages {stage(Hello) {steps {echo Hello Worldecho "${28}"echo "…...

Robot Operating System——ParameterEventHandler监控Parameters的增删改行为

大纲 创建订阅"/parameter_events"的Node监控自身Node内部Parameter监控自身Node外部Parameter监听所有Node的所有Parameter的变动执行效果总结 在《Robot Operating System——AsyncParametersClient监控Parameters的增删改行为》一文中,我们通过AsyncPa…...

计算机网络(Wrong Question)

一、计算机网络体系结构 1.1 计算机网络概述 D 注:计算机的三大主要功能是数据通信、资源共享、分布式处理。(负载均衡、提高可靠性) 注:几段链路就是几段流水。 C 注:记住一个基本计算公式:若n个分组&a…...

Docker+consul容器服务的更新与发现

1、Consul概述 (1)什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点…...

全网最详细!! Linux 安装、配置教程

一、下载安装包 首先去官网下载VMware最新版本,以及发行版CentOS -7,懒得下载的可以私信我,我给你发包 其中,CentOS(Community Enterprise Operating System)是一个基于Linux的开源操作系统,它是…...

cocos creator 3学习记录01——如何替换图片

一、动态加载本地图片 1、通过将图片关联到CCClass属性上来进行代码切换。 1、这种方法,需要提前在脚本文件中声明好代表图片的CCClass属性。 2、然后拖动图片资源,到脚本内声明好的属性上以进行关联。 3、然后通过程序,来进行切换展示。…...

【Android Compose】ListView效果

【Android Compose】ListView效果 1、Column、Row 和 Box2、LazyColumn和LazyRow3、Compose 中的状态4、ListView效果5、android-compose-codelabs Jetpack Compose 使用入门 Jetpack Compose 教程 Jetpack Compose 1、Column、Row 和 Box Compose 中的三个基本标准布局元素是 …...

【Pytorch实战教程】Pytorch中.detach()的详细介绍

detach() 是 PyTorch 中用于分离张量的计算图的一个方法。它在处理计算图时非常有用,尤其是在需要停止梯度传播的情况下。以下是 detach() 方法的详细介绍: 方法概述 detach() 方法返回一个新的张量,从当前计算图中分离出来,即返回的张量不会参与梯度计算。这在某些情况下…...

AR 眼镜之-充电动画定制-实现方案

目录 📂 前言 AR 眼镜系统版本 充电动画 1. 🔱 技术方案 1.1 方案介绍 1.2 实现方案 关机充电动画 亮屏/锁屏充电动画 2. 💠 关机充电动画 2.1 关机充电动画核心处理类与路径 2.2 实现细节 步骤一:1)定制 …...

AJAX-XMLHttpRequest 详解

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 前言 XMLHttpRequest 概述 主要用途 工作流程 示例代码 GET 请求示例 POST 请求示例 注意事项 工作…...

内容管理系统 Contentful 与 Baklib

对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。 遵循的做法之一是使用无头内容管理系统 (CMS)。 如果您是这样的组织之一,正在考虑使用无头 CMS - Contentful 之一来管理您的在线知识库&#xff0…...

[Mysql-视图和存储过程]

视图 视图是从一个或者几个基本表(或视图)导出的表。它与基 本表不同,是一个虚表。 创建使用视图 # 视图 -- 视图只能用来查询,不能做增删改 -- 创建视图 -- create view 视图名【view_xxx / v_xxx】 -- as 查询语句 create view…...

Linux下C++静态链接库的生成以及使用

目录 一.前言二.生成静态链接库三.使用静态链接库 一.前言 这篇文章简单讨论一下Linux下如何使用gcc/g生成和使用C静态链接库&#xff08;.a文件&#xff09;。 二.生成静态链接库 先看下目录结构 然后看下代码 //demo.h#ifndef DEMO_H #define DEMO_H#include<string&g…...

【8月EI会议推荐】第四届区块链技术与信息安全国际会议

一、会议信息 大会官网&#xff1a;http://www.bctis.nhttp://www.icbdsme.org/ 官方邮箱&#xff1a;icbctis126.com 组委会联系人&#xff1a;杨老师 19911536763 支持单位&#xff1a;中原工学院、西安工程大学、齐鲁工业大学&#xff08;山东省科学院&#xff09;、澳门…...

2024年【甘肃省安全员B证】考试资料及甘肃省安全员B证模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年甘肃省安全员B证考试资料为正在备考甘肃省安全员B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的甘肃省安全员B证模拟试题祝您顺利通过甘肃省安全员B证考试。 1、【多选题】5kW以上电动机开关箱中电…...

结合el-upload上传组件,验证文件格式及大小

结合el-upload上传组件&#xff0c;验证文件格式及大小 效果如下&#xff1a; 代码如下&#xff1a; upgradeFirmwareInfo.vue页面 <template><div><el-dialog title"新增固件升级包" :visible.sync"dialogFormVisible"top"7vh&qu…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...