網絡鄰居發現協定大比拼,Windows/Linux/Mac系統區域網路服務發現協定之-八大金剛
在使用不同系統的智能硬體時,如常見的樹莓派/Openwrt路由器/Debian/Fedora/Windows/Mac等系統是,系統間互相發現以及
網絡共享本應是系統的基礎服務,無需使用者過多參與.不過現實旺旺和理想之間的差距讓我們驚訝,不同系統互相之間的發現以及
共享并沒有那麼輕松.
開發的硬體裝置無法在常見系統的網絡鄰居正确的現實出來,實在是很喪氣的事情.
那麼,就系統來看看區域網路服務發現協定在不同系統上的支援及表現.
我的伺服器啊,你在哪裡
想要通路區域網路網絡裡面的裝置,遠沒有應有的輕松. 每次新裝系統或者裝置入網,總是有這樣或者那樣的問題,哎,我的伺服器啊,你在哪裡.
先看看最簡單和常用的ping工具,這麼簡單和實用的工具,簡單的搜尋竟然有 三千八百萬 條記錄

大名鼎鼎的樹莓派,用起來想來應該更簡單一些,可事實往往觸目驚心,僅僅是ping通的問題,也有三百萬的記錄
![pdnas-raspberry-pi-ping]](
https://gitee.com/pdusb/pdboltblog/raw/master/pdnas/pdnas-web-console-admin.jpg)再來看看最常見的檔案共享服務,也有 兩千萬 之巨
這都2120年了,為什麼這麼常見的服務還有這麼多為問題呢.
幹貨放前面 各系統網絡鄰居正常工作的協定彙總:
OS | Windows | Linux | Macos |
---|---|---|---|
網絡鄰居顯示 | UPnP + WS-Discovery | mDNS + SMB | mDNS(伺服器側特别配置) + SMB |
網絡鄰居共享 | WS-Discovery + SMB |
Linux和Macos比較相似,但是實作起來還是有明顯的差異,下文會具體描述.
Windows一如既往的走在自己的路上,網絡鄰居發現協定自搞一套.
Windows 10的WS-Discovery
Web Services Dynamic Discovery (WS-Discovery)
WS-Discovery下圖是此協定的抓包
此協定和UPnP極其相似,都是基于SSDP協定衍生的XML表達的,如果不支援此協定,則無法在Windows10 的網絡鄰居裡面顯示為PC,無法直接點選通路共享.
支援此協定後,Windows10的網絡鄰居裡面會在計算機類型的裡面顯示裝置.
UPnP協定
UPnP是早期路由器常用的協定,目前從不同系統的驗證來看,僅有Windows預設在檔案浏覽器裡面支援,Ubuntu和MacOS都需要單獨配置或者應用程式才能浏覽.
這個協定目前各種路由器基本都能支援,不過其安全問題頻出,作用并不明顯.
此協定在Windows系列裡面基本都能支援,會在網絡鄰居裡面顯示出裝置的資訊.
MacOS
mDNS協定
MAC整體表現和Linux比較接近,雙方使用的協定也是類似,隻是在細節處理上有些差別.
mDNS協定本身應用比較廣泛,MAC比較早就支援.在Mac新版本裡面,網絡鄰居預設可以發現mDNS裝置.
因為曆史原因,早期的AFP協定更新後已經沒有開源協定可以完美支援,是以使用avahi的mDNS服務時,如果還使能了AFP業務的話,MAC會顯示為大問号.
使用配置好的服務檔案,MAC可以正常顯示裝置
在調試過程中,還看到了網絡鄰居顯示為PC的圖示,有知道顯示為這個圖示的條件的小夥伴嗎?
SMB協定
Server Message Block
SMB是MS家
的協定,奇怪吧:<>
Samba是*nix系統上的一個SMB協定的實作,是早期為了和Windows相容檔案共享而做的功能.目前MAC已經全面放棄自己的AFP協定轉而投向SMB協定.
裝置僅支援SMB協定而沒有mDSN協定輔助的話,MAC也可以識别此系統,不過會顯示為超級古老的圖示.
Ubuntu系統的網絡鄰居可以自動發現mDNS服務并展示為不同的圖示. 在Ubuntu 20.04裡面,除去圖示的不同,還增加了每個服務的描述.
同樣的,Ubuntu系統天然支援SMB協定,但是SMB協定需要mDNS協定的支撐,否則無法顯示在網絡鄰居裡面.
其他協定
除去前面流行并且工作的協定外,還有一些曾經使用但是已經廢棄或者即将廢棄的協定,在裝置設計時,如果考慮相容性,也同時需要支援.
SSDP
SSDP是一個基礎協定,UPnP以及WS-Discovery 都是基于這個協定來實作的.
AFP
Apple Filing Protocol
Apple家的私有協定,開源有
netatalk實作. AFP更新加密後,netatalk也不能和新版本的MAC相容.
蘋果已經全面投向SMB的懷抱,AFP基本上可以忽略了.
NetBIOS
Network Basic Input/Output System
這個是Windows 9x/Me/XP等早期系統支援的名稱解析協定,
類似于mDNS,新的Windows 10已經不建議支援此協定.
LLMNR
Link-Local Multicast Name Resolution
, 這個也是和mDNS競争的失敗者,主要聚焦于區域網路的名稱解析,可以直接忽略了.