Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.16 MB, 20 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b><small> HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THÔNG--- ---</small></b>
<b>Giảng viên hướng dẫnNguyễn Thị Thu NgaNhóm thực hiện05</b>
<b>Thành viênHồng Đơng Tuấn – B20DCVT334Khổng Vũ Mạnh – B20DCVT246Nguyễn Văn Kiên – B20DCVT206Nguyễn Văn Linh – B20DCVT230</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><b><small>1.5 Ưu điểm của MQTT...3</small></b>
<b><small>II. Mơ hình Pub/Sub và Cơ chế hoạt động của MQTT...3</small></b>
<b><small>2.1 Mơ hình Pub/Sub...3</small></b>
<b><small>2.2 Ưu điểm mơ hình Pub/Sub...4</small></b>
<b><small>2.3 Nhược điểm mơ hình Pub/Sub...4</small></b>
<b><small>III. Cơ chế hoạt động của MQTT theo mơ hình Pub/Sub...4</small></b>
<b><small>3.1. Tính chất và những đặc điểm riêng...4</small></b>
<b><small>3.2Cơ chế tổng quan...5</small></b>
<b><small>3.3Cơ chế thành phần...5</small></b>
<b><small>IV. Bảo mật trong MQTT...6</small></b>
<b><small>4.1 Bảo mật lớp ứng dụng (Application Layer Sercurity)...6</small></b>
<b><small>4.2 Bảo mật lớp giao vận (Transport Layer Sercurity)...8</small></b>
<b><small>4.3 Bảo mật lớp mạng (Network layer)...8</small></b>
<b><small>B. ỨNG DỤNG MƠ HÌNH NHÀ THƠNG MINH...9</small></b>
<b><small>1. Xây dựng MQTT broker và MQTT client...9</small></b>
<b><small>2. Xây dựng code nhúng vào các thiết bị...16</small></b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>I. Tổng quan về giao thức MQTT 1.1 Khái niệm</b>
Giao thức MQTT (Message Queuing Telemetry Transport) là một giaothức truyền thông dựa trên mơ hình Publish/Subscribe cực kỳ nhẹ, lýtưởng để kết nối các thiết bị từ xa với dung lượng mã nhỏ và băng thôngmạng tối thiểu.
MQTT được xem là lựa chọn lý tưởng cho việc truyền thông giữa cácthiết bị IoT với băng thông thấp và mạng lưới không ổn định, với độ tincậy cao. Giao thức này đã được chuẩn hóa bởi OASIS và ISO.
<small>Hình 1.1: Lịch sử hình thành MQTT</small>
<b>1.3 Vị trí của MQTT trong mơ hình IoT</b>
<small>Hình 1.2: Vị trí của MQTT trong mơ hình IoT</small>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"> QoS 2: Broker/client đảm bảo khi gửi dữ liệu thì phía nhận chỉnhận được đúng một lần, quá trình này phải trải qua 4 bước bắt tay.Phần bao bọc dữ liệu truyền nhỏ và được giảm đến mức tối thiểu để giảm tảicho đường truyền.
<b>1.5 Ưu điểm của MQTT</b>
Với những tính năng, đặc điểm nổi bật trên, MQTT mang lại nhiều lợi íchnhất là trong hệ thống SCADA (Supervisory Control And Data Acquisition)khi truy cập dữ liệu IoT.
Truyền thông tin hiệu quả hơn. Tăng khả năng mở rộng.
Giảm đáng kể tiêu thụ băng thông mạng. Tối đa hóa băng thơng có sẵn.
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"> Client: Client thì được chia thành hai nhóm:- Publisher ( Nơi gửi thông điệp )
- Subscriber ( Nơi nhận thơng điệp )
Client chỉ làm ít nhất một trong 2 việc là publish các thông điệp (message)lên một/nhiều topic cụ thể hoặc subscribe một/nhiều topic nào đó để nhậnmessage từ topic này.
Broker - Máy chủ môi giới
Broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từClient (Publisher/Subscriber). Nhiệm vụ chính là nhận thông điệp (message)từ Publisher, xếp vào hàng đợi rồi chuyển đến một địa điểm cụ thể. Nhiệm vụphụ của Broker là nó có thể đảm nhận thêm một vài tính năng liên quan tớiq trình truyền thơng như: bảo mật message, lưu trữ message, logs, ....
<b>2.2 Ưu điểm mơ hình Pub/Sub</b>
Khả năng mở rộng (Scalability): Sự tách biệt giữa các thành phần trongmơ hình khiến nó có khả năng mở rộng cao. Mơ hình có xử lý lượng lớnPulisher và Subscriber mà không ảnh hưởng tới hiệu suất.
Đáng tin cậy (Reliability): Thông điệp luôn đảm bảo sẽ được chuyển tớiSubscriber ngay cả khi người đó khơng hoạt động trên mạng hoặc đứt kếtnối.
Loose coupling: Publisher và Subscriber giao tiếp thông qua thành phầntrung gian (Topic) giúp chúng hoạt động một cách độc lập và không ảnhhưởng tới nhau.
<b>2.3 Nhược điểm mơ hình Pub/Sub</b>
Quản lý tài ngun: Trong mơ hình Pub-Sub, Publisher và Subcriberkhơng giao tiếp trực tiếp với nhau. Điều này có thể tạo ra thách thức trongviệc quản lý tài nguyên, đặc biệt là khi cần theo dõi và giải phóng tài ngunđã sử dụng.
An tồn dữ liệu: Thơng điệp được truyền tải qua mạng có thể dẫn tới mấtan tồn thơng tin. Điều này đặc biệt quan trọng nếu hệ thống đang làm việctrong môi trường khơng tin cậy.
Phức tạp khi debugging và tracing: Vì thông điệp được truyền tải giữaPublisher và Subscriber qua trung gian là Topic, nên việc theo dõi và gỡ lỗi(debugging) có thể trở nên phức tạp hơn so với các mơ hình giao tiếp trựctiếp.
<b>III. Cơ chế hoạt động của MQTT theo mơ hình Pub/Sub3.1.Tính chất và những đặc điểm riêng</b>
Tính chất:
Space decoupling (Khơng gian tách biệt)
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Time decoupling (Thời gian tách biệt)
Synchronization decoupling (Sự đồng bộ riêng rẽ) Đặc điểm riêng:
MQTT sử dụng cơ chế lọc thơng điệp dựa vào tiêu đề (subject-based)
MQTT có một tầng gọi là chất lượng dịch vụ (Quality of Services – QoS). Nógiúp cho dễ dàng nhận biết được là message có được truyền thành cơng haykhơng.
<b>3.2 Cơ chế tổng quan</b>
<small>Hình 3.1 : Cơ chế tổng quan</small>
MQTT hoạt động theo cơ chế client/server, nơi mà mỗi cảm biến là mộtkhách hàng (client) và kết nối đến một máy chủ, có thể hiểu như một Máy chủmôi giới (broker), thông qua giao thức TCP (Transmission Control Protocol).Broker chịu trách nhiệm điều phối tất cả các thơng điệp giữa phía gửi đến đúngphía nhận.
MQTT là giao thức định hướng bản tin. Mỗi bản tin là một đoạn rời rạccủa tín hiệu và broker khơng thể nhìn thấy. Mỗi bản tin được publish một địachỉ, có thể hiểu như một kênh (Topic). Client đăng kí vào một vài kênh đểnhận/gửi dữ liệu, gọi là subscribe. Client có thể subscribe vào nhiều kênh. Mỗiclient sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gửi dữ liệu vào kênh đãđăng ký. Khi một client gửi một bản tin đến một kênh nào đó gọi là publish.
<b>3.3 Cơ chế thành phần</b>
<small>Hình 3.2: Cơ chế thành phần</small>
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Thành phần chính của MQTT là Client (Publisher/Subscriber), Server(Broker), Sessions (tạm dịch là Phiên làm việc), Subscriptions và Topics.
o MQTT Client (Publisher/Subscriber): Clients sẽ subscribe một hoặcnhiều topics để gửi và nhận thông điệp từ những topic tương ứng.o MQTT Server (Broker): Broker nhận những thông tin subscribe
(Subscriptions) từ client, nhận thông điệp, chuyển những thông điệpđến các Subscriber tương ứng dựa trên Subscriptions từ client.
o Topic: Có thể coi Topic là một hàng đợi các thơng điệp, và có sẵnkhn mẫu dành cho Subscriber hoặc Publisher. Một cách logic thì cáctopic cho phép Client trao đổi thông tin với những ngữ nghĩa đã đượcđịnh nghĩa sẵn. Ví dụ: Dữ liệu cảm biến nhiệt độ của một tòa nhà.o Session: Một session được định nghĩa là kết nối từ client đến server.
Tất cả các giao tiếp giữa client và server đều là 1 phần của session.o Subscription: Không giống như session, subscription về mặt logic là
kết nối từ client đến topic. Khi đã subscribe một topic, Client có thểnhận/gửi thơng điệp (message) với topic đó.
<b>IV. Bảo mật trong MQTT</b>
Bảo mật trong MQTT được chia thành nhiều lớp. Mỗi lớp có tác dụng ngănngừa các kiểu tấn cơng khác nhau.
Thơng thường có 3 lớp bảo mật được sử dụng:o Lớp mạng (Network layer)
o Lớp giao vận (Transport layer)o Lớp ứng dụng (Application layer)
<b>4.1 Bảo mật lớp ứng dụng (Application Layer Sercurity)</b>
<i><b>4.1.1. Xác thực với Username và Pasword:</b></i>
Xác thực (authentication) là một phần của cơ chế bảo mật ở tầng giao vận vàtầng ứng dụng được sử dụng trong giao thức MQTT, là hành động nhằm xácnhận sự thật hay nguồn gốc của một thuộc tính của một đơn vị dữ liệu hoặcmột thực thể nào đó. Khi nói đến xác thực trong giao thức MQTT, bản thângiao thức cung cấp các trường username (tên người dùng) và password (mậtkhẩu) trong gói tin CONNECT từ client gửi đến broker. Nghĩa là một clientcó khả năng gửi một username và password khi kết nối đến MQTT broker.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8"><small>CONNECT message</small>
Trường username là một chuỗi có định dạng UTF-8 và trường password là dữ liệu nhị phân với kích thước tối đa là 65535 bytes. Sự bất cập trong phiên bản MQTT v3.1 là sử dụng mật khẩu với 12 ký tự đã được bãi bỏ ở phiên bản MQTT v3.1.1. Ngoài ra phiên bản này cũng định nghĩa rằng: một client có thể có username mà không cần password nhưng không thể tồn tại trạng thái ngược lại. Khi sử dụng xác thực bằng tên người dùng và mật khẩu, MQTT broker sẽ đánh giá thông tin client dựa trên cơ chế xác thực đã được triễn khai và gửi trả về gói tin phản hồi gọi là CONNACK, trong đó bao gồmmột mã trạng thái gọi là return code.
<small>CONNACK message</small>
Các mã trạng thái được sử dụng để phản hồi về client đối với xác thực bằng username/password là:
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><i><b>4.1.2 Xác thực với Client Identifier</b></i>
Mỗi MQTT client đều có một mã nhận dạng duy nhất được gọi là client identifier. Tương tự như Username/Password, mã nhận dạng này cũng được cung cấp bởi client khi gửi một gói tin CONNECT đến broker, được cung cấp trong trường clientid. Giá trị của trường có thể chứa tối đa 65535 ký tự, trường hợp thường được sử dụng trong thực tế để thể hiện giá trị của trường clientid là sử dụng chuẩn UUID gồm 36 ký tự để tạo ra các giá trị random không trùng nhau hoặc sử dụng địa chỉ MAC của thiết bị. Và trong gói tin phản hồi kết nối CONNACK, cũng sẽ bao gồm mã trạng thái, tất cả các trạngthái trả về được cho trong bảng sau:
Trong quá trình xác thực, mã nhận dạng của client thường được sử dụng để xác thực bên cạnh tên người dùng và mật khẩu. Mặc dù không phải là cách thức bảo mật tốt khi sử dụng trong thực tiễn tuy nhiên đối với các hệ thống khép kín và ít thiết bị thì loại xác thực này cũng đủ để chúng ta cân nhắc sử dụng.
<b>4.2 Bảo mật lớp giao vận (Transport Layer Sercurity)</b>
Thông thường giao thức MQTT dựa vào TCP làm giao thức tầng giao vận, nghĩa là mặc định kết nối giữa broker và client là kết nối khơng bảo mật. Để tăng tính bảo mật và có khả năng mã hóa các kênh giao tiếp, hầu hết các MQTT broker hiện nay như Mosquitto, HiveMQ đều cho phép sử dụng TLS. Port 8883 được chuẩn hóa để sử dụng cho kết nối MQTT có bảo mật.
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><small>Minh họa SSL/TLS handshake</small>
<b>4.3 Bảo mật lớp mạng (Network layer)</b>
Sử dụng một mạng bảo mật vật lý hoặc công nghệ VPN (virtual private network) làm nền tảng cho quá trình giao tiếp giữa các Client và Broker nhằm cung cấp một kết nối an toàn và đáng tin cậy.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Trong phần này thì nhóm em sử dụng phần mềm cisco packet tracer để thực hiệnmơ phỏng và cấu hình MQTT broker và MQTT client.
Bắt đầu vào bài lab thì ta thực hiện lấy thiết bị có sẵn trong cisco
Khởi tạo MQTT broker, rồi kết nối với switch và SBC
Triển khai cơ bản các thiết bị như trên hình để tiến hành cấu hìnhTiếp theo là ta sẽ định tuyến địa chỉ IP cho các thiết bị
Đặt địa chỉ MQTT broker là 1.1.1.1
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">Tiếp theo lần lượt là SBC0 và cấp ip động cho các thiết bị truy cập qua wifi theoaccess point
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Từ đó ta sẽ thấy smartphone được cấp phát địa chỉ 1.1.1.11 từ DHCP
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><b>Tiếp theo là truy cập vào programming tạo new rồi tạo MQTT broker và chọn </b>
code python, cisco sẽ hỗ trợ template có sẵn và install desktop rồi run code
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">Tương tự như vậy rồi cài đặt cho các SBC và smartphone tương tự
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">Rồi truy cập vào MQTT broker trong giao diện desktop
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">Tương tự như vậy ta thực hiện với các SBC là client và publisher và subcriber
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">Tiếp tục tạo ra các client bạn muốn và kết nối với broker và code điều khiển thiết bị bạn muốn sử dụng
Sau khi xây dựng các client và broker thì chúng ta code các hàm lấy dữ liệu từ cảm biến và publish lên MQTT broker
Khởi tạo đầu ra vào dữ liệu cho các chân sensor
Sau khi cấu hình thành cơng và khởi chạy ta sẽ thu được các topic của nhiệt độ và độ ẩm, độ ẩm đất
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">Tiếp theo là dùng các điều kiện vào hàm on_message để khởi tạo điều kiện cho các thiết bị chạy tự động
Kết quả cuối cùng ta sẽ thu được 1 hệ thống mô phỏng ngôi nhà thông sử dụng giao thức MQTT với các thiết bị được setup chạy tự động với 1 điều kiện cho trước.
</div>