Giải mã các khái niệm cốt lõi của Bluetooth mesh



Hello anh em đồng nhúng !

Trong thế giới công nghệ, Bluetooth không chỉ là một cái tên, mà đã trở thành chuẩn mực kết nối không thể thiếu, len lỏi vào mọi khía cạnh của đời sống hiện đại và các ứng dụng chuyên môn sâu của chúng ta.

Tuy nhiên, trước áp lực cạnh tranh gay gắt từ các chuẩn mạng lưới mạnh mẽ khác như Zigbee và Thread, sự ra đời của Bluetooth Mesh Networking là một bước đột phá chiến lược. Công nghệ này không chỉ kế thừa những ưu điểm vượt trội của Bluetooth Low Energy (BLE) về hiệu suất năng lượng, mà còn bổ sung thêm vô vàn tính năng mới mang tính cách mạng.

Đặc biệt, Bluetooth Mesh đã phá vỡ giới hạn kết nối truyền thống, tạo ra một kiến trúc nhiều-đến-nhiều thực thụ, cho phép mạng lưới mở rộng quy mô lên tới hàng vạn thiết bị chỉ trong một mạng duy nhất.




Vậy, với những tính năng và đặc điểm nổi bật nào mà Bluetooth Mesh có thể làm được điều phi thường đó? Anh em hãy cùng mình đi sâu khám phá ngay!

Trước khi vào bài, có 1 số điều anh em nên biết :

- Bluetooth SIG (Tổ chức phát triển Bluetooth) gọi tiêu chuẩn này là Bluetooth mesh 

- Tuy nhiên, Bluetooth mesh được xây dựng dựa trên BLE và có lấy lại nhiều khái niệm của BLE.

- Bluetooth mesh hỗ trợ tất cả các phiên bản của BLE (từ phiên bản Bluetooth 4.0, là phiên bản đầu tiên của đặc tả Bluetooth bao gồm BLE).

- Số lượng node (nút) tối đa trong một mạng lưới Bluetooth mesh (được định nghĩa trong phiên bản 1.0 của đặc tả) là 32.767 node.

- Số bước nhảy (là số node mà bản tin đi qua (hopes)) tối đa mà một thông điệp có thể di chuyển trong một mạng lưới Bluetooth mesh (được định nghĩa trong phiên bản 1.0) là 127 bước nhảy.




1. Mạng Bluetooth mesh là gì ?

Được ra mắt vào 7/2017 với mục tiêu bổ sung sức mạnh cho các mạng Bluetooth, với những phiên bản đầu của Bluetooth chỉ hỗ trợ 2 cấu trúc mạng (topo) như sau : 

- Một-đối-một (One-to-one): Khi hai thiết bị BLE được kết nối với nhau.

- Một-đối-nhiều (One-to-many): Khi các thiết bị BLE hoạt động độc quyền ở trạng thái Phát sóng (Broadcast state), ví dụ như các thiết bị Beacon.

BLE mesh đã giới thiệu một cấu trúc liên kết mới cho BLE: Nhiều-đối-nhiều (many-to-many), còn được gọi là mạng lưới (mesh) trong đó nhiều thiết bị có thể giao tiếp với nhiều thiết bị khác trong cùng một mạng. Điều này về cơ bản tạo ra các mạng thiết bị quy mô lớn (hàng trăm, hàng nghìn thiết bị).






3. Bluetooth mesh và các mạng mesh khác

  • Giao thức mạng : Bluetooth mesh không sử dụng IP , thay vào đó, nó được xây dựng trực tiếp trên nền tảng BLE.
  • Cơ chế truyền tin : Bluetooth mesh sử dụng kỹ thuật Quản lý Lũ lụt (Managed Flooding), khác biệt so với các kỹ thuật định tuyến (routing techniques) mà các giao thức khác thường sử dụng.
  • Bảo mật : Bluetooth mesh có các giao thức bảo mật mạnh mẽ hơn so với một số giao thức khác như Zigbee.

Ứng dụng phổ biến : Bluetooth mesh vẫn chủ yếu được sử dụng cho các ứng dụng tự động hóa tòa nhà, chẳng hạn như tự động hóa các thiết bị nhà thông minh và hệ thống chiếu sáng. Trong khi đó, các giao thức khác như Zigbee được sử dụng rộng rãi hơn cho các lĩnh vực như theo dõi tài sản (asset tracking) và tự động hóa công nghiệp.



4. Những khái niệm cần phải biết khi bắt đầu với Bluetooth mesh



1. Nút mạng ( Mesh Node)

Một nút (node) là 1 thiết bị đã gia nhập vào mạng Bluetooth mesh. Ngược lại, các thiết bị chưa phải là 1 phần của mạng được gọi là thiết bị chưa được cấu hình (unprovisioned devices). Một khi thiết bị chưa được cấu hình thì phải qua quá trình cấu hình (provisioning), nó sẽ thành 1 Mesh node.



2. Thành phần(Element)

Một nút có thể chứa nhiều phần riêng biệt có thể được điều khiển độc lập.

VD : Một công tắc thông minh có 4 kênh ( được gọi là node), thì mỗi kênh của công tắc có thể được gọi là 1 thành phần (element) có thể điều khiển độc lập mà không ảnh hưởng tới cái khác.




3. Mô hình (model)

