自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

蘋果設(shè)備是如何互相打招呼的——趣談Bonjour協(xié)議

網(wǎng)絡(luò)
而大多數(shù)情況下,設(shè)備的IP地址是通過(guò)動(dòng)態(tài)分配的DHCP協(xié)議獲取的。那么,設(shè)備之間是如何互相發(fā)現(xiàn)的呢?這就是Bonjour協(xié)議大顯身手的時(shí)候了!

Labs 導(dǎo)讀

使用蘋果全家桶的同學(xué)們,肯定有過(guò)在多個(gè)設(shè)備之間無(wú)縫銜接的體驗(yàn),比如隔空投送照片、文件,AirPlay電視投屏,還有自動(dòng)共享熱點(diǎn)密碼,Apple Watch解鎖Mac和iPhone,連續(xù)互通的相機(jī)/速繪/標(biāo)記等等。它們的基本原理是通過(guò)Wi-Fi或藍(lán)牙,在登錄同一iCloud的設(shè)備之間快速同步數(shù)據(jù)。

問(wèn)題來(lái)了,在局域網(wǎng)中設(shè)備之間要想通信,得知道對(duì)方的IP地址。以AirPlay投屏為例,第一步就是需要iPhone等終端設(shè)備找到局域網(wǎng)中的目標(biāo)投屏設(shè)備(即電視),才能將音視頻、圖片或者屏幕內(nèi)容投射到電視上。

而大多數(shù)情況下,設(shè)備的IP地址是通過(guò)動(dòng)態(tài)分配的DHCP協(xié)議獲取的。那么,設(shè)備之間是如何互相發(fā)現(xiàn)的呢?這就是Bonjour協(xié)議大顯身手的時(shí)候了!

Part 01 簡(jiǎn)介

Bonjour是蘋果公司實(shí)現(xiàn)的一套零配置(zero-configuration)網(wǎng)絡(luò)協(xié)議。"Bonjour"這個(gè)詞源于法語(yǔ),意為“你好”或“早上好”。該協(xié)議旨在簡(jiǎn)化網(wǎng)絡(luò)配置,讓設(shè)備之間在局域網(wǎng)內(nèi)輕松地相互發(fā)現(xiàn)和交流,就像人們打招呼一樣。

通過(guò)Bonjour,用戶不需要手動(dòng)配置IP地址或設(shè)備名稱,設(shè)備或應(yīng)用程序可以自動(dòng)檢測(cè)所需的服務(wù)或其他可交互的應(yīng)用程序,實(shí)現(xiàn)自動(dòng)連接、通信和數(shù)據(jù)交換,無(wú)需用戶干預(yù)。

圖1 局域網(wǎng)中設(shè)備的互聯(lián)互通圖1 局域網(wǎng)中設(shè)備的互聯(lián)互通


Part 02 工作原理

2.1 Bonjour協(xié)議基礎(chǔ)

Bonjour主要基于兩個(gè)標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議:mDNS(多播DNS)和DNS-SD(DNS服務(wù)發(fā)現(xiàn)),在標(biāo)準(zhǔn)DNS框架上進(jìn)行構(gòu)建擴(kuò)展。

2.1.1 mDNS協(xié)議

mDNS協(xié)議基于UDP/IP,使用多播地址224.0.0.251和5353端口進(jìn)行通信。mDNS協(xié)議通過(guò)多播查詢和響應(yīng),實(shí)現(xiàn)了局域網(wǎng)內(nèi)的主機(jī)名解析,而無(wú)需配置DNS服務(wù)器。mDNS協(xié)議數(shù)據(jù)包格式與標(biāo)準(zhǔn)的DNS協(xié)議一致,支持標(biāo)準(zhǔn)的DNS查詢記錄類型的同時(shí),對(duì)其中的部分概念作了擴(kuò)展。

其中,資源記錄用于局域網(wǎng)中各個(gè)主機(jī)之間交換消息內(nèi)容,包含以下幾個(gè)關(guān)鍵字段:

NAME:表示消息內(nèi)容

TYPE:表示消息內(nèi)容的類型

進(jìn)一步的,根據(jù)TYPE類型,可以定義以下幾種關(guān)鍵DNS記錄格式:

A 記錄:主機(jī)名稱和IPV4之間的對(duì)應(yīng)關(guān)系

AAAA 記錄:主機(jī)名稱和IPV6之間的對(duì)應(yīng)關(guān)系

PTR記錄:記錄了服務(wù)類型與服務(wù)實(shí)例名稱之間的對(duì)應(yīng)關(guān)系,一般用在查詢和發(fā)現(xiàn)服務(wù)實(shí)例

SRV記錄:記錄了服務(wù)實(shí)例的主機(jī)名稱和端口信息

