Bài tập lớn tìm hiểu . Các thông tin góp nhặt trên mạng . Khá sơ sài. MQ Telemetry Transport (MQTT) (tạm dịch là Giao vận tầm xa) là giao thức truyền message theo mô hình cung cấpthuê bao (publishsubcribe). Nó dựa trên một Broker (điểm trung gian) nhẹ (khá ít xử lý), và được thiết kế có tính mở (tức là không đăng trưng cho ứng dụng cụ thể nào), đơn giản, nhẹ, và dễ implement. Những đặc trưng này khiến MQTT rất lý tưởng để sử dụng trong các môi trường bị giới hạn tài nguyên tính toán và truyền dữ liệu như:•Những nơi mà giá network đắt hoặc băng thông thấp, hay thiếu tin cậy•Khi chạy trên một thiết bị nhúng bị giới hạn về tài nguyên tốc độ và bộ nhớ.Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng M2M (machine to machine).MQTT cũng là giao thức sử dụng trong Facebook Messager.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ──────── * ─────── BÀI TẬP LỚN MẠNG MÁY TÍNH Giao thức MQTT Nhóm thực : Nguyễn Văn Bình-20150297 Nguyễn Kim Thành- 20153424 Trần Đức Mạnh – 20146479 Nguyễn Văn Nghĩa- 20156140 Giáo viên hướng dẫn: [GS] Tên giáo viên HÀ NỘI 6-2017 MỤC LỤC 1.MQTT gì? 1.1 MQTT gì? 1.2 Lịch sử đời MQTT 1.3.Vị trí MQTT IoT (Internet of Things) .4 2.Một số khái niệm, đặc điểm ứng dụng 2.1 Một số khái niệm .4 2.2 Đặc điểm ,tính bật MQTT 2.2.Ứng dụng 3.Phân loại hoạt độ giao thức 3.1.Phân loại MQTT 3.2 Các gói tin quan trọng MQTT .7 3.2.1 Định dạng message 3.2.2.Quy trình truyền nhận liệu MQTT 3.3 Mô hình Pub/Sub Cơ chế hoạt động 11 3.3.1.Mô hình mẫu Pub/Sub .11 3.3.2.Cơ chế hoạt động MQTT theo mô hình Pub/Sub 13 4.Mô MQTT 14 4.1.Cài đặt công cụ mô 14 4.2 Thiết lập mô 14 KẾT LUẬN 20 Tài liệu tham khảo: http://mqtt.org/ IBM Knowledge Center – MQTT Protocol https://www.ibm.com/support/knowledgecenter/en/SSFKSJ 1.MQTT gì? 1.1 MQTT gì? MQ Telemetry Transport (MQTT) (tạm dịch Giao vận tầm xa) giao thức truyền message theo mô hình cung cấp/thuê bao (publish/subcribe) Nó dựa Broker (điểm trung gian) "nhẹ" (khá xử lý), thiết kế có tính mở (tức không đăng trưng cho ứng dụng cụ thể nào), đơn giản, "nhẹ", dễ implement Những đặc trưng khiến MQTT lý tưởng để sử dụng môi trường bị giới hạn tài nguyên tính toán truyền liệu như: • Những nơi mà giá network đắt băng thông thấp, hay thiếu tin cậy • Khi chạy thiết bị nhúng bị giới hạn tài nguyên tốc độ nhớ Bởi giao thức sử dụng băng thông thấp môi trường có độ trễ cao nên giao thức lý tưởng cho ứng dụng M2M (machine to machine) MQTT giao thức sử dụng Facebook Messager 1.2 Lịch sử đời MQTT MQTT phát minh Andy Stanford- Clark (IBM) Arlen Nipper (EUROTECH) cuối năm 1999 mà họ giao nhiệm vụ tạo giao thức cho lượng hao phí băng thông thấp để kết nối với đường ống dẫn dầu thông qua kết nối vê tinh Quá trình phát triển : 1.3.Vị trí MQTT IoT (Internet of Things) 2.Một số khái niệm, đặc điểm ứng dụng 2.1 Một số khái niệm • Client: thiết bị IoT muốn gửi/nhận liệu network • Broker: thiết bị trung gian nhận liệu từ client muốn gửi gửi liệu tới client muốn nhận • Topic: tượng trưng cho loại liệu mà thiết bị Client gửi/nhận thông qua MQTT Topic chuỗi UTF-8 text tượng trưng cho tên loại liệu Ví dụ topic như: “example/topic1”, “demo_esp/sensor/accel”, “demo_esp/sensor/gyro”, v.v… Trong topic, phân chia cấp dùng ký từ ‘/’ từ đăng ký nhận nhiều loại liệu dùng ký tự đặc biệt ‘#’ ‘+’ sau: ‘+’ Đăng ký nhiều topic khác vị trí phân cấp text topic Ví dụ “demo/sensor/+” đăng ký nhận liệu từ topic “demo/sensor/accel”, “demo/sensor/gyro”, v.v… ‘#’ Đăng ký nhiều topic có khác nhiều vị trí phân cấp text topic Ví dụ “demo/*” đăng ký nhận liệu từ tất topic bắt đầu “demo/” • Publish: bước gửi liệu từ thiết bị client đến Broker Trong bước này, thiết bị IoT xác định topic (là loại liệu muốn gửi) giá trị topic • Subscribe: bước đăng ký nhận liệu từ Broker thiết bị Client Trong bước này, thiết bị IoT xác định loại liệu mà muốn nhận Khi Broker nhận loại liệu từ thiết bị client khác, gửi liệu tới thiết bị client đăng ký nhận • Unsubscribe: bước thông báo với Broker thiết bị Client không muốn tiếp tục nhận liệu Sau hiểu khái niệm quan trọng này, sử dụng thư viện open-source cho MQTT client MQTT Broker flow chương trình sử dụng thư viện MQTT client đơn giản sử dụng vài hàm API sau: • • • • Tạo kết nối TCP đến server chạy code MQTT Broker Gọi hàm publish() để gửi liệu lên Broker Gọi hàm subscribe() để đăng ký nhận liệu từ Broker (hoặc unsubscribe() để ngừng nhận liệu từ Broker) Đăng ký hàm callback ứng dụng để gọi thư viện MQTT client nhận liệu từ Broker Với phạm vi thời gian hạn chế, viết muốn giới thiệu cách thức hoạt động giao thức MQTT kiến thức tổng quát đủ để hiểu chất MQTT sử dụng thư viện open-source cho MQTT ứng dụng 2.2 Đặc điểm ,tính bật MQTT - Dạng truyền message cung cấp/thuê bao (publish/subcribe) cung cấp việc truyền tin phân tán 1-nhiều - Việc truyền message không quan tâm đến nội dung truyền - Dựa TCP/IP để cung cấp đường truyền - Có loại QoS đưa ra: + "Hầu lần " : "At most once", message truyền nhận dựa hoàn toàn vào tính tin cận TCP/IP Việc lặp message xảy Ở QoS này, ví dụ trường hợp sử dụng: môi trừong sensor mà việc gói liệu thời điểm không ảnh hưởng đến toàn trình + "Ít lần" : "At least once", message đảm bảo nhận xảy lặp + "Chính xác lần" : "Exactly once", message đảm bảo đến nơi lần Ở level này, hệ thống toán, nơi mà việc lặp hay message gây việc tính tiền bị sai - Dữ liệu bao bọc liệu truyền (overhead) nhỏ (độ dài cố định byte), and giao thức giảm đến mức tối thiểu traffic đường truyền - Một chế để thông báo đến thuê bao đường truyền bị đứt bất thường, sử dụng Last Will Testament feature Ví dụ kết nối mạng lưới MQTT - Light sensor liên tục gửi liệu broker (điểm trung gian) - Ứng dụng điều khiển tòa nhà nhận liệu từ broker để định trạng thái thiết bị nhà - Ứng dụng gửi tín hiệu điều khiển actor node thông qua broker 2.2.Ứng dụng 3.Phân loại hoạt độ giao thức 3.1.Phân loại MQTT Các thành phần MQTT clients, servers (=brokers), sessions, subscriptions topics MQTT client (publisher, subscriber): Client thực subscribe đến topics để publish receive gói tin Topic: Về mặt kỹ thuật, topics hàng đợi chứa message Về logic, topics cho phép clients trao đổi thông tin liệu Session: Một session định nghĩa kết nối từ client đến server Tất giao tiếp client server phần session Subscription: Không giống sessions, subscription mặt logic kết nối từ client đến topic Khi thực subscribed đến topic, client trao đổi messages với topic Subscriptions trạng thái ‘transient’ ‘durable’, phụ thuộc vào cờ clean session gói Connect Message: Messages đơn vị liệu trao đổi topic clients 3.2 Các gói tin quan trọng MQTT 3.2.1 Định dạng message Phần header cố định Tất message chứa phần cố định theo bảng sau: Byte : Chứa loại Message cờ (DUP, QoS level, and RETAIN) Byte : (Ít byte) quy định độ dài lại Loại Message Vị trí: byte 1, bits 7-4 Một số 4-bit không dấu diễn tả giá trị miêu tả bảng - Các cờ Bit lại byte đầu chứa trường DUP, QoS RETAIN Vị trí bit ý nghĩa miêu tả bảng sau: * DUP :Vị trí byte 1, bit Cờ bật client server cố chuyển lại gói PUBLISH, PUBREL, SUBSCRIBE UNSUBSCRIBE Giá trị sử dụng mesage mà có QoSS lớn yêu cầu ACK Khi bit DUP set, phần header thay đổi chứa Message ID Nhìn vào giá trị biết gói tin nhận trước hay không Nó không nên sử dụng để tin có duplicates hay không * QoS : Vị trí byte 1, bits 2-1 Cờ cho biết độ đảm bảo việc nhận message PUBLISH Giá trị QoS miêu tả bảng sau * RETAIN: Vị trí byte 1, bit Cờ sử dụng message PUBLISH Khi client gửi message PUBLISH đến server, cờ Retain set (1), server phải hiểu nên giữ message sau chuyển đến subcribers Khi có subcription thiết lập topic, message cuối topic nên gửi đến subscriber với trường Retain set header Nếu messsage còn, không cần gửi hết Trường có ích publisher gửi message để báo "report ngoại lệ", nơi message Điều cho phép subcribers nhanh chóng nhận cần thiết Trường hợp mà server chuyển tiếp nội dung vừa nhận từ Publisher trường Retain không set Điều giúp phân biệt message có từ trước với message publish lên Message Retained giữ chí sau restart lại server Server xóa message retained nhận message với payload zero * Độ dài lại Vị trí: byte Miêu tả độ dài bao gồm phần header payload có message Việc encoding với độ dài thay đổi sử dụng byte để miêu tả độ dài, độ dài tối đa 127 Những message dài miêu tả theo cách sau bít dùng để miêu tả giá trị, bít lại dùng để miêu tả phía sau byte miêu tả trường hay không Mỗi byte tiếp sau bit để lưu giá trị, bít gọi bit tiếp tục Giá trị tính cách nhân giá trị diên tả bit lũy thừa tăng dần 128 Ví dụ miêu tả độ Remain Length = 64, ta cần byte, bytes để miêu tả giá trị 64, bit lại Một ví dụ nữa, giá trị 321 chẳng hạn 321 = 65*128^0 + 2* 128^1, ta cần byte để biểu diễn Byte đầu chứa giá trị 65 bit bit lại Byte thứ chứa giá trị bit bit chứa giá trị Trường biểu diễn tối đa byte Tức cho độ dài cho phép đến 268 435 455 (256 MB) 3.2.2.Quy trình truyền nhận liệu MQTT 3.2.2.1 CONNECT and SUBSCRIBE message sequence Session subscription thiết lập với clean session flag = TH1: Quy trình truyền nhận liệu MQTT session flag = 1: - Client Server kết nối qua giao thức TCP - Client gửi gói tin CONNECT yêu cầu kết nối đến Server, clean session = Đây thời điểm đánh dấu session thiết lập - Server gởi gói CONNACK xác nhận thiết lập kết nối thành công - Client thực SUBSCRIBE đến topic XYZ Đây thời điểm bắt đầu timeout subscription - Server gởi gói SUBACK xác nhận trình subscription - Client PUBLISH để gởi topic - message đến server - Sau nhận đủ thông tin, client gửi gói UNSUBSCRIBE topic XYZ để kết thúc trình Subscribe - Server trả gói UNSUBACK - Client gửi gói DISCONNECT để kết thúc session truyền thông Session subscription thiết lập với clean session flag = TH2: Quy trình truyền nhận liệu MQTT session flag = 0: - Subscription lifetime thiết lập trước - Client Server kết nối qua giao thức TCP - Client gửi gói tin CONNECT yêu cầu kết nối đến Server, clean session = Đây thời điểm đánh dấu session thiết lập - Server gởi gói CONNACK xác nhận thiết lập kết nối thành công - Client PUBLISH để gởi topic - message đến server - Client gửi gói DISCONNECT để kết thúc session truyền thông 3.2.2.2 PUBLISH message flows QoS level 0: At most once delivery Message phân phối dựa best efforts tầng mạng TCP/IP bên Một response không định nghĩa giao thức Các message đến server lần không QoS mức QoS level 1: At least once delivery Việc nhận message bên phía server xác nhận message PUBACK Nếu có lỗi kết nối gửi đến device, message xác nhận không nhận sau khoảng thời gian định, sender gửi lại message set DUP bit phần header message header Message đến server lần Cả message SUBSCRIBE message UNSUBSCRIBE sử dụng QoS level Khi nhận message lặp lại từ phía client, server publish message đến subscribers, gửi message PUBACK khác QoS level QoS level 2: Exactly once delivery Một luồng thêm vào luồng QoS level để đảm bảo message bị lặp lại không bị chuyển đến ứng dụng Đây mức độ cao khi phân phối message, không message lặp chấp nhận Nhờ mà lưu lượng mạng tăng lên Nếu phát lỗi, sau khoảng thời gian định, luồng protocol thực lại từ kết message xác nhận cuối cùng; PUBLISH , PUBREL Luồng protocol đảm bảo message đến subscriber lần QoS level 3.3 Mô hình Pub/Sub Cơ chế hoạt động 3.3.1.Mô hình mẫu Pub/Sub Thành phần: • Publisher - nơi gửi thông điệp • Subscriber – nơi nhận thông điệp • Broker – điểm trung gian Đặc điểm bật • Tách biệt publisher subscriber • Cả publisher subscriber client luôn kết nối đến broker trung tậm • Sử dụng thành phần, phương thức để xác định thông điệp chuyền đến client (Mà với MQTT kênh (“topics”) Ưu điểm • Kết nối riêng rẽ • Khả mở rộng • Thời gian tách biệt (Time decoupling) • Đồng riêng rẽ (Synchronization decoupling) Nhược điểm • Điểm trung gian (broker) không cần thông báo trạng thái gửi thông điệp Do cách để phát xem thông điệp gửi hay chưa • Publisher trạng thái subscribe ngược lại Vậy đảm bảo thứ ổn • Những kẻ xấu (malicious publisher) gửi thông điệp xấu, subcribers truy cập vào thứ mà họ không nên nhận 3.3.2.Cơ chế hoạt động MQTT theo mô hình Pub/Sub 3.3.2.1.Tính thừa kế đặc điểm riêng Tính thừa kế: • Space decoupling (Không gian tách biệt) • Time decoupling (Thời gian tách biệt) • Synchronization decoupling (Sự đồng riêng rẽ) … Đặc điểm riêng biệt: • MQTT sử dụng chế lọc thông điệp dựa vào tiêu đề (subjectbased ) • MQTT có tầng gọi chất lượng dịch vụ (Quality of Services – QoS) Nó giúp cho dễ dàng nhận biết message có truyền thành công hay không 3.3.2.2.Cơ chế tổng quan: • MQTT hoạt động theo chế client/server, nơi mà cảm biến khách hàng (client) kết nối đến máy chủ, hiểu điểm trung gian (broker), thông qua giao thức TCP (Transmission Control Protocol) Broker chịu trách nhiệm điều phối tất thông điệp phía gửi đến phía nhận • MQTT giao thức định hướng tin Mỗi tin đoạn rời rạc tín hiệu broker nhìn thấy Mỗi tin publish địa chỉ, hiểu kênh (Topic) Client đăng kí vào vài kênh để nhận/gửi liệu, gọi subscribe Client subcribe vào nhiều kênh Mỗi client nhận liệu trạm khác gửi liệu vào kênh đăng kí Khi client gửi tin đến kênh gọi publish Ví dụ 4.Mô MQTT 4.1.Cài đặt công cụ mô Có nhiều cách triển khai MQTT broker như: • Dùng ứng dụng opensource chạy broker máy tính • Dùng dịch vụ xây dựng sẵn Bài nhóm em dùng dịch vụ CloudMQTT https://www.cloudmqtt.com phần mềm MQTTfx để demo kịch Link download MQTTfx : http://www.jensd.de/apps/mqttfx/1.4.2/ 4.2 Thiết lập mô Để chạy kịch đơn giản giao tiếp Broker với Client cần ý số điểm sau: - Cần có tối thiểu Client Broker - Thiết đặt Host, Port, Topic, user password Broker Chúng ta cài đặt Broker miễn phí dịch vụ CloudMQTT Vào https://www.cloudmqtt.com/plans.html , Click Try now for Free Ở phần Sign up, bạn điền địa E-mail Click Sign up Vào hòm thư Click vào đường link email mà CloudMQTT gửi cho bạn Link dẫn bạn đến trang điền thông tin cho tài khoản nhấn Submit Tiếp theo, nhấn Create để tạo MQTT broker Điền vào ô Name, nhấn Create Click Details Tại mục Manager User điền tên User, mật Password quản lí Client, nhấn Save Tại mục New Rule, User chọn tên vừa tạo trên, đặt tên Topic, tisck chọn Read Accsess Write Accsess, click Save Chúng ta quan tâm đến số thông số sau: Server: m10.cloudmqtt.com Port: 16351 Users: ammymlhc Password: aUS3WK1CEFWT Topic: timhieuveMQTT Vậy cài đặt xong Broker -Tiếp theo dùng MQTTfx Đầu tiên kết nối vào broker cài đặt bên cách thiết lập thông số sau : Profile Name: timhieuveMQTT Broker Address: m10.cloudmqtt.com Broker Port: 16351 User Name: ammymlhc Password: aUS3WK1CEFWT Sau bấm OK để thiết lập cài đặt Đến connect Profile Name Topic cho client Publish client Subscribe Profile Name: timhieuveMQTT Topic: timhieuveMQTT Chúng ta tiến hành gửi tin nhắn từ Publisher subscriber đăng kí topic nhận tin từ Publisher Tin nhắn từ Publisher gửi tới MQTT broker từ MQTT broker gửi tin nhắn tới subscriber đăng kí topic Chúng ta tiến hành gửi tin nhắn từ MQTT Broker tới subscriber Topic Và kết Subscriber nhận KẾT LUẬN Qua việc làm tâp lớn trên, chúng em thấy MQTT ứng dụng rộng rãi giao thức quan trọng Viêc tìm hiểu MQTT cho thấy vai trò quan trong IoT Phần tìm hiểu môt phần hiểu biết nhỏ MQTT, chắn chúng em phải tìm hiều sâu MQTT để rõ chất cách sử dung giao thức Phần trình bày tâp lớn chúng em xin hết Cảm ơn cô giúp chúng em ... Bởi giao thức sử dụng băng thông thấp môi trường có độ trễ cao nên giao thức lý tưởng cho ứng dụng M2M (machine to machine) MQTT giao thức sử dụng Facebook Messager 1.2 Lịch sử đời MQTT MQTT... http:/ /mqtt. org/ IBM Knowledge Center – MQTT Protocol https://www.ibm.com/support/knowledgecenter/en/SSFKSJ 1 .MQTT gì? 1.1 MQTT gì? MQ Telemetry Transport (MQTT) (tạm dịch Giao vận tầm xa) giao thức. .. dụng để gọi thư viện MQTT client nhận liệu từ Broker Với phạm vi thời gian hạn chế, viết muốn giới thiệu cách thức hoạt động giao thức MQTT kiến thức tổng quát đủ để hiểu chất MQTT sử dụng thư viện