Một model định nghĩa một phần hoặc toàn bộ chức năng của một element. Nói cách khác, model quy định xem element đó có thể làm gì (ví dụ: bật/tắt, điều chỉnh độ sáng, đo nhiệt độ).

Có ba loại model chính:


  • Server Model (Mô hình Máy chủ): Quản lý và lưu trữ các trạng thái của thiết bị chấp hành (ví dụ: trạng thái bật/tắt của công tắc).
  • Client Model (Mô hình Máy khách): Gửi yêu cầu để đọc hoặc thay đổi trạng thái trên Server Model (ví dụ: gateway gửi cho công tắc).
  • Control Model (Mô hình Điều khiển): Một mô hình phức tạp hơn có thể bao gồm cả logic của Server và Client, thường dùng để điều phối các model khác.

4. Trạng thái (State)

Các element có thể tồn tại ở nhiều điều kiện khác nhau, được biểu thị bằng các giá trị trạng thái (state).

Ví dụ, bật (on)tắt (off) là các trạng thái của một bóng đèn. Một sự thay đổi từ trạng thái này sang trạng thái khác được gọi là chuyển đổi trạng thái (state transition). Quá trình này có thể diễn ra tức thời, hoặc diễn ra từ từ trong một khoảng thời gian gọi là thời gian chuyển tiếp (transition period). Khi một trạng thái thay đổi, nó thường sẽ dẫn đến sự thay đổi trong hành vi của element đó.


5. Thuộc tính (Property)

Thuộc tính (property) bổ sung thêm ngữ cảnh (context) cho một giá trị trạng thái.

Ví dụ, một trạng thái có thể là giá trị nhiệt độ "25°C", nhưng thuộc tính sẽ định nghĩa rõ hơn đó là nhiệt độ trong nhà hay ngoài trời.

Có hai loại thuộc tính:


  • Thuộc tính nhà sản xuất (Manufacturer Property): Cung cấp quyền truy cập chỉ đọc (read-only).
  • Thuộc tính quản trị (Admin Property): Cung cấp quyền truy cập đọc-ghi (read-write).

6. Ngữ cảnh (Scene)

Một ngữ cảnh (scene) là một tập hợp các trạng thái đã được lưu trữ và được xác định bằng một số 16-bit duy nhất trong mạng mesh.

Ngữ cảnh cho phép bạn kích hoạt một hành động duy nhất để thiết lập trạng thái cho nhiều nút khác nhau. Ví dụ, ngữ cảnh "Xem phim" có thể đồng thời giảm độ sáng đèn phòng khách, tắt đèn bếp và bật đèn trang trí.

Các ngữ cảnh có thể được kích hoạt theo yêu cầu (on-demand) hoặc tại một thời điểm được chỉ định.


7. Tin nhắn (Message)

Tin nhắn (message) là cơ chế để thực thi các hoạt động (operation) trên các nút.

Nếu một nút cần gửi lệnh (ví dụ: "bật đèn") hoặc cần báo cáo trạng thái của mình (ví dụ: "nhiệt độ hiện tại là 22°C"), nó sẽ thực hiện điều đó thông qua một message. Một loại tin nhắn cụ thể sẽ đại diện cho một hoạt động trên một trạng thái hoặc một tập hợp nhiều giá trị trạng thái.


8. Địa chỉ (Address)

Các message trong mạng Bluetooth mesh phải được gửi đến và gửi đi từ một địa chỉ (address). Địa chỉ giúp xác định đích đến của tin nhắn, cho dù đó là một element cụ thể, một nhóm các element, hay tất cả các nút trong mạng



5. Kiến trúc của Bluetooth Mesh

Bluetooth Mesh được xây dựng trên nền tảng (on top of) Bluetooth LE (Bluetooth Low Energy).

Một điểm mấu chốt là: các thiết bị trong mạng Bluetooth mesh không kết nối với nhau như các thiết bị BLE truyền thống (ví dụ: điện thoại kết nối với tai nghe).

Thay vào đó, chúng sử dụng trạng thái Quảng bá (Advertising)Quét (Scanning) để chuyển tiếp tin nhắn cho nhau.


Các tầng kiến trúc