TXT記錄:提供服務(wù)的額外描述文本,以“key = value”的格式記錄,如mac地址、設(shè)備id等

ANY 記錄:任意類型,一般用于查詢中

2.1.2 DNS-SD協(xié)議

mDNS協(xié)議定義了消息的基本結(jié)構(gòu)和消息的傳輸過(guò)程。在此基礎(chǔ)上,DNS-SD協(xié)議進(jìn)一步明確定義了服務(wù)名稱、服務(wù)實(shí)例名、域名長(zhǎng)度/順序等具體要素,使用PTR、SRV和TXT三種資源記錄來(lái)完整描述一個(gè)服務(wù),規(guī)定了簡(jiǎn)便的服務(wù)發(fā)現(xiàn)和描述方法。

其中,服務(wù)名稱通常由“_”下劃線和協(xié)議名稱組合而成,并在域名結(jié)尾使用 "local" 作為固定標(biāo)識(shí),格式為<服務(wù)類型>.<域名>.local,如:_printer._tcp.local、_airplay._tcp.local

服務(wù)實(shí)例則通過(guò)其實(shí)例名進(jìn)行標(biāo)識(shí),格式為<服務(wù)實(shí)例>.<服務(wù)類型>.<域名>,如:PrintsAlot._printer._tcp.local

MyMac._airplay._tcp.local

Bonjour協(xié)議通過(guò)上述兩種協(xié)議實(shí)現(xiàn)了局域網(wǎng)內(nèi)的主機(jī)名解析和服務(wù)注冊(cè)與發(fā)現(xiàn),為零配置網(wǎng)絡(luò)提供基礎(chǔ)。

2.2 Bonjour服務(wù)發(fā)現(xiàn)流程

要弄懂Bonjour的工作原理,我們只需思考上述mDNS協(xié)議和DNS-SD協(xié)議,是如何組合起來(lái)進(jìn)行交互的即可。

Bonjour協(xié)議可以看作是mDNS和DNS-SD的有機(jī)結(jié)合。具體來(lái)說(shuō),DNS-SD協(xié)議通過(guò)PTR記錄指向服務(wù)實(shí)例,并通過(guò)SRV記錄提供實(shí)例的主機(jī)名和端口;拿到這些信息后,只需要通過(guò)mDNS解析主機(jī)名獲取IP地址,就可完成從服務(wù)名稱到IP地址映射關(guān)系,從而實(shí)現(xiàn)端到端的連接。需要注意的是,DNS-SD發(fā)布和查詢的這些記錄信息,都是依托在mDNS定義的多播組和端口號(hào)上進(jìn)行傳輸?shù)摹?/p>

接下來(lái)我們舉一個(gè)具體例子來(lái)說(shuō)明,整個(gè)Bonjour服務(wù)發(fā)現(xiàn)過(guò)程是如何完成的。

假設(shè)局域網(wǎng)中某個(gè)ipad設(shè)備想要發(fā)布音樂(lè)共享服務(wù),主要包括以下三個(gè)步驟:

2.2.1 服務(wù)發(fā)布(Publication)

首先該設(shè)備會(huì)隨機(jī)選擇一個(gè)可用的鏈接本地IP地址,如:192.168.1.23,并向局域網(wǎng)中發(fā)布;第二步,它將啟動(dòng)mDNS響應(yīng)器,并請(qǐng)求主機(jī)名 my-ipad.local.,確認(rèn)沒(méi)有沖突后使用該主機(jī)名;接著該設(shè)備在TCP端口1010上啟動(dòng)音樂(lè)共享服務(wù);最后發(fā)布該音樂(lè)服務(wù),并通過(guò)mDNS多播創(chuàng)建dns記錄:

SRV記錄:內(nèi)容為服務(wù)實(shí)例名“小李的音樂(lè)服務(wù)._music._tcp.local.”,并指向主機(jī)名my-ipad.local.上的TCP服務(wù)端口1010

PTR記錄:內(nèi)容為服務(wù)名稱“_music._tcp.local.”,并指向服務(wù)實(shí)例名稱“小李的音樂(lè)服務(wù)._music._tcp.local.”

TXT記錄:提供設(shè)備的額外信息,如MAC地址“MAC=D3:AA:E2:30:B0:E1”

當(dāng)局域網(wǎng)內(nèi)的其他設(shè)備接收后,會(huì)解析并緩存這些記錄。

圖2 服務(wù)發(fā)布流程示例圖2 服務(wù)發(fā)布流程示例


2.2.2 服務(wù)發(fā)現(xiàn)(Discovery)

