زمان تخمینی مطالعه: 10 دقیقه
MQTT سرنام Message Queuing Telemetry Transport بهمعنای انتقال تلهمتری صفبندی پیامها است. MQTT یک پروتکل پیامرسان مبتنی بر قوانین و خطمشیها است که برای ارتباط ماشین به ماشین استفاده میشود. حسگرهای هوشمند، ابزارهای پوشیدنی و سایر دستگاههای اینترنت چیزها (IoT) باید دادهها را از طریق شبکهای با محدودیت منابع و پهنای باند کم ارسال و دریافت کنند. تجهیزات اینترنت چیزها از این پروتکل برای انتقال دادهها استفاده میکنند، زیرا پیادهسازی آن آسان است و میتواند دادههای مربوط به تجهیزات اینترنت چیزها را بهطور شکل قابل اعتمادی ارسال و دریافت کند. MQTT از پیامرسانی بین دستگاهها، دستگاهها به ابر و برعکس بهشکل خوبی پشتیبانی میکند.
تاریخچهای کوتاه از پروتکل MQTT
پروتکل MQTT اولین مرتبه در سال 1999 برای استفاده در صنعت نفت و گاز ابداع شد. مهندسان برای نظارت بر خطوط انتقال نفت از طریق ماهواره به پروتکلی نیاز داشتند که حداقل پهنای باند را استفاده کند و کمترین میزبان استفاده از باتری را داشته باشد. در ابتدا، این پروتکل به دلیل سری MQ محصول IBM که برای اولین بار از فاز اولیه آن پشتیبانی میکرد، بهعنوان پروتکل انتقال تلهمتری صف پیام شناخته شد. در سال 2010 میلادی، آیبیام MQTT 3.1 را بهعنوان یک پروتکل آزاد و متن باز منتشر کرد تا توسعهدهندگان و شرکتها بتوانند بر مبنای شرایط مشخصی متناسب با نیازها آنرا پیادهسازی کرده و مورد استفاده قرار دهند. در سال 2013 میلادی، مجوزهای پروتکل فوق با هدف نگهداری بهتر به سازمان استانداردهای اطلاعات ساختاریافته (OASIS) تحویل داده شد. سال 2019، نسخه ارتقا یافته آن تحت عنوان نسخه 5 توسط سازمان OASIS منتشر شد. لازم به توضیح است که MQTT دیگر مخفف نیست، بلکه بهعنوان یک نام رسمی در نظر گرفته میشود.
چرا پروتکل MQTT مهم است؟
پروتکل MQTT بهدلیل سازگاری بالا با شبکههای با تاخیر بالا به یک استاندارد برای انتقال دادههای اینترنت چیزها تبدیل شده است. بهطور کلی، پروتکل فوق مزایای زیر را در اختیار توسعهدهندگان و شرکتها قرار میدهد:
سبک و کارآمد است
پیادهسازی MQTT در تجهیزات اینترنت چیزها به حداقل منابع نیاز دارد، بنابراین حتی میتوان از آن در میکروکنترلرهای کوچک استفاده کرد. بهعنوان مثال، یک پیام کنترل MQTT میتواند اندازه دو بایتی داشته باشد. سرآیندهای پیام MQTT نیز کوچک هستند تا پهنای باند شبکه را به شکل بهینه استفاده کنند.
مقیاسپذیر است
پیادهسازی MQTT به حداقل کدنویسی نیاز دارد که باعث میشود تجهیزات در زمان انجام عملیات انرژی کمتری را مصرف کنند. علاوه بر این، پروتکل فوق دارای برخی ویژگیهای داخلی است که امکان برقراری ارتباط طیف گستردهای از تجهیزات اینترنت چیزها را امکانپذیر میکند. از اینرو، میتوانید پروتکل MQTT را برای اتصال میلیونها دستگاه پیادهسازی کنید و مطمئن باشید دستگاهها بدون مشکل با یکدیگر ارتباط برقرار خواهند کرد.
قابل اعتماد است
بسیاری از دستگاههای اینترنت چیزها از طریق شبکههای سلولی غیرقابل اعتماد با پهنای باند کم و تاخیر بالا به زیرساختهای ابری متصل میشوند. همچنین به لطف ویژگیهای داخلی که دارد زمان اتصال دوباره تجهیزات اینترنت چیزها به ابر را کاهش میدهد. هنگامیکه از پروتکل فوق استفاده کنید، امکان تعریف سه سطح مختلف از کیفیت خدمات را برای حصول اطمینان از پایداری ارتباطات در اختیار دارید که حداکثر یک مرتبه(0)، حداقل یک مرتبه (1) و دقیقا یک مرتبه (2) قابل تعریف است.
ایمن است
MQTT رمزگذاری پیامها و احراز هویت دستگاهها و کاربران را با استفاده از پروتکلهای احراز هویت مدرن، مثل OAuth، TLS1.3، گواهیهای مدیریت شده توسط کلاینت و غیره آسان میکند. بنابراین، تنها فرآیند احراز هویت به شکل ایمن انجام میشود، بلکه با حداقل رفت و برگشت اطلاعات انجام میشود که نقش مهمی در مقابله با تهدیدات هکری دارد.
پشتیبانی خوبی از این پروتکل انجام میشود
امروزه، زبانهای برنامهنویسی مختلفی مثل پایتون، سیپلاسپلاس و جاوا به شکل گسترده ای از پیادهسازی پروتکل MQTT پشتیبانی میکنند. از این رو، توسعهدهندگان میتوانند با کمترین کدنویسی و از طریق فراخوانی توابع در هر نوع برنامهای این پروتکل را پیادهسازی کنند.
دلیل پیدایش پروتکل MQTT چیست؟
پروتکل MQTT بر مبنای اصل انتشار/اشتراک کار میکند. در ارتباطات سنتی شبکه، کلاینتها و سرورها به شکل مستقیم با یکدیگر ارتباط برقرار میکنند. کلاینتها، منابع یا دادهها را از سرور درخواست میکنند، سرور پاسخ را پردازش میکند و نتیجه را باز میفرستد. با این حال، MQTT از یک الگوی انتشار/اشتراک برای تفکیک فرستنده پیام (ناشر) از گیرنده پیام (مشترک) استفاده میکند. همچنین از مولفه سوم که واسطه پیام نام دارد برای مدیریت ارتباط ناشران و مشترکان استفاده میکند. وظیفه کارگزار (Broker) این است که تمام پیامهای دریافتی ناشران را فیلتر کند و آنها را بهشکل درستی بین مشترکان توزیع کند. مولفه کارگزار فرآیند تفکیک ناشران و مشترکان را بهشرح زیر انجام میدهد:
تفکیک فضا
ناشر و مشترک از موقعیت شبکه یکدیگر آگاه نیستند و اطلاعاتی مانند آدرس آیپی یا شماره پورت را مبادله نمیکنند.
تفکیک زمانی
ناشر و مشترک در یک زمان واحد به شبکه متصل نمیشوند.
تفکیک همگامسازی
هم ناشران و هم مشترکان میتوانند بدون ایجاد وقفه در عملکرد یکدیگر اقدام به ارسال و دریافت پیام کنند. به طور مثال، مشترک مجبور نیست منتظر ارسال پیام توسط ناشر باشد.
MQTT از چه مولفههایی ساخته شده است؟
مدل انتشار/اشتراک را با تعریف کلاینتها و کارگزاران به صورت زیر پیادهسازی میکند.
کلاینت MQTT
کلاینت MQTT به هر دستگاهی از سرور گرفته تا میکروکنترلر اشاره دارد که کتابخانه MQTT را اجرا میکند. اگر کلاینت در حال ارسال پیام باشد، به عنوان یک ناشر و اگر در حال دریافت پیام باشد، به عنوان گیرنده عمل میکند. بهطور کلی، هر دستگاهی که با استفاده از MQTT از طریق شبکه ارتباط برقرار میکند، میتواند دستگاه کلاینت MQTT نامیده شود.
کارگزار MQTT
کارگزار MQTT سامانهای است که پیامها را بین کلاینتهای مختلف هماهنگ میکند. مسئولیتهای کارگزار شامل دریافت و فیلتر پیامها، شناسایی کلاینتهای مشترک در هر پیام و ارسال پیامها برای آنها است. کارگزار وظایف دیگری نیز بهشرح زیر دارد:
احراز هویت و تخصیص مجوز به کلاینتها
ارسال پیام به سامانههای دیگر برای تجزیه و تحلیل بیشتر.
مدیریت پیامهای از دست رفته و جلسات مشتری.
اتصال MQTT
کلاینتها و کارگزاران با استفاده از این اتصال شروع به برقراری ارتباط میکنند. کلاینتها اتصال را با ارسال یک پیام CONNECT به کارگزار MQTT آغاز میکنند. کارگزار تایید میکند که ارتباطی از طریق پیام CONNACK که ارسال شده، برقرار شده است. هم کلاینت و هم کارگزار برای برقراری ارتباط به یک پشته TCP/IP نیاز دارند. دقت کنید که کلاینتها هرگز با یکدیگر ارتباط برقرار نمیکنند، بلکه تنها با کارگزار ارتباط برقرار میکنند.
MQTT چگونه کار میکند؟
اگر قصد استفاده از پروتکل فوق را دارید، در اولین گام باید با نحوه کار آن آشنا شوید. معماری و عملکرد پروتکل فوق بهشرح زیر است:
1. یک کلاینت با کارگزار ارتباط برقرار میکند.
2. پس از اتصال، کلاینت میتواند پیامها را منتشر کند، در پیامهای خاص مشترک شود یا هر دو کار را انجام دهد.
3. هنگامیکه کارگزار پیامی را دریافت میکند، آن را برای مشترکان علاقهمند ارسال میکند.
اکنون اجازه دهید این عملیات را با جزئیات بیشتری بررسی کنیم.
MQTT topic
اصطلاح” topic” که ترجمه فارسی آن “موضوع“ است، اما در اینجا ترجمه خیلی دقیقی نیست، به کلمات کلیدی اشاره دارد که کارگزار MQTT برای فیلتر پیامها برای کلاینتها MQTT استفاده میکند. topics بهشکل سلسله مراتبی سازماندهی میشوند، شبیه به فهرست فایلها یا پوشهها که در سیستم عامل ویندوز با آنها برخورد داشتهاید. بهعنوان مثال، یک سامانه خانه هوشمند را تصور کنید که در یک خانه چند طبقه کار میکند که هر طبقه مجهز به دستگاههای هوشمند مختلفی است. در یک چنین ساختمان هوشمندی، کارگزار MQTT ممکن است topicها را به شکل زیر سازماندهی کند:
خانه / طبقه همکف / اتاقنشیمن / نور
خانه / طبقه اول / آشپزخانه / دما
انتشار MQTT
کلاینتها پیامهایی را منتشر میکنند که شامل عنوان پیام و دادههایی است که قرار است، ارسال شوند. این پیام تنها بایت اشغال میکند. کلاینت مسئولیت تعیین قالب دادهها مثل دادههای متنی، دادههای دودویی (باینری)، فایلهای XML یا JSON را دارد. بهعنوان مثال، یک لامپ در سامانه خانه هوشمند ممکن است پیامی را برای تحت عنوان اتاق نشیمن/نور منتشر کند.
اشتراک MQTT
کلاینتهای MQTT یک پیام SUBSCRIBE به کارگزار MQTT ارسال میکنند که شامل موضوعات مورد علاقه است. این پیام شامل یک شناسه منحصر به فرد و فهرستی از اشتراکها است. بهعنوان مثال، برنامه خانه هوشمند در تلفن شما میخواهد نشان دهد که چند چراغ خانه روشن است. در فهرست موضوع چراغ (topic light) مشترک میشود و شمارنده را برای همه پیامها افزایش میدهد.
MQTT روی WSS به چه معنا است؟
WSS سرنام MQTT over WebSockets پیادهسازی خاصی از این پروتکل برای دریافت مستقیم دادهها در یک مرورگر وب است. در این حالت، پروتکل MQTT یک کلاینت جاوا اسکریپت را برای پشتیبانی WSS توسط مرورگرها تعریف میکند. در این مورد، پروتکل روند کاری عادی خود را دارد، اما سرآیندهای اضافی را به پیامهای MQTT اضافه میکند تا از پروتکل WSS نیز پشتیبانی کند. فرآیند فوق را میتوانید شبیه به یک نامه پستی تصور کنید که پیام MQTT متن درون آن است، در حالی که WSS پاکتی است نامه در آن قرار گرفته است.
آیا MQTT ایمن است؟
ارتباطات از پروتکل SSL برای محافظت از دادههای حساس ارسال شده توسط دستگاههای اینترنت چیزها استفاده میکنند. شما میتوانید هویت، احراز هویت و مجوز را بین کلاینتها و کارگزار با استفاده از گواهینامهها و/یا رمزهای عبور SSL پیادهسازی کنید. به طور معمول، کارگزار کلاینتها را با استفاده از رمزهای عبور آنها و همچنین شناسههای کلاینت منحصر به فردی که به هر کلاینت اختصاص میدهد، تایید میکند. در بیشتر پیادهسازیها، احراز هویت کلاینت توسط سرور از طریق گواهیها یا جستوجوهای سامانه نام دامنه (DNS) انجام میشود. همچنین، میتوانید پروتکلهای رمزگذاری را با MQTT پیادهسازی کنید.
آیا MQTT RESTful است؟
اولین نکتهای که باید در این زمینه به آن اشاره داشته باشیم این است که MQTT را نباید RESTful تصور کنید. انتقال حالت نمایشی (REST) معماری خاصی است که برای برقراری ارتباطات شبکه استفاده میشود که از الگوی درخواست-پاسخ ارتباط بین فرستنده و گیرنده پیام استفاده میکند. در مقابل، MQTT از مدل انتشار/اشتراک ارتباط در لایه برنامه استفاده میکند و به یک اتصال TCP ثابت برای انتقال پیامها به روش push نیاز دارد. با این حال، نسخه 5 پروتکل MQTT یک روش درخواست/پاسخ جدید را مورد استفاده قرار میدهد تا به روشی مشابه REST عمل کند که در آن ناشر میتواند یک موضوع پاسخ ویژه را ضمیمه کند که گیرنده آن را پردازش کند و پاسخ مناسب را ایجاد و ارسال کند.
بدون دیدگاه