20190909

在有 wireless switch 特性的 Thin AP 無線網路服務中, 使用 IoT 裝置的注意事項

今天跟朋友吃漢堡王的時候聊到 IoT 裝置對 Thin-AP 的使用問題,因為很多 Thin-AP 架構為了效能最佳化的需求,所以原始的設計是把廣播封包全部攔截,控制器只針對需要的廣播風暴做轉送工作,就邏輯上來看就像是乙太網路交換器一樣。

通常要解決這樣的問題最快的方式是在特定範圍使用消費型的無線基地台做單點配置就可以解決,另外一個角度來說,IoT 裝置在有限的記憶體跟處理器規格設計下,針對單一 ESSID 有多重 BSSID 的狀況也是很極端,要不是死黏著一個 BSSID 不放,要不是 BSSID 一直輪跳網路一直瞬間斷線,這個時候可能的解決方案大概是找一個支援 wireless client 或者 wireless bridge 的基地台做乙太網路連線,這樣的問題可能相對簡單一點。

理論上基地台如果支援 wireless client 或者 wireless bridge 的話問題應該不會太大,只是這樣的東西可能比 IoT 裝置貴多了,入門款的無線網路基地台可能還比較便宜一點。

大部分的 IoT 裝置基本上都透過類似 Zero-configuration networking 的技術,像是 uPnP,SSDP, Bonjour,mDNS 等等。共同的特色在於利用廣播封包對區域網路內部的裝置告知自己的 IP,Hoetname,Service 等等。但是這樣也產生了很多問題。廣播封包會對區域網路的封包交換效能產生極大的影響,所以當電腦超過一台交換器實體連接埠數量的時候,就要開始做實體網路拓樸分割,避免廣播封包的數量太多變成廣播封包風暴,這個是有線網路連接的狀態。

同樣的問題在無線網路發生的時候,會變得非常嚴重,因為無線網路在同一個頻道範圍上面等於是單一一條網路線,跟有線網路交換器的每個連接埠是獨立的頻寬不同,所以在無線網路使用的時候,如果要同時間服務很多裝置,無線網路控制器必須要有效率地去判斷什麼封包需要被轉送,所以在無線網路控制器的設計上就會有一個需要被轉送的封包或者服務設定功能,在 Cisco WLC 控制器的設計而言,相關的功能就被稱之為 mDNS Snooping,WLC 會檢查所有 mDNS 相關服務的封包,然後針對管理者的設定去記錄特定的 mDNS 紀錄,再轉送到指定的無線網路介面上,所以一般有 mDNS Snooping 的設備通常也有 mDNS Proxy 的功能,在所有監聽 mDNS 的介面上面記錄並轉送 mDNS 的紀錄。

如果沒有設備支援大量 mDNS 監聽紀錄轉送功能怎麼辦,這個問題我也想過,這個時候就 GOOGLE,我就找到了一個專案叫做 Cluster,透過 gRPC 跟 mDNS 服務的組合,加上主從式架構做出一個監聽所有子網路並且共同維護同一份 mDNS 項目列表的分散式 mDNS ,如果你有需要在為了網路效能做子網路分割跟 mDNS 服務之間並存的狀況下維運你的基礎架構,我相信這個工具可以解決你不少問題。

Cluster
https://github.com/bah2830/cluster/blob/master/README.md
Controller node cluster management using gRPC and mDNS service discovery. Each node will watch for mDNS entries on the network. When the controller entry is found it will send a checkin message with it's details to the controllers gRPC service. From then on the controller and communicate with all nodes that have checked in.


Bonjour is Apple’s service discovery protocol which locates devices such as printers, other computers, and the services that those devices offer on a local network using multicast Domain Name System (mDNS) service records.
https://www.cisco.com/c/en/us/td/docs/wireless/technology/bonjour/7-5/Bonjour_Gateway_Phase-2_WLC_software_release_7-5.html


沒有留言: