Showing posts with label Protocol. Show all posts
Showing posts with label Protocol. Show all posts

Saturday, April 6, 2024

OData

 OData(The Open Data Protocol) 是一種基於REST的數據訪問方式,該標準由微軟發起,前三個版本1.0、2.0、3.0是微軟開放標準,第4.0版於2014年在OASIS投票通過成為 開放工業標準。

The Open Data Protocol (OData) enables the creation of REST-based data services which allow resources, identified using Uniform Resource Locators (URLs) and defined in a data model, to be published and edited by Web clients using simple HTTP messages.

This specification defines the core semantics and the behavioral aspects of the protocol.

OData - the Best Way to REST


OData‑URL

Odata定義了一組推薦的(但不是必需的)規則,用於構建URL以識別 OData 服務公開的數據和元數據,以及一組保留的URL查詢字串運算符。


  • Service root URL: url 的服務根是服務的基本 url。 當對該 url 發出 GET 請求時,它將返回一個服務文檔,該文件定義了通過該服務可用的所有資源。 Redfish 的Service root URL 是 /redfish/v1 這在redfish spec中有定義
  • Resource path : REST 定義的資源是可通過 HTTP 使用標準 GET、POST、PUT、PATCH 和 DELETE 方法訪問的物件。
  • Query options: 查詢選項本質上是標準化的查詢字串參數,可以傳遞給 OData 服務以對請求的資源運行查詢。 例如對資源的filter, count, skip, order, search 和 format。 所有 OData 查詢選項都以 $ 符號為前綴,並且不區分大小寫。

另外在service root URL後面加上$metadata可以看到Service的實體模型(entity model),內容根據 [OData-CSDLJSON] 或 [OData-CSDLXML]


OData-CSDLXML

OData 服務是根據實體模型來描述的。 CSDL(Common Schema Definition Language) 使用XML(Extensible Markup Language ) 定義了由 OData 服務公開的實體數據模型的表示法,以及來自 W3C XML 模式定義語言的進一步構建塊 (XSD) 。

簡單來說,就是定義我們常聽到的Redfish的Schema和Property,這樣消費者可以知道它會得到的訊息格式,進而先處理(微軟有些tool可以直接將CSDL轉為結構或資料庫),這部分DMTF有CSDL的教學文件,同時也有一個Redfish Service Validator 的tool 來驗證我們的Redfish Services有沒有符合定義的CSDL

Redfish_School-Introduction_to_CSDL (dmtf.org)

GitHub - DMTF/Redfish-Service-Validator: The Redfish Service Validator is a Python3 tool for checking conformance of any "device" with a Redfish service interface against Redfish CSDL schema


OData-JSON

OData 定義一些特定的property 來擴展 JSON。 舉一些常見的例子,詳細可以參閱Spec

  • @odata.id:entity-id與實體的規範URL相同,通常是必須存在的
  • @odata.count:計數控制資訊僅出現在回應中,可以註釋在任何集合中

定義 GitHub - openbmc/smbios-mdr


Sunday, March 31, 2024

[Protocol] Android Bluetooth Architecture

 


[Protocol] D-Bus 原理

 一个系统中可以有多条 D-Bus 总线,即多个 D-Bus 守护进程。D-Bus 总线有两种类型

个系统上可以存在任意多总线,以 Ubuntu 为例

System bus 系统总线 

开机创建,有且只能有一条,Unix domain socket路径为/run/dbus/system_bus_socket

Session bus 用户总线

desktop environment,如:GNOME,KDE,每个用户登录后会创建专有的D-Bus总线,Unix domain socket路径为/run/user/$UID/bus

不同 Bus 之间是逻辑隔离的,相互直接无法通信。


原生物件和物件路徑

所有使用D-BUS的應用程式都包含一些物件, 當經由一個D-BUS連線收到一條訊息時,該訊息是被髮往一個物件而不是整個應用程式。在開發中程式框架定義著這樣的物件,例如JAVA,GObject,QObject等等,在D-Bus中成為native object