Hãy tưởng tượng kiến trúc của Bluetooth Mesh giống như việc gửi một gói hàng qua nhiều lớp dịch vụ. Chúng ta sẽ đi từ dưới lên trên:


  • Tầng Bluetooth Low Energy (BLE): Đây là phần móng của cả tòa nhà. Bluetooth mesh yêu cầu một bộ stack BLE đầy đủ chạy trên thiết bị. Nó sử dụng các kênh Quảng bá và Quét để gửi/nhận tin nhắn mesh.
  • Tầng Bearer (Tầng mạng): Tầng này định nghĩa "phương tiện" để vận chuyển các gói tin mesh (gọi là PDU).
  • Advertising Bearer: Sử dụng phương tiện là quảng bá (Advertising) - đây là phương thức chính, gửi cho mọi người.
  • GATT Bearer: Sử dụng "xe máy giao hàng riêng" - đây là phương thức đặc biệt dùng cho Proxy Node, cho phép các thiết bị như điện thoại (không hỗ trợ mesh) tương tác với mạng mesh thông qua kết nối GATT.
  • Tầng Lower Transport (Vận chuyển Thấp): Tầng này giống như "nhân viên bốc xếp" ở kho bao gồm các chức năng như :
  • Phân đoạn (Segmentation): Nếu gói hàng từ tầng trên (Upper Transport) quá lớn, tầng này sẽ chia nó thành nhiều thùng nhỏ.
  • Tái hợp (Reassembly): Khi nhận được các thùng nhỏ từ tầng Bearer, tầng này sẽ ráp chúng lại thành gói hàng lớn ban đầu.
  • Tầng Upper Transport (Vận chuyển Cao): Đây là "bộ phận an ninh" của kho.
  • Mã hóa (Encryption)Giải mã (Decryption): Đảm bảo gói hàng được niêm phong an toàn.
  • Xác thực (Authentication): Kiểm tra xem gói hàng có đúng là từ người gửi đáng tin cậy không.
  • Tin nhắn điều khiển: Xử lý các tin nhắn nội bộ quan trọng như Heartbeat (báo cáo sự sống) và Friendship (tin nhắn cho LPN).
  • Tầng Access (Tiếp cận): Tầng này định nghĩa cách ứng dụng sử dụng tầng vận chuyển, giống như "người điều phối" quyết định loại hàng hóa.
  • Nó định dạng dữ liệu ứng dụng.
  • Nó quyết định dùng "chìa khóa" nào (AppKey) để mã hóa/giải mã, đảm bảo chỉ các ứng dụng liên quan mới đọc được (ví dụ: ứng dụng "Ánh sáng" không đọc được tin nhắn của ứng dụng "An ninh").
  • Tầng Foundation Models (Mô hình Nền tảng): Đây là các model bắt buộc, liên quan đến "Quản lý mạng".
  • Chịu trách nhiệm về cấu hình mạng, quản lý các khóa bảo mật, v.v.
  • Tầng Models (Mô hình): Đây là "gói hàng" thực sự mà người dùng quan tâm. Tầng này triển khai các model cụ thể (ví dụ: Generic OnOff Server), bao gồm các hành vi, trạng thái (ví dụ: "Bật" hoặc "Tắt"), và cách các trạng thái liên kết với nhau.



6. Mạng Bluetooth mesh hoạt động như thế nào ?

Tiếp nối phần trước, chúng ta sẽ tìm hiểu sâu hơn về cách hoạt động của mạng mesh: cách thức các tin nhắn được gửi đi, được tối ưu hóa và cách mạng lưới hỗ trợ các thiết bị tiết kiệm năng lượng.


1. Mô hình Publish-Subscribe (Xuất bản - Đăng ký)

Cách thức trao đổi tin nhắn trong mạng Bluetooth mesh là thông qua mô hình Publish-Subscribe (Xuất bản - Đăng ký).


  • Publishing (Xuất bản): Là hành động gửi một tin nhắn.
  • Subscribing (Đăng ký): Là một cấu hình cho phép các element "lắng nghe" và xử lý các tin nhắn được gửi đến những địa chỉ cụ thể mà chúng quan tâm.

Thông thường, tin nhắn được gửi đến các địa chỉ nhóm (group addresses) hoặc địa chỉ ảo (virtual addresses), thay vì gửi đến một nút riêng lẻ.


2. Các loại tin nhắn trong Bluetooth Mesh

Có ba loại tin nhắn chính trong Bluetooth mesh, mỗi loại được định nghĩa bằng một opcode (mã hoạt động) duy nhất:


  • Tin nhắn GET: Là tin nhắn dùng để yêu cầu trạng thái (state) từ một hoặc nhiều nút. (Ví dụ: "Đèn đang bật hay tắt?")
  • Tin nhắn SET: Là tin nhắn dùng để thay đổi giá trị của một trạng thái nhất định. (Ví dụ: "Bật đèn lên!")
  • Tin nhắn STATUS (Trạng thái): Tin nhắn này được sử dụng trong nhiều kịch bản:
  • Để phản hồi một tin nhắn GET (chứa giá trị trạng thái được yêu cầu).
  • Để phản hồi một tin nhắn SET có yêu cầu xác nhận (acknowledged SET).
  • Được gửi độc lập (không cần ai hỏi) để báo cáo trạng thái của element. Ví dụ, một cảm biến nhiệt độ tự động gửi đi giá trị đo được sau mỗi 5 phút.

3. Tin nhắn Xác nhận (Acknowledgment)

Một số tin nhắn quan trọng yêu cầu người nhận phải gửi lại một tin nhắn xác nhận (acknowledgment message). Tin nhắn này phục vụ hai mục đích:


  1. Xác nhận đã nhận được tin nhắn.
  2. Trả về dữ liệu liên quan đến tin nhắn đã nhận (ví dụ: trả về trạng thái hiện tại sau khi thực hiện lệnh SET).

Nếu người gửi không nhận được phản hồi, hoặc nhận được phản hồi không mong muốn, họ có thể gửi lại tin nhắn. Một điểm hay là, việc một nút nhận được nhiều tin nhắn giống hệt nhau không ảnh hưởng đến hành vi (nó sẽ được coi như chỉ nhận được tin nhắn một lần).


4. Cơ chế Managed Flooding (Lũ lụt có kiểm soát)

Nhiều mạng mesh sử dụng cơ chế định tuyến phức tạp để tìm đường đi cho tin nhắn. Một thái cực khác là lũ lụt (flooding), tức là phát tán tin nhắn đi khắp mạng mà không cần xem xét tuyến đường tối ưu.

