در این مقاله با پروتکل شبکه ی MQTT آشنا می شویم و در پایان نیز طریقه ی فعال سازی این پروتکل بر روی یک Virtual Machine را به صورت مرحله به مرحله طی میکنیم.
پروتکل MQTT چیست؟
پروتکل شبکه ی MQTT (Message Queuing Telemetry Transport) پروتکل پیام رسانی استاندارد در اینترنت اشیا (Internet of Things) می باشد . این پروتکل کم حجم، بر پایه ی انتشار/اشتراک و یا همان Publish/Subscribe می باشد که برای پیام رسانی بین دستگاه ها ازین پروتکل استفاده می شود و مطابق آمار این پروتکل پر استفاده ترین پروتکل در اینترنت اشیا (IoT) می باشد. همچنین این پروتکل بیشترین سازگاری را برای اجرا با پروتکل TCP/IP دارد، ولی با این حال هر پروتکل دیگری که ارتباط دو جهتی را فراهم کند میتواند از MQTT پشتیبانی کند.
چرا MQTT ؟
– سبک و کار آمد
سرویس گیرنده های MQTT بسیار کوچک هستند ، به حداقل منابع نیاز دارند تا بتوان از آنها در میکروکنترلرهای کوچک استفاده کرد. و برای استفاده در پهنای باند محدود پیکر بندی شده است.
– ارتباط دو طرفه
پروتکل MQTT یک ارتباط دو طرفه برای پیام رسانی میان دستگاه و فضای ابری و بالعکس ایجاد میکند و همین امر باعث سهولت در پیام رسانی میگردد.
– با ثبات در ارسال پیام
با ثبات بودن و سطح اطمینان بالا در پیام رسانی در اینترنت اشیا مهم است. به همین دلیل است که MQTT دارای 3 سطح کیفیت خدمات تعریف شده است:
حداکثر یک بار ،حداقل یک بار ،دقیقاً یک بار
– مناسب برای شبکه های پرنوسان
بسیاری از دستگاه ها در اینترنت اشیا از طریق شبکه های تلفن همراه که پایداری پایینی دارند متصل می شوند. پشتیبانی MQTT از جلسات مداوم، زمان اتصال مجدد کاربر با بروکر را کاهش می دهد.
– امنیت بالا
MQTT از رمزگذاری دیتا با استفاده از پروتکل TLS استفاده میکند و احراز هویت سرویس گیرنده با استفاده از پروتکل های مدرن احراز هویت ، مانند OAuth را آسان می کند.
معماری انتشار/اشتراک در پروتکل MQTT
در پروتکل MQTT دو رکن اساسی وجود دارد که شامل کلاینت ( کاربر) و یک اتصال دهنده (سرور) می باشد، که کاربر به سرور متصل می شود که به این سرور در اصطلاح Brokerگفته می شود. پروتکل MQTT بر پایه ی Publish و Subscribe می باشد. در معماری انتشار و اشتراک کاربر میتواند نقش یک انتشار دهنده اطلاعات ( Publisher ) و یا دریافت کننده اطلاعات را داشته باشد. دیتا در تاپبکها (Topics) مرتب شده است. زمانیکه کاربر دیتای جدیدی را منتشر میکند، یک پیام کنترل با دیتا به واسط اتصال دهنده یا همان Broker ارسال میکند. واسطها ( Broker) دیتا را به هر کاربری که در آن تاپیک مشترک است، توزیع میکند. انتشار دهنده نیازی به دانستن تعداد و محل مشترکین (Subscriber) ها ندارد .
تاپیک ها، تگ هایی است که توسط Broker برای فیلتر کردن پیام ها برای هرکاربر که به بروکر متصل است استفاده می شود.
Mosquitto چیست؟
Mosquitto در پروتکل MQTT یک واسط (broker) پیام open source است که پروتکل های MQTT را پیاده سازی می کند. با پشتیبانی خوب، سهولت در نصب ، به یکی از محبوب ترین بروکر های MQTT تبدیل شده است.
نحوه ی نصب و پیکربندی یک سرور Mosquitto بر روی سیستم عامل Ubuntu 16.4
پیش نیازها :
- یک سرور اوبونتو 16.04 با دسترسی root
- باز کردن پورت TCP: 1883 در فایروال
قدم اول : نصب سرویس Mosquitto بر روی سرور
با استفاده از دستور های زیر ابتدا پکیج های OS را اپدیت کرده و سپس آخرین نسخه ی Mosquitto را نصب نمایید سرویس mosquito پس از نصب به صورت خودکار فعال میگردد.:
sudo apt-get update
sudo apt-get install mosquitto
قدم دوم : نصب MQTT Client
mosquitto clients به ما کمک میکند تا از طریق command line اقدام به تست پروتکل MQTT بپردازیم.
برای تست این مورد از دو command line استفاده میکنیم یکی برای به اشتراک گذاشتن تاپیک “تست” و از command line دیگر برای نشر دیتا استفاده میکنیم.
برای نصب Mosquitto clients از کامند زیر استفاده می کنیم:
sudo apt-get install mosquitto-clients
برای به اشتراک گذاشتن یک تاپیک به عنوان “تست” از کامند زیر استفاده می شود:
"mosquitto_sub -t "test
و برای منتشر کردن یک پیام در تاپیک تست ایجاد شده از کامند زیر استفاده می شود:
به عنوان سرور دوم به ترمینال سرور وارد شوید و یک پیام را از طریق کامند زیر در تاپیک “تست” منتشر نمایید.
"mosquitto_pub -m "message from mosquitto_pub client" -t "test
قدم سوم : بالا بردن امنیت سرویس با تنظیم کردن یک پسوورد
برای ست کردن یک پسوورد بر روی سرویس mosquitto از طریق کامند زیر عمل میکنیم:
sudo mosquitto_passwd -c /etc/mosquitto/passwd dave
Password: password
پس از ست کردن پسوورد از طریق کامند زیر لازم است یک فایل کانفیگ برای mosquitto ایجاد نماییم که به فایل پسووردی که ایجاد کردیم اشاره داشته باشید:
sudo nano /etc/mosquitto/conf.d/default.conf
در فایل کانفیگ ساخته شده پارامترهای زیر را وارد کرده و فایل را ذخیره کرده و خارج شوید.
allow_anonymous false
password_file /etc/mosquitto/passwd
سپس از طریق دستور زیر سرویس mosquitto را یک مرتبه ریستارت میکنیم و تغییرات اعمال شده را بررسی میکنیم.
sudo systemctl restart mosquitto
در حال حاضر از طریق دستور زیر میتوانیم اقدام به انتشار یک پیام از با استفاده از user name و password نماییم:
"mosquitto_pub -t "test" -m "message from mosquitto_pub client" -u "dave" -P "password
ما اکنون یک سرور MQTT محافظت شده با رمز عبور تنظیم کرده ایم. می توانید از IP سرور اوبونتو خود به عنوان بروکرMQTT برای پروژه های خود استفاده کنید.
با تشکر از همراهی شما برای مشاهده ی مقاله های بیشتر میتوانید بخش مقالات را مطالعه بفرمایید.