MQTT là giao thức truyền thông dựa trên mô hình client-server, được thiết kế để truyền dữ liệu nhanh, nhẹ và đáng tin cậy, đặc biệt trong môi trường băng thông thấp hoặc thiết bị hạn chế tài nguyên. Hãy cùng tìm hiểu cách nó hoạt động:
🔌 1. Thiết lập kết nối
🔗 Client (thiết bị hoặc ứng dụng) khởi tạo kết nối TCP tới Broker (máy chủ trung tâm) trên cổng mặc định 1883 (hoặc 8883 cho TLS/SSL).
📡 Quá trình bắt đầu bằng gói tin CONNECT, trong đó client gửi thông tin như Client ID, thông tin xác thực (username/password hoặc chứng chỉ), và các tham số như Keep Alive Interval.
✅ Broker phản hồi bằng gói tin CONNACK, xác nhận kết nối thành công hoặc từ chối nếu có lỗi.
🛠 Kỹ thuật sâu: MQTT hỗ trợ WebSocket (trên TCP) để tích hợp với các ứng dụng web, sử dụng header Sec-WebSocket-Protocol: mqtt. Điều này hữu ích khi triển khai trên trình duyệt.
👥 2. Vai trò trong MQTT
📤 Publisher: Gửi dữ liệu (payload) đến broker trên một topic cụ thể.
📥 Subscriber: Đăng ký nhận dữ liệu từ các topic mà họ quan tâm.
🌍 Broker: Máy chủ trung gian (như Mosquitto, HiveMQ) quản lý việc định tuyến tin nhắn giữa publisher và subscriber.
🛠 Kỹ thuật sâu: Broker sử dụng cơ chế lưu trữ in-memory hoặc persistent storage để quản lý trạng thái phiên (session state) và các tin nhắn được lưu trữ (retained messages). Một số broker hỗ trợ clustering để đảm bảo tính sẵn sàng cao (high availability).
🗂 3. Topics – Kênh giao tiếp

📚 Topic là các chuỗi phân cấp (hierarchical string), ví dụ: sensors/temperature/room1.
🔍 Wildcard cho phép đăng ký linh hoạt:
➕ +: Đại diện cho một cấp topic (single-level), ví dụ: sensors/+/room1.
🌟 #: Đại diện cho nhiều cấp topic (multi-level), ví dụ: sensors/#.
🛠 Kỹ thuật sâu: Topic được lưu dưới dạng trie hoặc hash table trong broker để tối ưu hóa việc tìm kiếm và định tuyến tin nhắn. Việc sử dụng topic hợp lý giúp giảm tải hệ thống.

🔁 4. Cơ chế Publish/Subscribe
📢 Publish: Client gửi gói tin PUBLISH chứa topic, payload (dữ liệu), và mức QoS.
📩 Subscribe: Client gửi gói tin SUBSCRIBE để đăng ký topic, broker phản hồi bằng SUBACK.
🚫 Unsubscribe: Client gửi UNSUBSCRIBE để hủy đăng ký, broker xác nhận bằng UNSUBACK.
🛠 Kỹ thuật sâu: Payload trong MQTT không có định dạng cố định (thường là JSON, text, hoặc binary), do đó cần thỏa thuận giữa publisher và subscriber để xử lý dữ liệu.
📶 5. Chất lượng dịch vụ (QoS)

MQTT cung cấp ba mức QoS để đảm bảo độ tin cậy:
⚡ QoS 0: Gửi một lần, không xác nhận (fire-and-forget). Phù hợp cho dữ liệu không quan trọng như giá trị cảm biến cập nhật liên tục.
✅ QoS 1: Gửi ít nhất một lần, yêu cầu xác nhận (PUBACK). Có thể dẫn đến trùng lặp tin nhắn.
🔒 QoS 2: Gửi đúng một lần, thông qua quy trình 4 bước (PUBREC, PUBREL, PUBCOMP) để đảm bảo không trùng lặp.
🛠 Kỹ thuật sâu: QoS 2 sử dụng Packet Identifier để theo dõi tin nhắn, tăng độ tin cậy nhưng làm tăng độ trễ và tài nguyên. Việc chọn QoS cần cân nhắc dựa trên yêu cầu ứng dụng.
🧠 6. Retained Messages
💾 Broker có thể lưu trữ tin nhắn cuối cùng trên một topic (nếu được đánh dấu retained).
🔔 Khi client mới đăng ký vào topic, họ nhận ngay tin nhắn được lưu trữ này.
🛠 Kỹ thuật sâu: Retained messages hữu ích trong các ứng dụng như cập nhật trạng thái (state update), ví dụ: trạng thái bật/tắt của đèn. Broker lưu trữ retained messages trong persistent storage để đảm bảo tính bền vững.
⏱ 7. Keep Alive Mechanism
⏰ Client gửi gói tin PINGREQ định kỳ trong khoảng thời gian Keep Alive (thường là 60 giây).
📬 Broker phản hồi bằng PINGRESP. Nếu không nhận được PINGREQ trong thời gian quy định (thường là 1.5x Keep Alive), broker ngắt kết nối.
🛠 Kỹ thuật sâu: Cơ chế này giúp phát hiện các kết nối bị gián đoạn (như mất mạng) mà không cần chờ timeout TCP.
✔ 8. Last Will and Testament (LWT)
📝 Client có thể khai báo một tin nhắn LWT khi kết nối, bao gồm topic, paiload, và QoS.
⚠ Nếu client ngắt kết nối bất thường (mất mạng, crash), broker sẽ gửi LWT đến topic được chỉ định.
🛠 Kỹ thuật sâu: LWT rất hữu ích trong các hệ thống giám sát, ví dụ: thông báo khi một thiết bị IoT mất kết nối.
🔐 9. Bảo mật
🔒 TLS/SSL: Mã hóa dữ liệu truyền qua mạng, sử dụng cổng 8883.
🔑 Xác thực: Hỗ trợ username/password hoặc chứng chỉ số (client certificates).
🛠 Kỹ thuật sâu: Một số broker hỗ trợ ACL (Access Control List) để kiểm soát quyền truy cập topic theo client. Điều này tăng cường bảo mật trong các hệ thống IoT quy mô lớn.
🔍 Tại sao MQTT được ưa chuộng?
⚡ Nhẹ: Gói tin MQTT có header tối thiểu (2 byte), phù hợp cho thiết bị IoT hạn chế tài nguyên.
📈 Mở rộng: Hỗ trợ hàng triệu client đồng thời nhờ mô hình publish/subscribe.
✅ Đáng tin cậy: Cơ chế QoS và LWT đảm bảo truyền dữ liệu ổn định.
💡 Ứng dụng thực tế:

🏠 Điều khiển nhà thông minh (smart home).
🏭 Giám sát cảm biến trong công nghiệp.
💬 Ứng dụng nhắn tin thời gian thực.
Để lại một bình luận