Bluetooth mesh sử dụng một kỹ thuật dung hòa cả hai, được gọi là Managed Flooding (Lũ lụt có kiểm soát).

Về cơ bản, Managed Flooding dựa trên việc quảng bá (broadcasting) tin nhắn đến tất cả các nút trong phạm vi của nút gửi, nhưng có kèm theo một vài tối ưu hóa thông minh:


  • Tin nhắn có gán TTL (Time-to-Live): TTL (Thời gian tồn tại) giới hạn số bước nhảy (hop) mà một tin nhắn có thể đi qua các nút.
  • TTL = 0: Tin nhắn chưa và không được chuyển tiếp. (Chỉ gửi cho các nút trong tầm sóng trực tiếp).
  • TTL ≥ 2: Mỗi lần tin nhắn được chuyển tiếp, giá trị TTL sẽ bị trừ đi 1.
  • TTL = 1: Tin nhắn có thể đã được chuyển tiếp ít nhất một lần, và không được chuyển tiếp nữa.
  • Tin nhắn được lưu vào bộ đệm (Cached): Tất cả các nút đều phải có bộ đệm tin nhắn (cache). Khi một nút nhận được tin nhắn mà đã tồn tại trong cache (tức là nó đã thấy tin này rồi), tin nhắn đó sẽ bị hủy ngay lập tức. Điều này giúp ngăn chặn việc một tin nhắn bị chuyển tiếp lặp lại vô hạn trong mạng.
  • Tin nhắn Heartbeat được gửi định kỳ: Các nút có thể gửi tin nhắn Heartbeat định kỳ để báo cho các nút khác biết rằng mình vẫn đang "sống" và hoạt động trong mạng.

5. Tính năng Friendship (Tình bạn)

Đây là một trong những tính năng thông minh nhất của Bluetooth mesh để tiết kiệm năng lượng, đặc biệt là cho các thiết bị dùng pin. Friendship là mối quan hệ đặc biệt giữa hai loại nút:


  1. Low-Power Node (LPN - Nút Nguồn điện thấp): Đây là các thiết bị (như cảm biến, công tắc dùng pin) cần tiết kiệm năng lượng. Chúng không thể luôn bật để nhận tin nhắn mà sẽ "ngủ" trong phần lớn thời gian.
  2. Friend Node (Nút Bạn): Đây là một nút luôn được cấp nguồn (thường là cắm điện, như bóng đèn thông minh). Friend Node hoạt động như một "người bạn" tốt, nó sẽ lưu trữ các tin nhắn hộ cho LPN trong khi LPN đang ngủ.

Khi LPN "thức dậy", nó sẽ thăm dò Friend Node để hỏi: "Trong lúc tôi ngủ có tin nhắn nào cho tôi không?". Friend Node sẽ gửi lại toàn bộ tin nhắn đã lưu cho LPN. Bằng cách này, LPN có thể ngủ 99% thời gian mà vẫn không bỏ lỡ bất kỳ tin nhắn nào.



7. Các loại node trong Bluetooth mesh

Trong một mạng mesh, tất cả các nút đều có thể gửi và nhận tin nhắn. Tuy nhiên, một số nút có thể đảm nhận thêm các "vai trò" đặc biệt để giúp mạng lưới hoạt động hiệu quả hơn.

Một nút có thể không có, có một, hoặc có tất cả các tính năng tùy chọn này. Các tính năng này cũng có thể được bật hoặc tắt bất cứ lúc nào.

