تکنولوژی

MQTT چیست؟ آموزش کامل معماری پروتکل MQTT

MQTT یک پروتکل تبادل پیام سبک است که امکان ارتباط تجهیزات با منابع محاسباتی محدود با یکدیگر را به سادگی فراهم می سازد. این پروتکل، که از الگوی ارتباطی انتشار-اشتراک (publish-subscribe) استفاده می کند، برای ارتباطات دستگاه به دستگاه (M2M) استفاده می شود و در اینترنت اشیاء (IoT) نقش مهمی دارد.

پروتکل MQTT یک انتخاب خوب برای شبکه های بی سیم است که سطوح مختلف تاخیر را به دلیل محدودیت های پهنای باند یا اتصالات غیر قابل اطمینان، تجربه می کنند.

شاید برای شما سوال باشد که MQTT مخفف چیست، باید گفت که MQTT مخفف MQTT-MQ-Telemetry-Transport است.

پروتکل MQTT دو موضوع را احاطه کرده است: گیرنده (client) و رابط (broker).

رابط MQTT یک سرور است، در حالی که گیرنده دستگاه های متصل هستند. هنگامی که دستگاهی (یا سرویس گیرنده) بخواهد داده ها را به یک سرور (یا رابط) ارسال کند، انتشار (publish) نامیده می شود. وقتی عملیات معکوس شد، به آن اشتراک (subscribe) می گوییم.

برای یادگیری کامل آردوینو ، روی دوره آموزش آردوینو و برای یادگیری کامل الکترونیک، روی دوره آموزش الکترونیک کلیک کنید.

اگر ارتباط مشترک گیرنده با رابط قطع شود، رابط پیام ها را بافر کرده و پس از آنلاین شدن، آن ها را به گیرنده منتقل می کند. اگر ارتباط از گیرنده انتشار دهنده به رابط بدون اطلاع قبلی قطع شود، رابط می تواند اتصال را ببندد و با دستورالعمل ناشر یک پیام ذخیره شده را به مشترکان ارسال کند.

معماری و مخفف پروتکل MQTT

در حالی که TT در MQTT مخفف انتقال از راه دور است، منظور از MQ محصولی به نام IBM MQ است.

MQTT چگونه کار می کند؟

یک دوره MQTT به چهار مرحله تقسیم می شود: اتصال، احراز هویت، ارتباط و خاتمه. گیرنده با ایجاد اتصال انتقال پروتکل / پروتکل اینترنت (TCP / IP) به رابط با استفاده از پورت استاندارد یا پورت سفارشی تعریف شده توسط اپراتور های رابط شروع می کند. هنگام ایجاد اتصال، مهم است که تشخیص دهیم سرور ممکن است یک نشست قدیمی را در صورتی ادامه دهد که شناسه (هویت) گیرنده دوباره مورد استفاده قرار گیرد.

پورت های استاندارد برای ارتباطات غیر رمزگذاری شده 1883 و برای ارتباطات رمزگذاری شده 8883 هستند، با استفاده از لایه سوکت های امن (SSL) / امنیت لایه حمل و نقل (TLS). در طی SSL / TLS، گیرنده گواهی نامه سرور را تأیید می کند و اعتبار سرور را تعیین می کند. گیرنده همچنین می تواند در هنگام ارتباط برقرار کردن گواهی نامه را به رابط ارائه دهد. رابط می تواند از این امر برای احراز هویت گیرنده استفاده کند. اگرچه به طور خاص بخشی از مشخصات MQTT نیست، اما معمولاً رابط ها از احراز هویت گیرنده با گواهی نامه های سمت گیرنده SSL / TLS پشتیبانی می کنند.

از آنجا که پروتکل MQTT قصد دارد یک پروتکل برای دستگاه های محدود کننده منابع و اینترنت اشیا باشد، ممکن استSSL / TLS همیشه یک گزینه مطلوب نباشد. در چنین مواردی، احراز هویت به عنوان نام کاربری و رمز عبور ارائه می شود، که توسط گیرنده به سرور ارسال می شود. این، به عنوان بخشی از ردیف بسته CONNECT / CONNACK است. علاوه بر این، برخی از رابط ها، به ویژه رابط های آزاد منتشر شده در اینترنت، گیرنده های ناشناس را می پذیرند. در چنین مواردی، نام کاربری و رمز عبور به سادگی خالی می مانند.

