連線裝置是物聯網系統設計的關鍵環節,需要考量裝置與雲端或其他裝置間的通訊方式。直接連線雲端適用於具備乙太網路或 Wi-Fi 功能的裝置,但需要處理網路協定如 TCP/UDP 的整合。對於資源受限的裝置,透過閘道器連線則更為常見,閘道器負責資料聚合、過濾及裝置程式碼更新。Mesh 網路提供裝置間的彈性通訊,但也需考量其複雜性和能耗。無論採用哪種連線方式,都需要定義清晰的通訊介面和資料傳輸格式,並將安全性納入設計考量。
建立連線裝置
當您有物聯網(IoT)裝置、無處不在的感測器、分散式系統或邊緣計算時,您的裝置將連線到更廣泛的世界。這可能是一個封閉的系統或整個網際網路。不論哪種情況,突然會出現許多新的問題和功能。雖然您的連線機制對系統設計很重要,但是一旦連線,您就需要考慮如何將資料傳送到裝置和從裝置中取出資料、遠端更新程式碼以及監控整個系統的健康狀態。當然,別忘了安全性。
遠端連線
從您的處理器的角度來看,雲端伺服器或主機電腦只是另一個要交談的物體,就像任何其他外圍裝置一樣。當然,主機可能會干預您的裝置,例如更改您的處理器程式碼或指示它將馬達移到不同的位置。但所有這些都只是數位通訊。事實上,您的處理器已經透過數位介面傳送位元組到任何地方,都有自己的處理器。您透過SPI控制的馬達和您透過I2C讀取的濕度感應器都有自己的處理器。對於這些處理器,您的處理器就是一個主機電腦。
就像您的每個外圍裝置都有檔案化的介面,您系統與其主機的介面也應該是合理地檔案化(即使您控制了兩邊)。建立檔案化的介面將允許兩個系統獨立地進行變化(只要介面保持不變)。至於實作,第三章中的命令解譯器是個好的起點。
隨著更多的日常物品進入網路世界,我們建立了對環境的詳細影像。無論是當您進入雜貨店時,冰箱會將購物清單傳送到您的電話,還是散佈在森林中監測火災的小型感應器,我們都在建立分散式感應器網路。提高感應器的智慧能力,使每個感應器都能更好地處理其特定位置的不規則性,從而使整個網路更加強健。資訊可以傳回主機進行整合和處理(例如,森林火災感應器),或由每個部分貢獻其知識而無需主機(例如,雜貨)。感應器網路的強度在於,每個元素共同構建了比整體更大的資訊。然而,這也是其弱點;如果系統無法通訊,它就會變得Much較少。
直接連線
最容易理解的是直接將裝置連線到雲端,如圖10-1頂部所示。
直接連線可以使用乙太網路(Ethernet)或Wi-Fi。由於乙太網路很複雜,因此通常意味著需要一個作業系統。由於本文不假設您具備嵌入式作業系統,因此我不會在此花太多時間。但是,隨著系統變得更加智慧,乙太網路變得更加重要。乙太網路標準化的基礎設施使其易於整合到大型系統中。雖然乙太網路是資料鏈路層,但它意味著還會有一個網路層和傳輸層,因此您的軟體將與網路協定進行互動,通常是TCP或UDP(使用者資料包協定)。
透過閘道連線
網路感應器可能不會直接連線到雲端,而是選擇透過閘道,即某個中間裝置,聚合和過濾資料。對於我的目的,我將稱之為智慧手機。智慧手機通常比我們構建的嵌入式裝置更通用。雖然智慧手機可能透過BLE(低功耗藍牙)連線到相機或步計,但這些裝置不需要彼此知道。相反,智慧手機有一個專門為裝置開發的應用程式,作為裝置和雲端服務之間的中介。
在開發閘道時,不要忘記在閘道上執行的軟體!無論它是手機應用程式還是小型Linux系統,這些軟體都是整個系統的黏合劑。如果它很弱,整個系統就會當機。
閘道通常會處理一些通訊困難,例如確保資料傳輸正確並幫助裝置更新程式碼。但是,這意味著您需要定義裝置與閘道之間的通訊方式。即使在像BLE GATTs這樣結構良好的系統中,也仍然需要確定哪些資料需要傳送到雲端。有些資料需要傳送給系統使用者,但總會有一些資料您需要用於裝置的健康狀態。
建立連線裝置
在建立連線裝置的過程中,我們需要考慮多種網路拓撲和通訊協定。其中,Mesh網路是一種常見的選擇,特別是在裝置之間需要建立複雜網路拓撲的情況下。
Mesh網路
Mesh網路是一種網路拓撲,其中每個節點(裝置)都可以與其他節點直接通訊。這種網路可以自動組態和重組態,以適應裝置的移動或斷開連線。Mesh網路的一些優點包括:
- 靈活性:Mesh網路可以適應不同的網路拓撲和裝置組態。
- 容錯性:Mesh網路可以在裝置斷開連線或故障的情況下保持通訊。
- 可擴充套件性:Mesh網路可以輕鬆擴充套件到成千上萬的裝置。
然而,Mesh網路也有一些挑戰,例如:
- 複雜性:Mesh網路的組態和管理可能很複雜。
- 能耗:Mesh網路中的裝置可能需要更多的能耗來維持通訊。
網路協定
在建立連線裝置的過程中,我們需要選擇合適的網路協定。一些常見的網路協定包括:
- BLE(Bluetooth Low Energy):BLE是一種低功耗的無線通訊協定,適合於低速率的通訊。
- Wi-Fi:Wi-Fi是一種高速率的無線通訊協定,適合於高速率的通訊。
- Mesh協定:Mesh協定是一種專門為Mesh網路設計的協定,例如Zigbee、Thread等。
資料序列化
在通訊過程中,我們需要將資料序列化,以便於傳輸和接收。資料序列化是指將資料轉換為一個連續的位元組流,以便於傳輸和儲存。一些常見的資料序列化格式包括:
- JSON(JavaScript Object Notation):JSON是一種輕量級的資料交換格式,易於閱讀和書寫。
- XML(Extensible Markup Language):XML是一種標記語言,用於表示資料結構和內容。
- TLV(Type-Length-Value):TLV是一種簡單的資料序列化格式,用於表示資料型別、長度和值。
校驗和
在通訊過程中,我們需要確保資料的完整性和正確性。校驗和是一種常見的方法,用於檢查資料是否被修改或損壞。一些常見的校驗和演算法包括:
- CRC(Cyclic Redundancy Check):CRC是一種迴圈冗餘校驗演算法,用於檢查資料是否被修改或損壞。
- Checksum:Checksum是一種簡單的校驗和演算法,用於檢查資料是否被修改或損壞。
加密和認證
在通訊過程中,我們需要確保資料的安全性和認證性。加密是一種常見的方法,用於保護資料不被未經授權的存取。認證是一種常見的方法,用於驗證通訊物件的身份。一些常見的加密和認證演算法包括:
- AES(Advanced Encryption Standard):AES是一種高階別的加密演算法,用於保護資料不被未經授權的存取。
- RSA(Rivest-Shamir-Adleman):RSA是一種公鑰加密演算法,用於保護資料不被未經授權的存取。
在結束之前,我們需要確保通訊協定的版本號是否正確,以及是否需要進行加密和認證。這些都是建立連線裝置的重要步驟,需要仔細考慮和實施。
安全性與韌性設計
在設計連線裝置時,安全性和韌性是非常重要的考量。安全性不僅僅是防止未經授權的存取,還包括保護資料的完整性和保密性。韌性則是指系統在面臨攻擊或故障時能夠快速還原和維持正常運作的能力。
安全性挑戰
連線裝置面臨著許多安全性挑戰,包括:
- 資料加密:保護資料在傳輸和儲存時的安全。
- 身份驗證:確保只有授權的使用者才能存取裝置和資料。
- 存取控制:限制未經授權的存取和操作。
- 漏洞管理:發現和修復系統中的漏洞,以防止攻擊。
韌性設計
為了提高系統的韌性,需要考慮以下幾個方面:
- 冗餘設計:在系統中加入冗餘元件,以確保當某個元件失敗時,系統仍能正常運作。
- 錯誤檢測和修復:實作錯誤檢測和修復機制,以快速發現和修復系統中的錯誤。
- 安全更新:提供安全更新機制,以確保系統能夠及時更新和修復漏洞。
實作安全更新
為了實作安全更新,需要考慮以下幾個步驟:
- 建立安全更新機制:提供一個安全的更新機制,以確保更新包的完整性和真實性。
- 實作加密和解密:使用加密和解密技術,以保護更新包的安全。
- 驗證更新包:驗證更新包的完整性和真實性,以確保其來自可信任的源頭。
- 應用更新包:應用更新包到系統中,並確保其正確性和完整性。
深入剖析物聯網裝置連線的底層架構後,我們發現從直接連線雲端到透過閘道器間接連線,各種方案各有其優劣。直接連線雖然簡潔,但對於資源受限的嵌入式裝置來說,處理複雜的網路協定如TCP/IP會是一大負擔。閘道器方案則能有效減輕裝置端的負擔,並提供資料聚合、過濾等額外功能,但也引入了閘道器本身的安全性與穩定性問題。此外,Mesh 網路的彈性與容錯能力使其在特定應用場景中極具優勢,但也需考量其組態複雜度和能耗。
權衡各種連線方案的效能與複雜度,我們必須根據實際應用需求做出最佳選擇。例如,對於低功耗、低資料量的感測器網路,BLE搭配閘道器或 Mesh 網路會是較理想的方案。而對於需要高頻寬、低延遲的應用,則可能需要直接連線至雲端,並在裝置端搭載更強大的處理器和網路模組。同時,無論選擇哪種方案,資料序列化、校驗和、加密和認證等機制都是確保資料安全性和完整性的關鍵環節,不容忽視。
展望未來,隨著邊緣運算的興起,更多的運算和資料處理將下沉到閘道器或裝置端,這將對連線方案提出更高的要求。我們預見低功耗廣域網路(LPWAN)技術將扮演更重要的角色,並與 5G、Wi-Fi 6 等新一代無線技術融合,形成更強大、更靈活的物聯網連線生態。
玄貓認為,在設計連線裝置時,除了關注連線技術本身,更需將安全性與韌性設計融入系統架構的每個環節,才能打造真正安全可靠的物聯網應用。對於資源有限的團隊,優先強化閘道器端的安全防護,並逐步提升裝置端的安全能力,將是務實且有效的策略。