Ví dụ, một chiếc bóng đèn thông minh (cắm điện) hoàn toàn có thể vừa là Relay Node (chuyển tiếp tin nhắn), vừa là Proxy Node (làm cầu nối) và vừa là Friend Node (làm "bạn" của thiết bị pin



Hãy cùng tìm hiểu về các vai trò đặc biệt này:


1. Relay Node (Nút Chuyển tiếp)


Relay Node là một nút hỗ trợ tính năng chuyển tiếp (Relay).

Điều này có nghĩa là nó có khả năng truyền lại các tin nhắn mà nó nhận được từ các nút khác. Tính năng này chính là "xương sống" của mạng mesh, cho phép tin nhắn di chuyển xa hơn, vượt ra ngoài tầm phát sóng ban đầu của nút gửi, và lan tỏa ra toàn bộ mạng lưới.

Ví dụ: Hãy tưởng tượng bạn đang ở tầng 1 (Nút A) và muốn bật đèn ở tầng 3 (Nút C), nhưng sóng của bạn không đủ xa.

Rất may, có một chiếc đèn ở tầng 2 (Nút B) đang bật tính năng Relay. Khi Nút A gửi lệnh "Bật đèn C", Nút B (Relay) nghe thấy, nó không xử lý lệnh này (vì lệnh không phải cho nó), nhưng nó sẽ chuyển lại tin nhắn đó. Nhờ vậy, Nút C ở tầng 3 nghe thấy tin nhắn từ Nút B và bật đèn lên.



2. Proxy Node (Nút Ủy quyền / Cầu nối)



Để cho phép giao tiếp giữa mạng mesh với một thiết bị BLE (Bluetooth Low Energy) không hỗ trợ chuẩn mesh (như điện thoại, máy tính bảng), chúng ta cần một loại nút đặc biệt gọi là Proxy Node.

Một Proxy Node hoạt động như một người trung gian (cầu nối). Nó sử dụng các giao thức GATT (là giao thức Bluetooth chuẩn mà điện thoại hay dùng) để cho phép các thiết bị bên ngoài mạng mesh giao tiếp và tương tác với mạng lưới.

Giao thức được sử dụng trong trường hợp này gọi là Proxy Protocol. Về cơ bản, Proxy Node làm nhiệm vụ "phiên dịch" giữa hai ngôn ngữ:


  1. Ngôn ngữ GATT (dùng với điện thoại).
  2. Ngôn ngữ Mesh PDU (dùng trong nội bộ mạng mesh).

Ví dụ : Bạn muốn dùng chiếc điện thoại thông minh của mình để điều khiển hệ thống đèn mesh trong nhà. Điện thoại của bạn (hiện tại) không "nói" được ngôn ngữ mesh, nó chỉ "nói" được ngôn ngữ Bluetooth GATT thông thường.

Lúc này, một chiếc bóng đèn thông minh (hoặc một bộ điều khiển trung tâm) đang cắm điện sẽ đóng vai trò là Proxy Node.


  1. Điện thoại của bạn sẽ kết nối Bluetooth (GATT) trực tiếp đến cái bóng đèn "Proxy" này.
  2. Bạn nhấn nút "Tắt tất cả đèn" trên ứng dụng điện thoại.
  3. Bóng đèn "Proxy" nhận được lệnh này qua GATT. Nó ngay lập tức "phiên dịch" lệnh này sang tin nhắn mesh và quảng bá (broadcast) vào mạng mesh.
  4. Tất cả các đèn khác trong nhà nhận được tin nhắn mesh này và đồng loạt tắt.



3. Friend Node (Nút Bạn) và Low Power Node (Nút Nguồn điện thấp - LPN)

Hai loại nút này có mối quan hệ mật thiết với nhau. Trên thực tế, để một Low Power Node (LPN) (thiết bị dùng pin) có thể tham gia vào mạng mesh, nó bắt buộc phải có một mối quan hệ Friendship với một nút khác, gọi là Friend Node.

Đây là cách chúng hoạt động cùng nhau:


  • Low Power Node (LPN): Thường là các thiết bị có nguồn cấp hạn chế (như dùng pin tiểu, pin cúc áo). Chúng cần tiết kiệm năng lượng bằng cách tắt radio càng nhiều càng tốt.
  • Friend Node: Thường là các thiết bị luôn được cấp nguồn (cắm điện).

Các LPN có thể quan tâm đến việc gửi tin nhắn nhiều hơn là nhận.

Ví dụ: Ta có một cảm biến nhiệt độ (LPN) chạy bằng pin cúc áo. Nó có thể chỉ cần gửi thông báo 5 phút một lần.

Nhưng vấn đề xảy ra khi bạn muốn thay đổi một cài đặt cho nó (ví dụ: "Từ giờ hãy báo cáo 10 phút một lần"). Nếu LPN luôn "ngủ" (tắt radio) để tiết kiệm pin, làm sao nó nhận được lệnh mới này? Nếu bắt nó phải "thức" (bật radio) mọi lúc để chờ lệnh, pin sẽ hết chỉ trong vài ngày.

Đây là lúc Friend Node xuất hiện để giải quyết vấn đề:


  1. LPN sẽ "kết bạn" với một Friend Node (ví dụ: cái bóng đèn cắm điện ở gần đó).
  2. LPN đi ngủ (tắt radio) để tiết kiệm pin.
  3. Trong khi LPN ngủ, Friend Node sẽ "giữ hộ" tất cả các tin nhắn được gửi đến LPN bằng cách lưu chúng vào bộ đệm.
  4. Theo lịch trình LPN tự đặt (ví dụ: cứ 30 giây một lần), LPN sẽ "thức dậy" trong một khoảnh khắc cực ngắn.
  5. Nó gửi một tin nhắn thăm dò đến Friend Node: "Nãy giờ có ai gửi gì cho tôi không?"
  6. Friend Node sẽ gửi lại tất cả các tin nhắn đã lưu cho LPN.
  7. Đồng thời, nếu LPN có tin nhắn cần gửi (ví dụ: "Nhiệt độ bây giờ là 25°C"), nó cũng sẽ đưa cho Friend Node để gửi vào mạng lưới hộ.
  8. LPN nhận/gửi tin nhắn xong lại đi ngủ tiếp.


Mối quan hệ này được gọi là Friendship (Tình bạn). Đây là tính năng then chốt cho phép các thiết bị siêu tiết kiệm pin tham gia vào mạng mesh, giúp tối ưu hóa đáng kể mức tiêu thụ năng lượng của chúng.



8. Quá trình Provisioning (Cấp phép/Thiết lập)

Quá trình Provisioning là một trong những khái niệm quan trọng nhất trong Bluetooth mesh. Nó được sử dụng để thêm các thiết bị vào mạng mesh. Một thiết bị được thêm vào mạng được gọi là một nút (node), và thiết bị dùng để thêm một nút vào mạng được gọi là Provisioner (thường là máy tính bảng, điện thoại thông minh hoặc PC).

Quá trình này bao gồm năm bước:


Bước 1: Beaconing (Phát tín hiệu)

Bước 1 liên quan đến việc "beaconing", nơi thiết bị chưa được cấp phép (unprovisioned device) thông báo về sự sẵn sàng của nó để được cấp phép bằng cách gửi các quảng cáo beacon mesh trong các gói tin quảng cáo (advertisement packets). Đây là một loại kiểu dữ liệu quảng cáo được giới thiệu trong tiêu chuẩn Bluetooth mesh. Một cách phổ biến để kích hoạt quá trình này là thông qua một chuỗi thao tác được cài đặt trên thiết bị chưa được cấp phép.


Bước 2: Mời vào mạng (Invitation)

Khi Provisioner phát hiện ra thiết bị chưa được cấp phép thông qua các beacon được gửi đi, nó sẽ gửi một lời mời (invitation) đến thiết bị này. Quá trình này sử dụng một loại PDU mới được giới thiệu trong Bluetooth mesh gọi là provisioning invite PDU.




Thiết bị chưa cấp phép sau đó phản hồi bằng thông tin về khả năng của nó trong một provisioning capabilities PDU, bao gồm:


  • Số lượng elements (thành phần) mà thiết bị hỗ trợ.
  • Bộ các thuật toán bảo mật được hỗ trợ.
  • Khả năng cung cấp khóa công khai (public key) của nó bằng công nghệ Out-of-Band (OOB).
  • Khả năng của thiết bị này trong việc xuất (output) một giá trị cho người dùng.
  • Khả năng của thiết bị này trong việc cho phép người dùng nhập (input) một giá trị.



Bước 3: Trao đổi khóa công khai (Public key exchange)




Bảo mật trong Bluetooth mesh liên quan đến việc sử dụng kết hợp các khóa đối xứng và bất đối xứng, chẳng hạn như thuật toán Elliptic-curve Diffie-Hellman (ECDH). Trong ECDH, các khóa công khai được trao đổi giữa Provisioner và thiết bị sắp được cấp phép. Việc này được thực hiện trực tiếp qua BLE hoặc qua một kênh ngoài băng tần.



Bước 4: Xác thực (Authentication)

Bước tiếp theo là xác thực thiết bị chưa được cấp phép. Điều này thường yêu cầu một hành động từ người dùng để tương tác với cả Provisioner và thiết bị chưa được cấp phép. Phương thức xác thực phụ thuộc vào khả năng của cả hai thiết bị được sử dụng.

Trong một trường hợp, gọi là Output OOB, thiết bị chưa cấp phép có thể xuất ra một số ngẫu nhiên (một hoặc nhiều chữ số) cho người dùng dưới một số hình thức, chẳng hạn như nháy đèn LED một số lần. Số đó sau đó được nhập vào thiết bị Provisioner thông qua một phương thức nhập nào đó. Các trường hợp khác bao gồm Input OOB (nơi số được tạo bởi Provisioner và nhập vào thiết bị chưa cấp phép), Static OOB (OOB tĩnh), hoặc không cần OOB.

Bất kể phương thức xác thực nào được sử dụng, quá trình xác thực cũng bao gồm một bước tạo giá trị xác nhận (confirmation value generation) và một bước kiểm tra xác nhận (confirmation check).



Bước 5: Phân phối dữ liệu Provisioning

Sau khi xác thực hoàn tất, mỗi thiết bị sẽ tạo ra một khóa phiên (session key) bằng cách sử dụng khóa bí mật (private key) của nó và khóa công khai (public key) được gửi từ thiết bị kia. Khóa phiên sau đó được sử dụng để bảo mật kết nối cho việc trao đổi dữ liệu provisioning bổ sung, bao gồm Network Key (NetKey), Device Key (DevKey), một tham số bảo mật được gọi là IV Index, và một địa chỉ unicast được Provisioner gán cho thiết bị. Sau bước này, thiết bị chưa được cấp phép sẽ chính thức trở thành một nút (node).



9. Bảo mật trong Bluetooth mesh được xử lý như thế nào?

Điểm quan trọng đầu tiên cần lưu ý về bảo mật trong Bluetooth mesh là nó là bắt buộc. Điều này khác biệt so với BLE, nơi bảo mật là tùy chọn và để nhà phát triển quyết định có nên đưa vào hay không.

Dưới đây là một số điều cơ bản về bảo mật trong Bluetooth mesh:


  • Tất cả các tin nhắn (messages) mesh đều được mã hóa và xác thực.
  • Bảo mật mạng (Network security), bảo mật ứng dụng và bảo mật thiết bị đều được xử lý độc lập.
  • Các khóa bảo mật có thể được thay đổi trong suốt vòng đời của mạng mesh.

Do sự tách biệt về bảo mật giữa các cấp độ mạng, ứng dụng và thiết bị, có ba loại khóa bảo mật (mỗi loại giải quyết một vấn đề cụ thể):



Network Key (NetKey)

Việc sở hữu khóa chia sẻ này khiến thiết bị trở thành một phần của mạng (còn được gọi là một nút). Có hai khóa được tạo ra từ NetKey: network encryption key (khóa mã hóa mạng) và privacy key (khóa riêng tư). Sở hữu NetKey cho phép một nút giải mã và xác thực đến lớp mạng , cho phép chuyển tiếp tin nhắn nhưng không thể giải mã dữ liệu ứng dụng.



Application Key (AppKey)

Đây là một khóa được chia sẻ giữa một tập hợp con các nút trong mạng mesh, thường là những nút tham gia vào một ứng dụng chung. Ví dụ, AppKey của hệ thống chiếu sáng sẽ được chia sẻ giữa các công tắc đèn và bóng đèn, nhưng không chia sẻ với máy điều nhiệt hoặc cảm biến chuyển động.

AppKey được sử dụng để giải mã và xác thực tin nhắn ở cấp ứng dụng, nhưng nó chỉ hợp lệ trong một mạng mesh duy nhất, không phải trên nhiều mạng.



Device Key (DevKey)

Đây là một khóa cụ thể cho từng thiết bị (device-specific key), được sử dụng trong quá trình provisioning để bảo mật giao tiếp giữa thiết bị chưa cấp phép và Provisioner.



Loại bỏ Nút (Node removal)

Một mối lo ngại lớn với mạng mesh là việc kẻ xấu có thể truy cập vào mạng thông qua một thiết bị đã bị loại bỏ hoặc vứt đi mà trước đây từng là một phần của mạng. Điều này có thể được thực hiện bằng cách truy cập vật lý vào các khóa được lưu trữ bên trong thiết bị (thường được gọi là tấn công thùng rác - trash can attack).

Để bảo vệ chống lại một cuộc tấn công như vậy, Bluetooth mesh định nghĩa một quy trình để loại bỏ một nút, theo đó thiết bị này được thêm vào danh sách đen (blacklist) và các khóa được làm mới (refreshed). Quá trình này phân phối các NetKey, AppKey mới và các dữ liệu liên quan khác cho tất cả các nút, trừ những nút trong danh sách đen.



Quyền riêng tư (Privacy)

Một mối quan tâm khác là quyền riêng tư. Cách mà quyền riêng tư được giải quyết trong Bluetooth mesh là thông qua việc sử dụng một privacy key (khóa riêng tư) được sử dụng để làm xáo trộn phần header của tin nhắn. Privacy key được tạo ra từ NetKey. Ví dụ, địa chỉ nguồn (source address) có thể bị làm xáo trộn để ngăn chặn việc theo dõi một thiết bị thông qua địa chỉ của nó.


Tấn công Phát lại (Replay attacks)

Chủ đề bảo mật cuối cùng chúng ta muốn đề cập là tấn công phát lại (replay attacks). Tấn công phát lại là khi một hoặc nhiều tin nhắn bị lưu trữ và được phát lại sau đó bởi một thiết bị độc hại.

Bluetooth mesh cung cấp sự bảo vệ chống lại các cuộc tấn công phát lại bằng cách:


  • Sử dụng một số thứ tự (sequence number - SEQ). Các element (thành phần) sẽ tăng giá trị SEQ mỗi khi chúng publish (xuất bản) một tin nhắn. Một nút, khi nhận được tin nhắn từ một element có giá trị SEQ nhỏ hơn hoặc bằng giá trị trong tin nhắn hợp lệ cuối cùng, sẽ loại bỏ nó (vì có khả năng đây là một cuộc tấn công phát lại).
  • Sử dụng một IV Index tăng dần, đây là một giá trị bổ sung cũng được xác thực khi một tin nhắn được nhận.


10. Bluetooth mesh example : Công tắc thông minh.




Sau khi đi qua hết những khái niệm, hoạt động phức tạp của mạng mesh, hãy cùng mình "unbox" một chiếc công tắc thông minh và theo dõi hành trình của nó, từ một thiết bị "lạ" trở thành một phần của mạng lưới thông minh trong nhà bạn.


Nhân vật chính trong câu chuyện

  • Bạn (Người dùng): Cầm trên tay chiếc điện thoại.
  • Provisioner (Người Cấp Phép): Chính là ứng dụng nhà thông minh (Smart Home App) trên điện thoại của bạn.
  • Thiết bị mới: 1 chiếc Công tắc thông minh (vừa cắm điện).
  • Mạng hiện có: 1 Bóng đèn thông minh (đã được cài đặt từ trước).

Giai đoạn 1: "Nhập Hộ Khẩu" (Provisioning)

Đây là quá trình "làm quen" và cấp quyền cho công tắc gia nhập mạng lưới an toàn.


  1. Phát tín hiệu (Beaconing): Ngay khi được cắm điện, công tắc mới bắt đầu (phát beacon): "Tôi là thiết bị mới! Tôi sẵn sàng gia nhập mạng!"
  2. Lời mời (Invitation): Bạn mở app (Provisioner) và nhấn "Thêm thiết bị mới". App sẽ gửi một "lời mời" riêng tư đến công tắc.
  3. Xác thực (Authentication): Đây là bước thú vị. Để đảm bảo đúng là bạn đang thêm cái công tắc đó, app có thể yêu cầu bạn xác nhận.
  • Ví dụ: Công tắc tự nháy đèn LED 3 lần. App hỏi bạn: "Công tắc nháy mấy lần?". Bạn nhập số "3".
  • Cả hai thiết bị thực hiện phép toán mật mã, nếu khớp, chúng biết mình đang nói chuyện với "đúng người".
  1. Trao Chìa Khóa (Distribution): Khi đã tin tưởng nhau, app của bạn sẽ gửi cho công tắc hai "chìa khóa" đầu tiên:
  • NetKey (Network Key): Giống như "chìa khóa cổng" của cả khu nhà. Ai có chìa khóa này được xem là thành viên của mạng.
  • DevKey (Device Key): Giống như "chìa khóa nhà riêng". Chỉ app của bạn và công tắc này biết, dùng để nói chuyện riêng sau này.

Kết thúc Giai đoạn 1: Công tắc đã chính thức là một Node (nút) trong mạng. Nó đã "có hộ khẩu" nhưng vẫn chưa biết phải làm gì. Nó giống như một nhân viên mới đã có thẻ vào cổng công ty, nhưng chưa được giao việc.


Giai đoạn 2: "Giao Việc" (Configuration)

Bây giờ, chúng ta cần "huấn luyện" cho công tắc biết nhiệm vụ của nó là điều khiển bóng đèn. Đây là lúc mô hình Publish/Subscribe (Công bố/Theo dõi) tỏa sáng.

Bạn mở app và thực hiện một thao tác kéo-thả đơn giản: "Lấy Nút 1 của Công tắc" -> "Điều khiển" -> "Bóng đèn Phòng ngủ".

Đằng sau thao tác đơn giản đó, app (Provisioner) đang làm 2 việc quan trọng:


  1. Trao Chìa Khóa Ứng Dụng (AppKey):
  • App của bạn quyết định tạo một "chìa khóa phòng ban" cho nhóm đèn, gọi là "Den_AppKey".
  • Nó gửi chìa khóa này (một cách an toàn) cho cả Công tắcBóng đèn.
  • Giờ đây, hai thiết bị này có thể hiểu được tin nhắn của nhau.
  1. Thiết lập Publish & Subscribe:
  • App ra lệnh cho Công tắc (Publish): "Khi nút 1 được nhấn, cậu hãy Công bố (Publish) một tin nhắn Bật/Tắt đến địa chỉ nhóm (Group Address) là 'Nhom_PhongNgu'."
  • App ra lệnh cho Bóng đèn (Subscribe): "Cậu hãy Theo dõi (Subscribe) địa chỉ 'Nhom_PhongNgu'. Thấy tin nhắn Bật/Tắt là phải thi hành ngay."

Kết thúc Giai đoạn 2: Mọi thứ đã sẵn sàng. Công tắc đã biết "nói gì" và "nói vào đâu". Bóng đèn đã biết "nghe ở đâu". Quan trọng nhất, chúng có chung (AppKey) để hiểu nhau.


Giai đoạn 3: Vận hành (Operation)

Bạn nhấn nút trên Công tắc.

Điều gì xảy ra trong tích tắc?


  1. Công tắc (Node 1):
  • Tạo một tin nhắn "BẬT".
  • Mã hóa Lớp Ứng dụng: Dùng AppKey ("Den_AppKey") để mã hóa nội dung "BẬT". (Bảo mật nội dung).
  • Mã hóa Lớp Mạng: Dùng NetKey ("NhaCuaToi_Net") để mã hóa toàn bộ gói tin. (Bảo mật đường truyền, xác thực thành viên).
  • Gửi (Publish) gói tin này lên mạng, hướng đến địa chỉ "Nhom_PhongNgu".
  1. Các Node trung gian :
  • Một ổ cắm thông minh gần đó nhận được tin.
  • Nó dùng NetKey để giải mã lớp mạng -> "Tin nhắn hợp lệ, từ mạng của mình".
  • Nó không có AppKey ("Den_AppKey") nên không thể đọc nội dung tin nhắn là "BẬT".
  • Nó thấy tin này không dành cho mình, nên chỉ Chuyển tiếp (Relay) gói tin đi xa hơn.
  1. Bóng đèn (Node 2):
  • Nhận được gói tin (từ công tắc hoặc từ ổ cắm chuyển tiếp).
  • Dùng NetKey để giải mã lớp mạng -> "Tin nhắn hợp lệ".
  • Kiểm tra địa chỉ, thấy đúng là "Nhom_PhongNgu" (nhóm mình theo dõi).
  • Dùng AppKey để giải mã lớp ứng dụng -> Đọc được nội dung là "BẬT".
  • Hành động: Đèn bật sáng!

Tất cả những điều này diễn ra mà không cần đến điện thoại của bạn hay kết nối Internet. Mạng lưới tự vận hành một cách độc lập và an toàn.



10. Kết luận

Hy vọng qua bài viết này, bạn đã giải mã được những khái niệm cốt lõi đằng sau sự "kỳ diệu" của Bluetooth Mesh.

Bạn có thể thấy, đằng sau mỗi thao tác đơn giản là cả một hệ thống được thiết kế cực kỳ logic:


  • Provisioning: Quá trình "nhập hộ khẩu" an toàn.
  • Security Keys (NetKey, AppKey): Hệ thống "chìa khóa" phân tầng, vừa đảm bảo an ninh mạng vừa phân chia chức năng rõ ràng.
  • Pub/Sub: Mô hình giao tiếp linh hoạt, giúp các thiết bị hoạt động độc lập mà không cần một bộ điều khiển trung tâm.

Việc hiểu rõ lý thuyết nền tảng này chính là bước đệm quan trọng nhất. Và bây giờ, khi đã có "bản đồ" trong tay, đã đến lúc chúng ta tự mình đi con đường đó!

Ở bài blog tiếp theo, chúng ta sẽ cùng nhau "thực chiến" với một hướng dẫn chi tiết từng bước: Xây dựng một mạng Bluetooth Mesh đơn giản nhất với ESP32. Anh em đã sẵn sàng biến lý thuyết thành sản phẩm thực tế chưa?

Hãy chuẩn bị sẵn board ESP32 của mình và đón đọc bài viết kế tiếp nhé !