MQTT چیست؟
MQTT یک پروتکل پیامرسانی استاندارد مبتنی بر قواعد است که برای ارتباط ماشین به ماشین (M2M) استفاده میشود. حسگرهای هوشمند، پوشیدنیها و سایر دستگاههای اینترنت اشیا (IoT) معمولاً باید دادهها را از طریق یک شبکه با منابع محدود و پهنای باند کم ارسال و دریافت کنند. این دستگاههای IoT از MQTT برای انتقال داده استفاده میکنند، زیرا پیادهسازی آن آسان است و میتواند دادههای IoT را به طور کارآمد منتقل کند. MQTT از پیامرسانی بین دستگاهها و ابر و ابر و دستگاه پشتیبانی میکند.
چرا پروتکل MQTT مهم است؟
پروتکل MQTT به دلیل ارائه مزایای زیر به یک استاندارد برای انتقال دادههای IoT تبدیل شده است:
- سبک و کارآمد:
- پیادهسازی MQTT روی دستگاه IoT به حداقل منابع نیاز دارد، بنابراین حتی میتوان از آن در میکروکنترلرهای کوچک نیز استفاده کرد. به عنوان مثال، یک پیام کنترلی حداقل MQTT میتواند به اندازه دو بایت داده باشد. هدرهای پیام MQTT نیز کوچک هستند، بنابراین میتوانید پهنای باند شبکه را بهینه کنید.
- مقیاسپذیر:
- پیادهسازی MQTT به مقدار کمی کد نیاز دارد که در عملیات، توان بسیار کمی مصرف میکند. این پروتکل همچنین دارای ویژگیهای داخلی برای پشتیبانی از ارتباط با تعداد زیادی دستگاه IoT است. بنابراین، میتوانید پروتکل MQTT را برای اتصال به میلیونها از این دستگاهها پیادهسازی کنید.
- قابل اعتماد:
- بسیاری از دستگاههای IoT از طریق شبکههای سلولی غیرقابل اعتماد با پهنای باند کم و تأخیر بالا متصل میشوند. MQTT دارای ویژگیهای داخلی است که زمان اتصال مجدد دستگاه IoT به ابر را کاهش میدهد. همچنین سه سطح کیفیت خدمات مختلف را برای اطمینان از قابلیت اطمینان برای موارد استفاده IoT تعریف میکند: حداکثر یک بار (۰)، حداقل یک بار (۱) و دقیقاً یک بار (۲).
- امن:
- MQTT رمزگذاری پیامها و احراز هویت دستگاهها و کاربران را با استفاده از پروتکلهای احراز هویت مدرن مانند OAuth، TLS1.3، گواهیهای مدیریت شده توسط مشتری و موارد دیگر برای توسعهدهندگان آسان میکند.
- پشتیبانی خوب:
- زبانهای متعددی مانند پایتون از پیادهسازی پروتکل MQTT پشتیبانی گستردهای میکنند. بنابراین، توسعهدهندگان میتوانند به سرعت آن را با حداقل کدنویسی در هر نوع برنامهای پیادهسازی کنند.
تاریخچه پروتکل MQTT چیست؟
پروتکل MQTT در سال ۱۹۹۹ برای استفاده در صنعت نفت و گاز اختراع شد. مهندسان به پروتکلی با حداقل پهنای باند و حداقل تلفات باتری برای نظارت بر خطوط لوله نفت از طریق ماهواره نیاز داشتند. در ابتدا، این پروتکل به دلیل محصول IBM MQ Series که برای اولین بار از مرحله اولیه آن پشتیبانی کرد، به عنوان انتقال تلهمتری صف پیام شناخته میشد. در سال ۲۰۱۰، IBM نسخه ۳.۱ MQTT را به عنوان یک پروتکل رایگان و باز برای پیادهسازی توسط هر کسی منتشر کرد، که در سال ۲۰۱۳ برای نگهداری به سازمان استانداردسازی اطلاعات ساختاریافته (OASIS) ارسال شد. در سال ۲۰۱۹، نسخه ارتقا یافته ۵ MQTT توسط OASIS منتشر شد. اکنون MQTT دیگر یک سرواژه نیست، بلکه نام رسمی پروتکل در نظر گرفته میشود.
اصل پشت MQTT چیست؟
پروتکل MQTT بر اساس اصول مدل انتشار/اشتراک کار میکند. در ارتباطات شبکه سنتی، مشتریان و سرورها به طور مستقیم با یکدیگر ارتباط برقرار میکنند. مشتریان منابع یا دادهها را از سرور درخواست میکنند، سپس سرور پردازش میکند و پاسخ را برمیگرداند. با این حال، MQTT از الگوی انتشار/اشتراک برای جداسازی فرستنده پیام (ناشر) از گیرنده پیام (مشترک) استفاده میکند. در عوض، یک مؤلفه سوم به نام کارگزار پیام، ارتباط بین ناشران و مشترکان را مدیریت میکند. وظیفه کارگزار، فیلتر کردن تمام پیامهای ورودی از ناشران و توزیع صحیح آنها به مشترکان است. کارگزار ناشران و مشترکان را به شرح زیر جدا میکند:
- جداسازی فضایی:
- ناشر و مشترک از مکان شبکه یکدیگر آگاه نیستند و اطلاعاتی مانند آدرسهای IP یا شماره پورت را مبادله نمیکنند.
- جداسازی زمانی:
- ناشر و مشترک به طور همزمان اجرا نمیشوند یا اتصال شبکه ندارند.
- جداسازی همگامسازی:
- هر دو ناشر و مشترک میتوانند بدون قطع کردن یکدیگر، پیام ارسال یا دریافت کنند. به عنوان مثال، مشترک مجبور نیست منتظر ارسال پیام توسط ناشر باشد.
اجزای MQTT چیست؟
MQTT مدل انتشار/اشتراک را با تعریف مشتریان و کارگزاران به شرح زیر پیادهسازی میکند.
- مشتری MQTT:
- مشتری MQTT هر دستگاهی از یک سرور تا یک میکروکنترلر است که یک کتابخانه MQTT را اجرا میکند. اگر مشتری پیام ارسال کند، به عنوان ناشر عمل میکند و اگر پیام دریافت کند، به عنوان گیرنده عمل میکند. اساساً، هر دستگاهی که با استفاده از MQTT از طریق شبکه ارتباط برقرار میکند، میتواند دستگاه مشتری MQTT نامیده شود.
- کارگزار MQTT:
- کارگزار MQTT سیستم پشتیبان است که پیامها را بین مشتریان مختلف هماهنگ میکند. مسئولیتهای کارگزار شامل دریافت و فیلتر کردن پیامها، شناسایی مشتریان مشترک شده در هر پیام و ارسال پیامها به آنها است. همچنین مسئول وظایف دیگری مانند:
- مجوز و احراز هویت مشتریان MQTT
- انتقال پیامها به سایر سیستمها برای تجزیه و تحلیل بیشتر
- مدیریت پیامهای از دست رفته و جلسات مشتریان
- کارگزار MQTT سیستم پشتیبان است که پیامها را بین مشتریان مختلف هماهنگ میکند. مسئولیتهای کارگزار شامل دریافت و فیلتر کردن پیامها، شناسایی مشتریان مشترک شده در هر پیام و ارسال پیامها به آنها است. همچنین مسئول وظایف دیگری مانند:
- اتصال MQTT:
- مشتریان و کارگزاران با استفاده از اتصال MQTT شروع به برقراری ارتباط میکنند. مشتریان با ارسال یک پیام CONNECT به کارگزار MQTT اتصال را آغاز میکنند. کارگزار با پاسخ دادن با یک پیام CONNACK تأیید میکند که اتصال برقرار شده است. هر دو مشتری MQTT و کارگزار برای برقراری ارتباط به یک پشته TCP/IP نیاز دارند. مشتریان هرگز با یکدیگر ارتباط برقرار نمیکنند، فقط با کارگزار ارتباط برقرار میکنند.
MQTT چگونه کار میکند؟
نمای کلی از نحوه کار MQTT در زیر ارائه شده است.
- یک مشتری MQTT اتصال با کارگزار MQTT برقرار میکند.
- پس از اتصال، مشتری میتواند پیامها را منتشر کند، در پیامهای خاص مشترک شود یا هر دو را انجام دهد.
- هنگامی که کارگزار MQTT یک پیام دریافت میکند، آن را به مشترکانی که علاقهمند هستند ارسال میکند.
بیایید جزئیات را برای درک بیشتر تجزیه کنیم.
- موضوع MQTT:
- اصطلاح “موضوع” به کلمات کلیدی اشاره دارد که کارگزار MQTT برای فیلتر کردن پیامها برای مشتریان MQTT استفاده میکند. موضوعات به صورت سلسله مراتبی سازماندهی میشوند، مشابه یک دایرکتوری فایل یا پوشه. به عنوان مثال، یک سیستم خانه هوشمند که در یک خانه چند سطحی با دستگاههای هوشمند مختلف در هر طبقه کار میکند را در نظر بگیرید. در این صورت، کارگزار MQTT ممکن است موضوعات را به صورت زیر سازماندهی کند:
- ourhome/groundfloor/livingroom/light
- ourhome/firstfloor/kitchen/temperature
- اصطلاح “موضوع” به کلمات کلیدی اشاره دارد که کارگزار MQTT برای فیلتر کردن پیامها برای مشتریان MQTT استفاده میکند. موضوعات به صورت سلسله مراتبی سازماندهی میشوند، مشابه یک دایرکتوری فایل یا پوشه. به عنوان مثال، یک سیستم خانه هوشمند که در یک خانه چند سطحی با دستگاههای هوشمند مختلف در هر طبقه کار میکند را در نظر بگیرید. در این صورت، کارگزار MQTT ممکن است موضوعات را به صورت زیر سازماندهی کند:
- انتشار MQTT:
- مشتریان MQTT پیامهایی را منتشر میکنند که حاوی موضوع و داده به فرمت بایت هستند. مشتری فرمت داده مانند داده متنی، داده باینری، فایلهای XML یا JSON را تعیین میکند. به عنوان مثال، یک لامپ در سیستم خانه هوشمند ممکن است پیام “on” را برای موضوع “livingroom/light” منتشر کند.
- اشتراک MQTT:
- مشتریان MQTT یک پیام SUBSCRIBE را به کارگزار MQTT ارسال میکنند تا پیامهایی را در موضوعات مورد علاقه دریافت کنند. این پیام حاوی یک شناسه منحصر به فرد و لیستی از اشتراکها است. به عنوان مثال، برنامه خانه هوشمند روی تلفن شما میخواهد نمایش دهد که چند چراغ در خانه شما روشن است. این برنامه در موضوع “light” مشترک میشود و شمارنده را برای همه پیامهای “on” افزایش میدهد.
MQTT از طریق WSS چیست؟
MQTT از طریق WebSockets (WSS) یک پیادهسازی MQTT برای دریافت مستقیم دادهها در یک مرورگر وب است. پروتکل MQTT یک مشتری JavaScript را برای ارائه پشتیبانی WSS برای مرورگرها تعریف میکند. در این حالت، پروتکل به طور معمول کار میکند، اما هدرهای اضافی را به پیامهای MQTT اضافه میکند تا از پروتکل WSS نیز پشتیبانی کند. میتوانید آن را به عنوان بار پیام MQTT که در یک پاکت بستهبندی WSS پیچیده شده است، در نظر بگیرید.
آیا MQTT امن است؟
ارتباط MQTT از پروتکل SSL برای محافظت از دادههای حساس منتقل شده توسط دستگاههای IoT استفاده میکند. میتوانید هویت، احراز هویت و مجوز بین مشتریان و کارگزار را با استفاده از گواهیهای SSL و/یا رمزهای عبور پیادهسازی کنید. کارگزار MQTT معمولاً مشتریان را با استفاده از رمزهای عبور و همچنین شناسههای منحصر به فرد مشتری که به هر مشتری اختصاص میدهد، احراز هویت میکند. در اکثر پیادهسازیها، مشتری سرور را با گواهیها یا جستجوهای DNS احراز هویت میکند. همچنین میتوانید پروتکلهای رمزگذاری را با MQTT پیادهسازی کنید.
آیا MQTT RESTful است؟
MQTT RESTful نیست. انتقال وضعیت نمایشی (REST) یک رویکرد معماری برای ارتباطات شبکه است که از الگوی درخواست-پاسخ ارتباط بین فرستندهها و گیرندههای پیام استفاده میکند. در مقابل، MQTT از مدل انتشار/اشتراک ارتباط در لایه کاربرد استفاده میکند و به یک اتصال TCP دائمی برای انتقال پیامها به صورت فشاری نیاز دارد. با این حال، نسخه ۵ MQTT یک روش درخواست/پاسخ جدید را اضافه میکند تا به روشی مشابه REST عمل کند، که در آن ناشر میتواند یک موضوع پاسخ ویژه را ضمیمه کند که گیرنده آن را پردازش کرده و پاسخ مناسبی تولید میکند.