MQTT پروتکل سبک نامیده می شود زیرا تمام پیام های آن دارای کد کوچک است. هر پیام از یک قسمت ثابت (2 بایت) و یک قسمت متغیر اختیاری تشکیل شده است، حداکثر بار مفید پیام به 256 مگابایت (MB) اطلاعات و سطح کیفیت خدمات (QoS) محدود می شود.

مطلب پیشنهادی:  تشخیص شماره پلاک خودرو با متلب و پردازش تصویر

در طول مرحله ارتباط، گیرنده می تواند عملیات انتشار، اشتراک، لغو اشتراک و پینگ را انجام دهد. عملیات انتشار یک بلوک باینری از داده ها (محتوا) را به موضوعی می فرستد که توسط ناشر تعریف شده است.

نحوه کار پروتکل MQTT

MQTT از اشیاء بزرگ دودویی پیام (BLOB) تا اندازه 256 مگابایت پشتیبانی می کند. قالب محتوا مختص برنامه خواهد بود. اشتراک موضوعات با استفاده از یک جفت بسته SUBSCRIBE / SUBACK انجام می شود و لغو اشتراک به همین ترتیب با استفاده از یک بسته UNSUBSCRIBE / UNSUBACK انجام می شود.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

عملیات دیگری که گیرنده می تواند در مرحله ارتباطات انجام دهد، پینگ کردن سرور رابط با استفاده از توالی بسته PINGREQ / PINGRESP است. این عملیات عملکرد دیگری به جز حفظ اتصال زنده و اطمینان از قطع شدن اتصال TCP توسط درگاه یا روتر ندارد.

وقتی ناشر یا مشترکی می خواهد نشست MQTT را خاتمه دهد، پیام DISCONNECT را به رابط ارسال می کند و سپس اتصال را قطع می کند. این کار خاموش کردن مطلوب نامیده می شود، زیرا به گیرنده این امکان را می دهد تا با ارائه هویت خود و از سرگیری در جایی که متوقف شده است، به راحتی وصل شود.

اگر قطع ارتباط ناگهانی و بدون وقت برای ناشر برای ارسال پیام DISCONNECT اتفاق بیفتد، رابط ممکن است پیامی را از ناشر به مشترکان ارسال کند که رابط قبلاً آن را پنهان کرده است. این پیام که آخرین پیام نامیده می شود، به مشترکین دستورالعمل هایی را ارائه می دهد که اگر ناشر به طور غیرمنتظره از بین رفت، چه کاری انجام دهند.

پروتکل MQTT چیست

تاریخچه پروتکل MQTT

MQTT توسط دکتر اندی استنفورد کلارک از IBM و آرلن نیپر از Arcom در سال 1999 ایجاد شد. MQTT به عنوان یک روش مقرون به صرفه و قابل اعتماد برای اتصال دستگاه های نظارتی مورد استفاده در صنایع نفت و گاز به سرور های کنترل از راه دور ساخته شده است. سرور های سازمانی هنگامی که با یافتن راهی برای انتقال داده ها از سنسورهای خط لوله در کویر به سیستم های کنترل نظارت و کسب داده های خارج از سایت (SCADA) به چالش کشیدند، آن ها تصمیم گرفتند که یک توپولوژی انتشار / اشتراک مبتنی بر TCP / IP را که برای حفظ آن هدایت می شود، داشته باشند تا هزینه انتقال لینک ماهواره ای کاهش یابد.

اگرچه MQTT هنوز با IBM ارتباط نزدیک دارد، اما اکنون یک پروتکل آزاد است که توسط سازمان پیشرفت استانداردهای اطلاعاتی ساخت یافته (OASIS) نظارت می شود.