對於底層的D-Bus協議,即libdbus API,並不理會這些native object,它們使用的是一個叫做object path的概念。通過object path,高層程式設計可以為物件例項進行命名,並允許遠端應用引用它們。這些名字看起來像是檔案系統路徑,例如一個物件可能叫做

“/org/kde/kspread/sheets/3/cells/4/5”。易讀的路徑名是受鼓勵的做法,但也允許使用諸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以為你的應用程式所用。Namespacing的物件路徑以開發者所有的域名開始(如 /org/kde)以避免系統不同程式碼模組互相干擾。

方法和訊號Methodsand Signals

每一個物件有兩類成員:方法和訊號

方法就是 JAVA 中同樣概念,方法是一段函式程式碼,帶有輸入和輸出。

訊號是廣播給所有興趣的其他實體,訊號可以帶有資料 payload

在 D-BUS 中有四種型別的訊息

方法呼叫(method calls)、方法返回(method returns)、訊號(signals)和錯誤(errors)

要執行 D-BUS 物件的方法,您需要向物件傳送一個方法呼叫訊息。它將完成一些處理(就是執行了物件中的Method,Method是可以帶有輸入引數的。)並返回,返回訊息或者錯誤訊息。

訊號的不同之處在於它們不返回任何內容:既沒有“訊號返回”訊息,也沒有任何型別的錯誤訊息。

介面 Interface

每一個物件支援一個或者多個介面,介面是一組方法和訊號,介面定義一個物件實體的型別。D-Bus對介面的命名方式,類似org.freedesktop.Introspectable。開發人員通常將使用程式語言類的的名字作為介面名字。

Proxies代理

代理物件用來表示其他的remote object。當我們觸發了proxy物件的method時,將會在D-Bus上傳送一個method_call的訊息,並等待答覆,根據答覆返回。使用非常方便,就像呼叫一個本地的物件。

未完 和菜鳥一起學linux之DBUS基礎學習記錄

通信流程概覽


https://www.twblogs.net/a/5ea4a6706052e10444d73e02

https://www.gushiciku.cn/pl/gwTk/zh-tw

D-Bus Specification

[Protocol] D-Bus Application

 Android Bluetooth Architecture

BlueZ 5.50 and D-Bus

OpenBMC 和 D-Bus 的關係

[Protocol] D-Bus index

介紹

原理

相關應用

Tuesday, December 27, 2022

[Protocol] Avahi

Avahi 是一套使應用程式能夠公布或發現區域網上運行的服務和主機的系統

Avahi 啟動時,需要依賴 D-Bus

目的:找尋區域網路服務或設備

先了解知識:mDNS (Multicast DNS) 和 DNS-SD (DNS-based Service Discovery)

mDNS 就是對區網做「廣播」而廣播的內容則是我們熟悉的 DNS Query

DNS-SD -- 參考網頁中的「根據 DNS-SD 篩選出 Airplay / Chromecast 裝置」

zeroconf

Zeroconf 全稱為 Zero configuration networking,中文名則為零配置網路服務規範,是一種用於自動生成可用IP地址的網路技術,不需要額外的手動配置和專屬的配置伺服器。

精神在於希望把網路設定這件事情自動化,達到零設定(無須手動設定)的目的

主要是定義了三個層次

1. 指派位址(Address Selection)- 不需利用 dhcp server 取得 裝置地址如 IP 的相關資料

RFC 3927 , Dynamic Configuration of IPv4 Link-Local Addresses

2. 名稱解析(Name Resolution) - 不需要通過 DNS server 就轉換 domain name 和 IP 的關係

Multicast DNS

3. 服務搜尋(Service Discovery)- 利用 DNS-SD 來取得裝置服務,而不需通過 directory server

DNS-based Service Discovery, or DNS-SD.

  1. DNS-SD 的 FQDN 結構
  2. DNS-SD 會使用的 Record

Apple 的 zeroconf 協議技術實現 – Bonjour