當(dāng)某個(gè)客戶端應(yīng)用需要該音樂(lè)共享服務(wù)時(shí),針對(duì)_music._tcp類型構(gòu)造服務(wù)查詢報(bào)文,通過(guò)mDNS多播查詢請(qǐng)求到整個(gè)局域網(wǎng);可提供該服務(wù)的設(shè)備收到查詢請(qǐng)求后,會(huì)用一個(gè)PTR記錄進(jìn)行響應(yīng),這個(gè)響應(yīng)記錄包含了服務(wù)實(shí)例名“小李的音樂(lè)服務(wù)._music._tcp.local.”;客戶端應(yīng)用便可以從PTR記錄中提取出服務(wù)實(shí)例名稱,并將其添加服務(wù)器列表中。

圖3 服務(wù)發(fā)現(xiàn)流程示例圖3 服務(wù)發(fā)現(xiàn)流程示例

2.2.3 服務(wù)解析(Resolution)

服務(wù)解析在完成服務(wù)發(fā)現(xiàn)后進(jìn)行的。應(yīng)用程序選擇服務(wù)實(shí)例的名稱,并向局域網(wǎng)組播查詢對(duì)應(yīng)的SRV記錄;服務(wù)提供方響應(yīng)后,返回該服務(wù)實(shí)例當(dāng)前的主機(jī)名和端口號(hào);應(yīng)用程序拿到主機(jī)名后,再次發(fā)送多播mDNS查詢請(qǐng)求,解析出主機(jī)名對(duì)應(yīng)的IP地址。最后,應(yīng)用程序根據(jù)獲取的IP地址和端口號(hào),與服務(wù)實(shí)例建立連接,完成解析。

圖4 服務(wù)解析流程示例圖4 服務(wù)解析流程示例

至此,整個(gè)音樂(lè)共享服務(wù)的自動(dòng)注冊(cè)與發(fā)現(xiàn)的流程便完成了,全程高效便捷,不需要人工參與。通過(guò)建立好的網(wǎng)絡(luò)通道,客戶端設(shè)備便可以瀏覽并播放服務(wù)端的相關(guān)音樂(lè)資源了。

Part 03 結(jié)語(yǔ)

經(jīng)過(guò)多年發(fā)展,Bonjour已經(jīng)成為Apple等平臺(tái)的標(biāo)準(zhǔn)服務(wù),它為零配置網(wǎng)絡(luò)提供了一個(gè)開(kāi)放、實(shí)用、高效的解決方案。Bonjour基于mDNS和DNS-SD協(xié)議,使其與現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)設(shè)施高度兼容,已經(jīng)廣泛應(yīng)用到了個(gè)人、企業(yè)網(wǎng)絡(luò)及IoT設(shè)備中,大幅簡(jiǎn)化了網(wǎng)絡(luò)配置和管理。未來(lái),隨著智能硬件業(yè)務(wù)的不斷增長(zhǎng),相關(guān)技術(shù)在網(wǎng)絡(luò)互聯(lián)互通方面還具有廣闊的應(yīng)用和發(fā)展前景。

??參考文獻(xiàn)

[1] Apple. Developer Resources - Bonjour [EB/OL]. (2023)[2023-07-21]. https://developer.apple.com/bonjour/.

[2] 吳躍前. 局域網(wǎng)設(shè)備發(fā)現(xiàn)之Bonjour協(xié)議[EB/OL]. (2016-09-28)[2023-07-21]. https://blog.csdn.net/yueqian_scut/article/details/52694411.

[3] yuweifeng. 網(wǎng)絡(luò)協(xié)議之mDNS20170217[EB/OL]. (2017-02-17)[2023-07-21]. https://www.cnblogs.com/yuweifeng/p/6409182.html.

責(zé)任編輯:龐桂玉 來(lái)源: 移動(dòng)Labs
相關(guān)推薦

2019-09-10 09:02:38

WindowsWindows 10電腦

2018-04-15 16:01:12

Windows 10微軟windows更新

2012-09-11 10:45:45

2021-08-03 14:29:30

ARPANET互聯(lián)網(wǎng)協(xié)議TCP

2010-08-02 16:56:03

ICMP協(xié)議

2011-09-30 09:28:40

蘋果謠言

2023-01-31 14:41:53

甲骨文Java

2018-03-29 15:37:28

蘋果教育iPad

2019-04-08 15:11:12

HTTP協(xié)議Web

2023-05-17 15:36:57

2024-12-18 14:10:33

2010-06-08 16:55:46

CANopen總線協(xié)議

2013-10-08 11:19:34

2013-01-22 17:06:55

蘋果DNAiPod之父

2011-06-14 15:17:11

BonjourCocoa TouchiOS

2011-10-27 10:22:36

蘋果設(shè)備綁定營(yíng)銷

2020-04-23 09:11:09

網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)

2020-09-16 09:08:49

訂單微服務(wù)架構(gòu)

2020-04-20 21:22:50

網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)協(xié)議計(jì)算機(jī)網(wǎng)絡(luò)

2013-07-12 14:09:16

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)