اگرچه نام آن نشان می دهد اما MQTT بخشی از IBM MQSeries اصلی نیست. با این وجود، از نسخه 7.1، در WebSphere MQ موجود است. MQTT قبلاً به عنوان پروتکل SCADA، پروتکل دستگاه SCADA انتگرال گیر MQ (MQlsdp) و (WebSphere MQTT (WMQTTشناخته می شد، اگرچه همه این تغییرات از استفاده خارج شده اند.

کاربرد پروتکل MQTT

فیس بوک در حال حاضر از MQTT برای برنامه Messenger خود استفاده می کند، نه تنها به این دلیل که پروتکل در هنگام پیام رسانی تلفن همراه باعث صرفه جویی در مصرف باتری می شود، بلکه همچنین به این دلیل که پروتکل با وجود عدم اتصال متناسب به اینترنت در سراسر جهان، پیام ها را به راحتی در میلی ثانیه تحویل می دهد.

کاربرد پروتکل ارتباطی اینترنت اشیا MQTT

اکثر ارائه دهندگان خدمات ابری اصلی، از جمله خدمات وب آمازون (AWS)، گوگل، IBM و مایکروسافت Azure، از MQTT پشتیبانی می کنند.

MQTT برای کاربرد هایی با استفاده از دستگاه های M2M و IoT به منظور تجزیه و تحلیل در زمان واقعی، نگهداری و نظارت بر پیشگیری در محیط ها، از جمله خانه های هوشمند، مراقبت های بهداشتی، تدارکات، صنعت و تولید مناسب است.

MQTT در اینترنت اشیا

MQTT یکی از پروتکل های رایج در مورد IoT است. MQTT دستگاه های اینترنت اشیا، ابزار های مبتنی به منابع را قادر می سازد تا اطلاعات مربوط به یک موضوع خاص را به سرور که به عنوان یک رابط پیام MQTT فعالیت می کند ارسال یا منتشر کنند. سپس رابط اطلاعات را به مشتریانی که قبلاً در این موضوع مشترک بوده اند انتقال می دهد.

مطلب پیشنهادی:  کویل تسلا چیست؟ آموزش ساخت کویل تسلا و لامپ

به عنوان مثال، سیستم عامل های حمل و نقل ها، Evrything و ThingWorx IoT از پروتکل MQTT پشتیبانی می کنند.

پروتکل های رقابتی

سایر پروتکل های انتقال که با MQTT رقابت می کنند شامل موارد زیر است:

  • پروتکل کاربردی محدود (CoAP) پروتکل دیگری است که برای اینترنت اشیا مناسب است. CoAP همچنین از الگوی ارتباطی درخواست/پاسخ استفاده می کند.
    پروتکل صف پیشرفته پیام (AMQP)، مانند MQTT، از الگوی ارتباطی انتشار/اشتراک استفاده می کند.
  • پروتکل پیام متنی ساده/جریان دار (STOMP) یک پروتکل مبتنی بر متن است. با این حال، STOMP با صف و موضوعات سر و کار ندارد. از یک معنای ارسال با یک رشته مقصد استفاده می کند.
  • Mosquitto یک رابط منبع باز MQTT است.
  • پروتکل کنترل رسانه ساده (SMCP) یک توده ارتباطی است که در محیط های تعبیه شده استفاده می شود. SMCP همچنین بر اساس C است.
  • SSI (رابط سنسور ساده) یک پروتکل ارتباطی برای انتقال داده بین ترکیبی از کامپیوتر ها و حسگر ها است.
  • سرویس توزیع داده (DDS) برای سیستم های بی درنگ یک استاندارد میان افزار است که می تواند ارتباطات را به صورت مستقیم یا مستقل در سیستم های تعبیه شده منتشر کند.

مزایا و معایب MQTT

MQTT در مقایسه با پروتکل های رقیب چند مزیت و معایب مشخص دارد. مزایا شامل موارد زیر است:

  • انتقال داده کارآمد و پیاده سازی سریع به دلیل داشتن پروتکل سبک
  • استفاده کم از شبکه، به دلیل اینکه بسته های داده به حداقل رسیده است.
  • توزیع کارآمد داده ها
  • اجرای موفقیت آمیز سنجش کنترل از راه دور
  • ارسال سریع و کارآمد پیام
  • استفاده از مقادیر کم انرژی، که برای دستگاههای متصل خوب است.
  • کاهش پهنای باند شبکه.

نکات منفی احتمالی MQTT شامل موارد زیر است:

  • MQTT در مقایسه با CoAP چرخه انتقال کندتری دارد.
  • کشف منابع MQTT بر روی انتشار موضوعات انعطاف پذیر کار می کند، در حالی که CoAP از یک سیستم کشف منابع پایدار استفاده می کند.
  • MQTT رمزگذاری نشده است. در عوض، برای رمزگذاری امنیتی از TLS / SSL استفاده می کند.
  • ایجاد شبکه ای با مقیاس جهانی در مقیاس جهانی دشوار است.

چالش های MQTT: امنیت، قابلیت همکاری و احراز هویت

از آنجا که پروتکل MQTT با در نظر گرفتن امنیت ذهنی طراحی نشده است، از این پروتکل به طور سنتی در شبکه های امن و بی پایان برای اهداف خاص برنامه استفاده می شود. ساختار موضوعی MQTT به راحتی می تواند یک درخت عظیم را تشکیل دهد و هیچ روش روشنی برای تقسیم درخت به قسمت های کوچکتر وجود ندارد که بتواند یکپارچه باشد. این امر ایجاد شبکه ای با مقیاس جهانی در مقیاس جهانی را دشوار می کند زیرا، با بیشتر شدن موضوع، پیچیدگی افزایش می یابد.

یکی دیگر از جنبه های منفی MQTT عدم قابلیت همکاری آن است. از آنجا که محموله های پیام باینری هستند و هیچ اطلاعاتی در مورد نحوه رمزگذاری آن ها وجود ندارد، ممکن است مشکلاتی بوجود آید، به ویژه در معماری های باز که برنامه های مختلف از سازندگان مختلف قرار است به طور یکپارچه با یکدیگر کار کنند.

همانطور که قبلاً اشاره شد، MQTT حداقل ویژگی های تأیید اعتبار را در پروتکل دارد. نام های کاربری و رمز های عبور به صورت متن ارسال می شوند و هر نوع استفاده ایمن از MQTT باید از SSL / TLS استفاده کند، که متأسفانه پروتکل سبک نیست.

احراز هویت گیرنده با گواهینامه های سمت گیرنده فرایند ساده ای نیست و در MQTT راهی برای کنترل اینکه چه کسی دارای یک موضوع است و چه کسی می تواند اطلاعات را در آن منتشر کند وجود ندارد، مگر اینکه از ابزار اختصاصی و خارج از باند استفاده کند. با این کار تزریق پیام های مضر به شبکه، خواسته یا اشتباه باعث سهولت می شود.

مطلب پیشنهادی:  استفاده از PWM در لانچ پد MSP430 و کنترل نور LED

بعلاوه، هیچ راهی برای گیرنده پیام وجود ندارد که بداند چه کسی پیام اصلی را ارسال کرده است، مگر اینکه این اطلاعات در پیام واقعی موجود باشد. ویژگی های امنیتی که باید در بالای MQTT به صورت اختصاصی اجرا شود، مکان کامپیوتری کد را افزایش می دهد و پیاده سازی را دشوارتر می کند.

سطح کیفیت خدمات MQTT

QoS به توافق بین فرستنده پیام و گیرنده پیام اشاره دارد. QoS ضمانت تحویل کالا را با یک پیام خاص تعریف می کند. QoS به عنوان یک ویژگی اصلی در MQTT عمل می کند، به گیرنده این امکان را می دهد که بین سه سطح خدمات را انتخاب کند.

سه سطح QoS، نحوه مدیریت محتوا توسط پروتکل MQTT را تعیین می کند. اگرچه سطح بالاتر QoS از قابلیت اطمینان بیشتری برخوردار است، اما آن ها تاخیر و پهنای باند بیشتری دارند، بنابراین گیرنده های مشترک می توانند بالاترین سطح از QoS را که می خواهند دریافت کنند تعیین کنند.

سطح کیفیت خدمات MQTT

ساده ترین سطح QoS، خدمات تأیید نشده است. این سطح QoS از توالی بسته PUBLISH استفاده می کند. ناشر یک بار برای رابط پیام ارسال می کند و رابط یک بار پیام را به مشترکان منتقل می کند. هیچ مکانیزمی برای اطمینان از دریافت صحیح پیام وجود ندارد و رابط پیام را ذخیره نمی کند. این سطح QoS همچنین ممکن است حداکثر یک بار یا QoS0 گفته شود.

سطح دوم QoS خدمات تأیید شده است. این سطح QoS از توالی بسته PUBLISH / PUBACK بین ناشر و رابط آن و همچنین بین رابط و مشترکان استفاده می کند. یک بسته تأیید می کند که محتوا دریافت شده است و اگر یک تأیید به موقع دریافت نشود، یک مکانیسم تلاش مجدد محتوای اصلی را دوباره ارسال می کند. این ممکن است منجر به دریافت مشترک چندین نسخه از پیام یکسان شود. این سطح QoS همچنین ممکن است حداقل یک بار یا QoS1 گفته شود.

سطح سوم QoS خدمات مطمئن است. این سطح QoS پیام را با دو جفت بسته ارائه می دهد. جفت اول PUBLISH / PUBREC و جفت دوم PUBREL / PUBCOMP نام دارد. این دو جفت اطمینان حاصل می کنند که صرف نظر از تعداد تلاش مجدد، پیام فقط یکبار تحویل داده می شود. این سطح QoS همچنین ممکن است دقیقاً یک بار یا QoS2 نیز شناخته شود.

مشخصات فنی

MQTT بسته به نسخه خاص مشخصات متفاوتی دارد. نسخه 5.0 جایگزین آخرین نسخه MQTT، نسخه 3.1.1 شد. برخی از مشخصات جدید، همانطور که توسط OASIS تعریف شده است، شامل موارد زیر است:

  • استفاده از الگوهای پیام publish / subscribe (انتشار / اشتراک)
  • مکانیزمی که می تواند هنگام قطع غیرعادی کاربران را مطلع کند
  • سه سطح ارسال پیام: حداکثر یک بار، حداقل یک بار و دقیقاً یک بار
  • به حداقل رساندن مبادلات سربار و پروتکل حمل و نقل برای کاهش ترافیک شبکه
  • و یک پیام رسان agnostic با اشاره به محتوای محموله

به روزرسانی های MQTT

MQTT در 28 اکتبر 2015 رسماً به عنوان استاندارد OASIS تأیید شد. در پایان ژانویه 2016، به عنوان استاندارد سازمان بین المللی (ISO) پذیرفته شد. پروتکل به طور مداوم در حال بهبود است و اکنون از WebSockets پشتیبانی می کند، پروتکل دیگری که امکان ارتباط دو طرفه بین گیرنده ها و رابط ها را در زمان واقعی فراهم می کند. بعداً، نسخه های قابل توجه شامل استاندارد v3.1.1 و استاندارد v5.0 بودند که هر دو به عنوان استاندارد OASIS تأیید شده اند. به عنوان نمونه ای از برخی از به روزرسانی ها، نسخه 5.0 شامل گزارش خطای بهتر، از جمله فراداده در سرصفحه پیام ها، اشتراک های مشترک، انقضا پیام و نشست و نام مستعار موضوع است.

میخواهید برنامه نویسی STM32 را یاد بگیرید؟

دوره آموزش STM32

میخواهید الکترونیک را یاد بگیرید؟

دوره آموزش الکترونیک
دوره آموزش آردوینو

میخواهید آردوینو را به صورت پروژه محور یاد بگیرید؟ برای مشاهده توضیحات روی دوره مورد نظر کلیک کنید

برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام آیرنکس عضو شوید.

محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید) سعی میکنم تمام نظرات را پاسخ دهم.

1 دیدگاه

  1. سلام ممنون از آموزش خوبتون.
    MQTT حداکثر از چند کلاینت پشتیبانی میکنه؟ مثلا شبکه ای با 100000 نود رو میتونه پاسخگو باشه؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *