MQTT (Message Queuing Telemetry Transport) là một giao thức nhắn tin tiêu chuẩn OASIS cho Internet of Things (IoT). Nó được thiết kế như một phương tiện truyền tải tin nhắn publish/subscribe (xuất bản/đăng ký) cực kỳ nhẹ, lý tưởng để kết nối các thiết bị từ xa với băng thông mạng thấp. MQTT ngày nay được sử dụng trong nhiều ngành công nghiệp, chẳng hạn như ô tô, sản xuất, viễn thông, dầu khí, v.v.
Một phiên MQTT được chia thành bốn giai đoạn: kết nối, xác thực, giao tiếp và kết thúc. Client (máy khách) bắt đầu bằng cách tạo kết nối Transmission Control Protocol/Internet Protocol (TCP/IP) tới broker bằng cách sử dụng cổng tiêu chuẩn hoặc cổng tùy chỉnh được xác định bởi các nhà phát triển broker. Khi tạo kết nối, điều quan trọng là phải nhận ra rằng máy chủ có thể tiếp tục một phiên cũ nếu nó được cung cấp ID máy khách mà được sử dụng lại.
Các cổng tiêu chuẩn là 1883 cho giao tiếp không mã hóa và 8883 cho giao tiếp được mã hóa – sử dụng Lớp cổng bảo mật (SSL) / Bảo mật lớp truyền tải (TLS). Trong quá trình giao tiếp SSL/TLS, máy khách cần kiểm chứng và xác thực máy chủ. Máy khách cũng có thể cung cấp tính xác thực máy khách cho broker trong quá trình giao tiếp. Broker có thể sử dụng điều này để xác thực máy khách. Mặc dù không phải là một phần cụ thể của đặc trưng MQTT, nhưng các broker đã trở thành thông lệ để hỗ trợ xác thực máy khách bằng SSL/TLS phía máy khách.
Trong đó:
- Broker: là một thành phần trung gian (môi giới)
- SSL/TLS (Secure Sockets Layer/Transport Layer Security) là kỹ thuật mã hóa truyền tin trên internet.
Giao thức MQTT được phát hành nhằm mục đích trở thành một giao thức dành cho các thiết bị IoT và hạn chế tài nguyên tiêu tốn, SSL/TLS không phải là một tùy chọn bắt buộc và trong một số trường hợp nó không cần thiết. Trong những trường hợp như vậy, việc xác thực được thực hiện dưới dạng tên người dùng và mật khẩu, được máy khách gửi đến máy chủ – đây là một phần của gói CONNECT/CONNACK. Ngoài ra, một số broker, đặc biệt là các broker mở được công bố trên internet, sẽ chấp nhận các tài khoản máy khách ẩn danh. Trong những trường hợp như vậy, tên người dùng và mật khẩu chỉ đơn giản là được bỏ trống – không sử dụng tài khoản.
MQTT được gọi là một giao thức nhẹ vì tất cả các thông điệp của nó chỉ có một mã nhỏ. Mỗi thông báo bao gồm một tiêu đề cố định – 2 byte – một tiêu đề biến tùy chọn, dung lượng thông điệp được giới hạn ở 256 megabyte (MB) và mức chất lượng dịch vụ ( QoS ).
Trong giai đoạn giao tiếp, máy khác có thể thực hiện các thao tác publish, subscribe, unsubscribe và ping. Thao tác publish sẽ gửi một khối dữ liệu nhị phân – nội dung – đến một chủ đề do nhà xuất bản xác định.
MQTT hỗ trợ các thông điệp đối tượng nhị phân có kích thước lớn lên đến 256 MB. Định dạng của nội dung sẽ dành riêng cho từng ứng dụng. Subscribe được thực hiện bằng cách sử dụng gói SUBSCRIBE/SUBACK và việc unsubscribe được thực hiện tương tự bằng cách sử dụng gói UNSUBSCRIBE/UNSUBACK.
Các chuỗi chủ đề tạo thành một cây chủ đề tự nhiên với việc sử dụng một ký tự phân tách đặc biệt, dấu gạch chéo (/). Máy khách có thể subscribe và unsubscribe – toàn bộ các nhánh trong cây chủ đề bằng cách sử dụng các ký tự thẻ đại diện đặc biệt. Có hai ký tự thẻ đại diện: ký tự thẻ đại diện cấp một, ký tự dấu cộng (+); và một ký tự thẻ đại diện đa cấp, ký tự thăng (#). Một ký tự chủ đề đặc biệt, ký tự đô la ($), loại trừ một chủ đề khỏi bất kỳ subscribe ký tự đại diện gốc nào. Thông thường, $ được sử dụng để vận chuyển các thông điệp hệ thống hoặc máy chủ cụ thể.
Một thao tác khác mà máy khách có thể thực hiện trong giai đoạn giao tiếp là ping broker server bằng cách sử dụng gói PINGREQ/PINGRESP. Thao tác này không có chức năng nào khác ngoài việc duy trì kết nối trực tiếp và đảm bảo kết nối TCP không bị ngắt bởi gateway hoặc router.
Khi một publisher hoặc subscriber muốn kết thúc một phiên MQTT, nó sẽ gửi một thông báo DISCONNECT – HỦY KẾT NỐI đến broker và sau đó ngắt kết nối. Điều này được gọi là graceful shutdown vì nó mang lại cho máy khách khả năng dễ dàng kết nối lại bằng cách cung cấp ID máy khách và tiếp tục lại nơi nó đã dừng.
Nếu việc ngắt kết nối xảy ra đột ngột mà không có thời gian để publisher gửi thông điệp HỦY KẾT NỐI, broker có thể gửi cho subscriber một thông điệp từ publisher mà broker đã lưu vào bộ nhớ cache trước đó. Thông điệp, được gọi là testament, cung cấp cho subscriber hướng dẫn về những việc cần làm nếu publisher ngắt kết nối đột ngột.
Xem thêm tại: https://mesidas.com/mqtt/