apple 的 airplay,airprint 都是依賴了zeroconf 的基礎上,才展現出強大的功能

例子說明:
使用者擁有一臺apple tv和一臺iPhone4s,那之只要都連入到同一個無線區域網內,iphone4s就會自動找出apple tv,那麼在播放音樂或者視訊時候,使用者只要點選推送,就可以講音樂和視訊推送到apple tv上播放。

開源的 zeroconf 協議技術實現 – Avahi

Avahi 是 Zeroconf 規範的開源實現,可以分成 server 以及 client

server 的部份主要是要告訴大家你自己是誰, 提供區網有什麼服務

client 的部份主要是用來聽廣播, 取得區網上所有可使用的服務

環境

version: avahi-daemon (0.8-5ubuntu5)

johnnysu@johnnysu-VirtualBox:/etc/avahi/services$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.50.114 netmask 255.255.255.0 broadcast 192.168.50.255
inet6 fe80::49b2:8ba6:6532:9d0e prefixlen 64 scopeid 0x20<link>
ether 08:00:27:75:08:d1 txqueuelen 1000 (Ethernet)
RX packets 172828 bytes 65464536 (65.4 MB)
RX errors 21 dropped 0 overruns 0 frame 0
TX packets 17493 bytes 1902108 (1.9 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19 base 0xd020

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 9106 bytes 919852 (919.8 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9106 bytes 919852 (919.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ubuntu 安裝 avahi

avahi-utils - Avahi browsing, publishing and discovery utilities

sudo apt-get install avahi-daemon avahi-utils

查詢是否啟動

johnnysu@johnnysu-VirtualBox:~$ systemctl list-units --all | grep -E "dbus|avahi-daemon"
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
dbus.service loaded active running D-Bus System Message Bus
getty-static.service loaded inactive dead getty on tty2-tty6 if dbus and logind are not available
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
dbus.socket loaded active running D-Bus System Message Bus Socket

查詢監聽

johnnysu@johnnysu-VirtualBox:~/airplay$ sudo netstat -tlunp | grep avahi
udp 0 0 0.0.0.0:5353 0.0.0.0:* 5357/avahi-daemon:
udp 0 0 0.0.0.0:49226 0.0.0.0:* 5357/avahi-daemon:
udp6 0 0 :::5353 :::* 5357/avahi-daemon:
udp6 0 0 :::52810 :::* 5357/avahi-daemon:

設定檔

/etc/avahi/avahi-daemon.conf

[server]
host-name=johnny
domain-name=local

如果有設定 ipv6=no 的話,

use-ipv6=no

以下就會沒有

udp6 0 0 :::5353 :::* 5357/avahi-daemon:
udp6 0 0 :::52810 :::* 5357/avahi-daemon:

重新啟動

sudo systemctl restart avahi-daemon

找另一台主機確定 mDNS server 是否通

wolfe@wolfe-VirtualBox:~/work/UxPlay-master$ ping johnny.local
PING johnny.local (192.168.50.114) 56(84) bytes of data.
64 bytes from 192.168.50.114 (192.168.50.114): icmp_seq=1 ttl=64 time=27.8 ms
64 bytes from 192.168.50.114 (192.168.50.114): icmp_seq=2 ttl=64 time=18.1 ms
64 bytes from 192.168.50.114 (192.168.50.114): icmp_seq=3 ttl=64 time=2.33 ms

register an mDNS/DNS-SD service 有 2 種方式

1. 透過 avahi-publish 方式 register an mDNS/DNS-SD service

      avahi-publish -s [options] name service-type port [TXT data ...]

       avahi-publish-service [options] name service-type port [TXT data ...]

avahi-publish -s "My service" _myservic._tcp 1234

johnnysu@johnnysu-VirtualBox:/etc/avahi/services$ avahi-browse -a -r

= enp0s3 IPv4 My service _myservic._tcp local
hostname = [johnny.local]
address = [192.168.50.114]
port = [1234]
txt = []

2. 編寫你自己的服務 (提供 DNS-SD 會使用的 Record)

預設是放在 /etc/avahi/services

johnnysu@johnnysu-VirtualBox:/etc/avahi/services$ ls
ftp.service smb.service

ftp.service

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">FTP</name>
<service>
<type>_ftp._tcp</type>
<host-name>ftp.johnny.local</host-name>
<port>21</port>
<txt-record>path=/share</txt-record>
<txt-record>u=guest</txt-record>
<txt-record>p=pass</txt-record>
</service>
</service-group>

smb.service

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">Samba</name>
<service>
<type>_smb._tcp</type>
<host-name>smb.johnny.local</host-name>
<port>445</port>
<txt-record>path=/share</txt-record>
<txt-record>u=guest</txt-record>
<txt-record>p=pass</txt-record>
</service>
</service-group>

在 /usr/share/doc/avahi-daemon/examples 裡有一些現成的範例

其它細節可以參考這裡 http://manpages.ubuntu.com/manpages/precise/man5/avahi.service.5.html

Service type 定義在 avahi/service-type-database/service-types 根據 DNS SRV (RFC 2782) Service Types

_ftp._tcp:FTP File Transfer

_airplay._tcp:AirPlay Remote Video

Finished register an mDNS/DNS-SD service,設定 host name/address mapping

avahi 預設會為 hosts 的 IP 去反查域名,所以不能多個 domain name 指向同 1 個 IP

設定 host name 對映 address (擇一)

way1

sudo vim /etc/avahi/hosts

192.168.50.114 ftp.johnny.local

way2 (一定要有 .local)

/usr/local/bin/avahi-add-names.sh

/usr/bin/avahi-publish -a -R ftp.johnny.local 192.168.50.114 > /dev/null 2>&1 &
/usr/bin/avahi-publish -a -R smb.johnny.local 192.168.50.115 > /dev/null 2>&1 &

chmod +x /usr/local/bin/avahi-add-names.sh

sed -i '/ExecStart/aExecStartPost=\/usr\/local\/bin\/avahi-add-names\.sh' /lib/systemd/system/avahi-daemon.service

sudo systemctl daemon-reload

啟動,擇一

1. sudo /etc/init.d/avahi-daemon start

2. sudo systemctl start avahi-daemon

查看狀況

johnnysu@johnnysu-VirtualBox:~/airplay/test-avahi$ sudo systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-12-27 17:01:49 CST; 2s ago
TriggeredBy: ● avahi-daemon.socket
Process: 6718 ExecStartPost=/usr/local/bin/avahi-add-names.sh (code=exited, status=0/SUCCESS)
Main PID: 6716 (avahi-daemon)
Status: "avahi-daemon 0.8 starting up."
Tasks: 4 (limit: 4626)
Memory: 1.6M
CPU: 23ms
CGroup: /system.slice/avahi-daemon.service
├─6716 "avahi-daemon: running [johnnysu-VirtualBox.local]"
├─6717 "avahi-daemon: chroot helper"
├─6719 /usr/bin/avahi-publish -a -R ftp.johnny.local 192.168.50.114
└─6720 /usr/bin/avahi-publish -a -R smb.johnny.local 192.168.50.115

十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Network interface enumeration completed.
十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Registering new address record for fe80::49b2:8ba6:6532:9d0e on enp0s3.*.
十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Registering new address record for 192.168.50.114 on enp0s3.IPv4.
十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Registering new address record for ::1 on lo.*.
十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Registering new address record for 127.0.0.1 on lo.IPv4.
十二 27 17:01:49 johnnysu-VirtualBox systemd[1]: Started Avahi mDNS/DNS-SD Stack.
十二 27 17:01:49 johnnysu-VirtualBox avahi-daemon[6716]: Server startup complete. Host name is johnnysu-VirtualBox.local. Local service cookie is 2433229662.
十二 27 17:01:50 johnnysu-VirtualBox avahi-daemon[6716]: Service "FTP" (/services/ftp.service) successfully established.
十二 27 17:01:50 johnnysu-VirtualBox avahi-add-names.sh[6720]: Established under name 'smb.johnny.local'
十二 27 17:01:50 johnnysu-VirtualBox avahi-add-names.sh[6719]: Established under name 'ftp.johnny.local'

立即測試的話,可用:nohup ./avahi-add-names.sh

以下用 client 來測試

使用 avahi-browse 測試

wolfe@wolfe-VirtualBox:~/work/UxPlay-master$ avahi-browse -r -t _ftp._tcp

+ enp0s3 IPv4 FTP FTP File Transfer local
= enp0s3 IPv4 FTP FTP File Transfer local
hostname = [ftp.johnny.local]
address = [192.168.50.114]
port = [21]
txt = ["p=pass" "u=guest" "path=/share"]

FTP File Transfer local= enp0s3 IPv4 FTP
FTP File Transfer local
hostname = [ftp.johnny.local]
address = [192.168.50.114]
port = [21]
txt = ["p=pass" "u=guest" "path=/share"]

Johnnysu@johnnysu-VirtualBox:~$ avahi-browse -r -t _smb._tcp
+ enp0s3 IPv4 JOHNNYSU-VIRTUALBOX Microsoft Windows Network local
+ lo IPv4 JOHNNYSU-VIRTUALBOX Microsoft Windows Network local
= enp0s3 IPv4 JOHNNYSU-VIRTUALBOX Microsoft Windows Network local
hostname = [johnny.local]
address = [192.168.50.114]
port = [445]
txt = []
= lo IPv4 JOHNNYSU-VIRTUALBOX Microsoft Windows Network local
hostname = [johnny.local]
address = [127.0.0.1]
port = [445]
txt = []

其它指令:

##發現所有已註冊的服務

avahi-browse -a -r

使用 dig 測試服務是否活著

成功

johnnysu@johnnysu-VirtualBox:/etc/avahi/services$ dig -p 5353 @192.168.50.114 ftp.johnny.local

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> -p 5353 @192.168.50.114 ftp.johnny.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34416
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ftp.johnny.local. IN A

;; ANSWER SECTION:
ftp.johnny.local. 10 IN A 192.168.50.114

;; Query time: 0 msec
;; SERVER: 192.168.50.114#5353(192.168.50.114) (UDP)
;; WHEN: Tue Dec 27 17:24:30 CST 2022
;; MSG SIZE rcvd: 50

因為沒有 192.168.50.115 server,所以沒找到

johnnysu@johnnysu-VirtualBox:/etc/avahi/services$ dig -p 5353 @192.168.50.115 _smb._tcp.local ptr

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> -p 5353 @192.168.50.115 _smb._tcp.local ptr
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

使用 nmap 測試

johnnysu@johnnysu-VirtualBox:~$ sudo nmap -Pn -sUC -p5353 192.168.50.114
Starting Nmap 7.80 ( https://nmap.org ) at 2022-12-28 10:03 CST
Nmap scan report for johnnysu-VirtualBox (192.168.50.114)
Host is up (0.000072s latency).

PORT STATE SERVICE
5353/udp open zeroconf
| dns-service-discovery:
| 21/tcp ftp
| Address=192.168.50.114
| 445/tcp smb
| Address=192.168.50.114 fe80::49b2:8ba6:6532:9d0e
| Device Information
|_ Address=192.168.50.114 fe80::49b2:8ba6:6532:9d0e

Monday, December 26, 2022

[Protocol] D-Bus introduction

D-Bus,數據總線,是一個低延遲,低開銷,高可用性的 IPC 機制,协议传递的是二进制数据,, 而不是其他的文本格式 (如JSON/XML), 协议是基于消息处理的, 而不是基于流


相较于传统意义上的 IPC 机制(例如PIPE/FIFO/Socket/共享内存/SysvIpc),D-Bus提供了更高层次的抽象

目前也透過 kobject 與 kernel 做整合,如此一來,D-BUS 便能輕易整合 kernel、application 與 desktop,真正解決以往「系統整合」所遇到的障礙。

http://dbus.freedesktop.org/doc/dbus-glib/index.html

1. 方法调用(Method Call):用来实现跨进程的方法(函数)调用,配合代码生成工具,可以做到让进程间的函数调用和普通的函数调用几无区别

2. 信号(Signal):发布订阅(Pub-Sub)模式的通信机制,发送进程注册并发送(广播)信号,接收进程订阅自己感兴趣的信号。

3. 属性(Property):可类比 C++ 类中成员变量的 Getter-Setter,如果进程A提供了一个属性,那么其他进程可以通过D-Bus来读取、写入该属性。

在架構上分位三層

1. Layer 1 libdbus :freedesktop 機構提供的一個免費開源的一個由C語言編寫的 low-level API 。是提供dbus功能的庫。是高階API繫結的低階API

2. Layer 2 dbus daemon :dbus實現的IPC守護進行,隨Linux啟動,通過不通程序對其的連線,實現了多程序間訊息的路由(包含核心、網路、桌面等)

3. Layer 3 Wapper libraries (high-level API): 對 low-level API libdbus 的封裝 ,例如 libdbus-qt libdbus-python github.com/godbus/dbus ,這些不同程式語言實現的 Wapper 是不同開發者應該使用的lib,其簡化了D-Bus的開發難度。最基础的是 C,有官方提供的参考代码,也有 Java、Python等,每种语言的实现被称为 D-Bus Binding。

[Protocol] WebRTC

 

WebRTC

[Protocol] AirPlay 原理

基本概念

AirPlay 是一個用來與 Apple TV溝通的協定,可用 iOS 設備或 itunes將資料交給 Apple TV進行播放,其實作使用 Multicast DNS, HTTP, RTSP, RTP or NTP 等協定,並加上些許的修改


Unofficial AirPlay Protocol Specification

Monday, September 28, 2020

Protocol Index

 MQTT

事件匯流排的 RabbitMQ

RabbitMQ 起手式 (一) 安裝

RabbitMQ (二) 概念

RabbitMQ (三) Fanout 交換器

WebRTC

Avahi

D-Bus

AirPlay 原理

找尋設備的方法

    1. WS-Discovery (Web Services Dynamic Discovery)

         透過 multicast 傳送 SOAP/XML

    2. SSDP

         屬於UPNP服務的一部分。作法是透過multicast送出http封包 (M-Search),支援SSDP的設備會回復設備資訊

    3. MDNS (Multicast Domain Name Service)

        屬於 Zero configuration 的一部分,當區域網路內不存在 DNS 伺服器時,可以透過此種方式找尋想要的服務。 其技術原理是透過 IP multicast over User Datagram Protocol (UDP),進行 Host Discovery 或是 Service Discovery

    4. ADwin Config

        用來偵測或設定ADwin公司的設備。

    5. Bonjour

        Apple公司用來找尋設備的協議,只能夠在一個子網內運行。主要支援三種運作。

        1. Publication (advertising a service)

           1.1 設備配置給自己一個 link-local IP address,例如:169.254.150.84,接著在網路上廣播尋找此位置(透過ARP),若沒有收到回應,表示此IP尚未有人使用,設備便可以將此IP當成自己的IP位置。

            1.2 接著透過同樣的方式,設定設備的Domain name,例如:eds-musicbox.local.  ,同時設定Domain name時,可以設定 service record,註明將會提供的無誤,例如:Ed’s Party Mix._music._tcp.local.

        2. Discovery (browsing for available services)

            2.1 要找尋某個特別設備時,可使用 MDNS 定義的 standard query,詢問網路上是否在區域網路上存在一個使用TCP的音樂設備,例如:詢問  ._music._tcp.local.,如此便可以找到步驟 publication 中的設備

        3. Resolution (translating service names to addresses and port numbers for use)

            3.1 將查詢到的  name " Ed’s Party Mix._music._tcp.local." 轉換為 IP address + port number

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能