当前位置: 首页 > 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…...

t-io HTTP服务器实现:如何替代Tomcat和Jetty的完整指南

t-io HTTP服务器实现&#xff1a;如何替代Tomcat和Jetty的完整指南 【免费下载链接】t-io T-io is a network programming framework developed based on Java AIO. From the collected cases, t-io is widely used for IoT, IM, and customer service, making it a top-notch …...

终极简单指南:如何用Seraphine英雄联盟助手快速提升排位胜率

终极简单指南&#xff1a;如何用Seraphine英雄联盟助手快速提升排位胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 想象一下这样的场景&#xff1a;排位赛开始前&#xff0c;你正手忙脚乱地查询对手战绩…...

书成紫微动,律定凤凰驯:海棠山铁哥,用两部作品走完了千年谶语的路

书成紫微动&#xff0c;律定凤凰驯。 ——千年谶语&#xff0c;今终圆满。一、悬在文脉上空的千年谶语“书成紫微动&#xff0c;律定凤凰驯”自诞生之日起&#xff0c;这句庙堂吉颂便高悬于华夏文脉之上&#xff0c;无人可触、无人能落。 文人墨客解其字&#xff0c;玄学爱好者…...

职得Offer校园求职助手Pro深度评测:一个AI Agent陪你跑完求职全流程

一、 职得Offer是什么&#xff1f;—— 不止是工具&#xff0c;更是全程陪伴的AI求职伙伴 在AI应用爆发的今天&#xff0c;面对市面上众多的简历模板、面经题库和招聘平台&#xff0c;求职者尤其是学生群体&#xff0c;依然会陷入“信息过载却无从下手”的困境。“职得Offer校…...

DLSS Swapper完整指南:如何5分钟提升游戏性能50%?

DLSS Swapper完整指南&#xff1a;如何5分钟提升游戏性能50%&#xff1f; 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 您是否曾经为游戏卡顿而烦恼&#xff1f;是否在寻找提升帧率的方法却不知从何入手&#xff1f;…...

Arm Development Studio 2025.1:嵌入式开发与多核调试实战

1. Arm Development Studio 2025.1 核心定位解析作为Arm官方推出的旗舰级开发套件&#xff0c;Arm Development Studio 2025.1&#xff08;后简称DS-2025&#xff09;延续了其"芯片级开发瑞士军刀"的产品定位。不同于通用型IDE&#xff0c;这套工具链从底层就为Arm架…...

资源管理器约束设计:从核心原理到YARN/K8s实战配置

1. 项目概述&#xff1a;理解资源管理器约束的核心价值在任何一个复杂的计算或资源管理系统中&#xff0c;资源管理器&#xff08;Resource Manager&#xff0c; 简称RM&#xff09;都扮演着“交通警察”或“调度中心”的角色。它的核心职责是公平、高效地分配有限的系统资源&a…...

如何让GPT-3开口说话?揭秘微调技巧,打造你的专属AI模型!

本文详细介绍了微调技术在AI模型中的应用&#xff0c;通过将通用模型如GPT-3进行微调&#xff0c;可以使其适应特定任务&#xff0c;如ChatGPT或GitHub Copilot。微调与普通提示词工程最大的区别在于&#xff0c;它能真正让模型学会数据&#xff0c;而非仅仅是“看到”数据。文…...

从3D打印到智能光效:制作可编程NeoPixel守护者之剑全流程

1. 项目概述&#xff1a;当数字建模遇见智能光效作为一名在创客领域摸爬滚打了十多年的老玩家&#xff0c;我经手过无数个将虚拟想法变为现实的项目。但每次看到那些融合了数字制造与智能交互的作品&#xff0c;比如一把能自己发光的游戏道具&#xff0c;依然会感到兴奋。这不仅…...

思源宋体TTF终极指南:7种字重解决中文排版所有难题

思源宋体TTF终极指南&#xff1a;7种字重解决中文排版所有难题 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是否在为中文项目寻找完美的开源字体而烦恼&#xff1f;商业字体价格昂…...