分析/驗(yàn)證對(duì)比常見(jiàn)局域網(wǎng)服務(wù)發(fā)現(xiàn)協(xié)議在Windows/Linux/Mac等不同系統(tǒng)下的支持和表現(xiàn)
網(wǎng)絡(luò)鄰居發(fā)現(xiàn)協(xié)議大比拼,Windows/Linux/Mac系統(tǒng)局域網(wǎng)服務(wù)發(fā)現(xiàn)協(xié)議之-八大金剛
在使用不同系統(tǒng)的智能硬件時(shí),如常見(jiàn)的樹(shù)莓派/Openwrt路由器/Debian/Fedora/Windows/Mac等系統(tǒng)是,系統(tǒng)間相互發(fā)現(xiàn)以及
網(wǎng)絡(luò)共享本應(yīng)是系統(tǒng)的基礎(chǔ)服務(wù),無(wú)需用戶過(guò)多參與.不過(guò)現(xiàn)實(shí)旺旺和理想之間的差距讓我們驚訝,不同系統(tǒng)相互之間的發(fā)現(xiàn)以及
共享并沒(méi)有那么輕松.
開(kāi)發(fā)的硬件設(shè)備無(wú)法在常見(jiàn)系統(tǒng)的網(wǎng)絡(luò)鄰居正確的現(xiàn)實(shí)出來(lái),實(shí)在是很喪氣的事情.
那么,就系統(tǒng)來(lái)看看局域網(wǎng)服務(wù)發(fā)現(xiàn)協(xié)議在不同系統(tǒng)上的支持及表現(xiàn).
我的服務(wù)器啊,你在哪里
想要訪問(wèn)局域網(wǎng)網(wǎng)絡(luò)里面的設(shè)備,遠(yuǎn)沒(méi)有應(yīng)有的輕松. 每次新裝系統(tǒng)或者設(shè)備入網(wǎng),總是有這樣或者那樣的問(wèn)題,哎,我的服務(wù)器啊,你在哪里.
先看看最簡(jiǎn)單和常用的ping工具,這么簡(jiǎn)單和實(shí)用的工具,簡(jiǎn)單的搜索竟然有 三千八百萬(wàn) 條記錄

大名鼎鼎的樹(shù)莓派,用起來(lái)想來(lái)應(yīng)該更簡(jiǎn)單一些,可事實(shí)往往觸目驚心,僅僅是ping通的問(wèn)題,也有三百萬(wàn)的記錄

![pdnas-raspberry-pi-ping]](https://upload-images.jianshu.io/upload_images/14465021-53d02e74e1936079.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
再來(lái)看看最常見(jiàn)的文件共享服務(wù),也有 兩千萬(wàn) 之巨

這都2120年了,為什么這么常見(jiàn)的服務(wù)還有這么多為問(wèn)題呢.
干貨放前面 各系統(tǒng)網(wǎng)絡(luò)鄰居正常工作的協(xié)議匯總:
| OS | Windows | Linux | Macos |
|---|---|---|---|
| 網(wǎng)絡(luò)鄰居顯示 | UPnP + WS-Discovery | mDNS + SMB | mDNS(服務(wù)器側(cè)特別配置) + SMB |
| 網(wǎng)絡(luò)鄰居共享 | WS-Discovery + SMB | mDNS + SMB | mDNS(服務(wù)器側(cè)特別配置) + SMB |
Linux和Macos比較相似,但是實(shí)現(xiàn)起來(lái)還是有明顯的差異,下文會(huì)具體描述.
Windows
Windows一如既往的走在自己的路上,網(wǎng)絡(luò)鄰居發(fā)現(xiàn)協(xié)議自搞一套.
Windows 10的WS-Discovery
Web Services Dynamic Discovery (WS-Discovery) WS-Discovery
下圖是此協(xié)議的抓包

此協(xié)議和UPnP極其相似,都是基于SSDP協(xié)議衍生的XML表達(dá)的,如果不支持此協(xié)議,則無(wú)法在Windows10 的網(wǎng)絡(luò)鄰居里面顯示為PC,無(wú)法直接點(diǎn)擊訪問(wèn)共享.
支持此協(xié)議后,Windows10的網(wǎng)絡(luò)鄰居里面會(huì)在計(jì)算機(jī)類(lèi)型的里面顯示設(shè)備.

UPnP協(xié)議
UPnP 是早期路由器常用的協(xié)議,目前從不同系統(tǒng)的驗(yàn)證來(lái)看,僅有Windows默認(rèn)在文件瀏覽器里面支持,Ubuntu和MacOS都需要單獨(dú)配置或者應(yīng)用程序才能瀏覽.
這個(gè)協(xié)議目前各種路由器基本都能支持,不過(guò)其安全問(wèn)題頻出,作用并不明顯.
此協(xié)議在Windows系列里面基本都能支持,會(huì)在網(wǎng)絡(luò)鄰居里面顯示出設(shè)備的信息.

MacOS
mDNS協(xié)議
MAC整體表現(xiàn)和Linux比較接近,雙方使用的協(xié)議也是類(lèi)似,只是在細(xì)節(jié)處理上有些區(qū)別.
mDNS 協(xié)議本身應(yīng)用比較廣泛,MAC比較早就支持.在Mac新版本里面,網(wǎng)絡(luò)鄰居默認(rèn)可以發(fā)現(xiàn)mDNS設(shè)備.
因?yàn)闅v史原因,早期的AFP協(xié)議升級(jí)后已經(jīng)沒(méi)有開(kāi)源協(xié)議可以完美支持,因此使用avahi的mDNS服務(wù)時(shí),如果還使能了AFP業(yè)務(wù)的話,MAC會(huì)顯示為大問(wèn)號(hào).

使用配置好的服務(wù)文件,MAC可以正常顯示設(shè)備

在調(diào)試過(guò)程中,還看到了網(wǎng)絡(luò)鄰居顯示為PC的圖標(biāo),有知道顯示為這個(gè)圖標(biāo)的條件的小伙伴嗎?

SMB協(xié)議
Server Message Block SMB 是MS家
的協(xié)議,奇怪吧:<>
Samba是*nix系統(tǒng)上的一個(gè)SMB協(xié)議的實(shí)現(xiàn),是早期為了和Windows兼容文件共享而做的功能.目前MAC已經(jīng)全面放棄自己的AFP協(xié)議轉(zhuǎn)而投向SMB協(xié)議.
設(shè)備僅支持SMB協(xié)議而沒(méi)有mDSN協(xié)議輔助的話,MAC也可以識(shí)別此系統(tǒng),不過(guò)會(huì)顯示為超級(jí)古老的圖標(biāo).

Linux
mDNS
Ubuntu系統(tǒng)的網(wǎng)絡(luò)鄰居可以自動(dòng)發(fā)現(xiàn)mDNS服務(wù)并展示為不同的圖標(biāo). 在Ubuntu 20.04里面,除去圖標(biāo)的不同,還增加了每個(gè)服務(wù)的描述.

SMB
同樣的,Ubuntu系統(tǒng)天然支持SMB協(xié)議,但是SMB協(xié)議需要mDNS協(xié)議的支撐,否則無(wú)法顯示在網(wǎng)絡(luò)鄰居里面.

其他協(xié)議
除去前面流行并且工作的協(xié)議外,還有一些曾經(jīng)使用但是已經(jīng)廢棄或者即將廢棄的協(xié)議,在設(shè)備設(shè)計(jì)時(shí),如果考慮兼容性,也同時(shí)需要支持.
SSDP
SSDP是一個(gè)基礎(chǔ)協(xié)議,UPnP以及WS-Discovery 都是基于這個(gè)協(xié)議來(lái)實(shí)現(xiàn)的.
AFP
Apple Filing Protocol AFP
Apple家的私有協(xié)議,開(kāi)源有netatalk 實(shí)現(xiàn). AFP升級(jí)加密后,netatalk也不能和新版本的MAC兼容.
蘋(píng)果已經(jīng)全面投向SMB的懷抱,AFP基本上可以忽略了.
NetBIOS
Network Basic Input/Output System NetBIOS 這個(gè)是Windows 9x/Me/XP等早期系統(tǒng)支持的名稱解析協(xié)議,
類(lèi)似于mDNS,新的Windows 10已經(jīng)不建議支持此協(xié)議.
LLMNR
Link-Local Multicast Name Resolution LLMNR , 這個(gè)也是和mDNS競(jìng)爭(zhēng)的失敗者,主要聚焦于局域網(wǎng)的名稱解析,可以直接忽略了.