MQTT چیست؟ آشنایی با اصول این پروتکل ارتباطی

در این مقاله میخوانید
پروتکل MQTT که مخفف Message Queuing Telemetry Transport است، یک پروتکل ارتباطی سبک lightweight protocol و کممصرف محسوب میشود که بهطور خاص برای دستگاههای اینترنت اشیا (Internet of Things – IoT) طراحی شدهاست. این پروتکل با هدف انتقال دادهها (Data Transmission) در محیطهایی با پهنای باند محدود (Low Bandwidth)، تأخیر بالا (High Latency) یا منابع سختافزاری اندک توسعه یافتهاست و به دلیل سادگی و کارایی به یکی از گزینههای محبوب در حوزه ارتباطات ماشین به ماشین (Machine-to-Machine Communication – M2M) تبدیل شدهاست. در این مقاله از بخش آموزش شبکه، به بررسی اصول اولیه این پروتکل، نحوه عملکرد آن و کاربردهایش در دنیای فناوری پرداخته خواهد شد تا درک جامعی از MQTT و اهمیت آن در اکوسیستم اینترنت اشیا (IoT Ecosystem) ارائه گردد. همچنین خواهیم دانست این پروتکل چه سهمی در تبادل پیام دارد؟ معماری MQTT چگونه است و یا عملکرد MQTT را از چه طریقی باید سنجید؟ اساسا درباره این پروتکل سوالات زیادی برای کاربران وجود دارد: مثلا MQTT broker چیست؟ MQTT publish چیست؟ MQTT subscribe چیست یا MQTT topic چیست؟ وقت پاسخ به تمام این سوالات فرا رسیدهاست.
تاریخچه MQTT
پروتکل MQTT، در سال 1999 توسط اندی استنفورد-کلارک (Andy Stanford-Clark) از شرکت IBM و آرلن نیپر (Arlen Nipper) از شرکت Eurotech توسعه یافت. هرچند که هدف اولیه این پروتکل، ارتباط زیادی به دنیای فناوری و حوزه تک نداشت اما در ادامه پذیرای تحولاتی شد؛ MQTT بر پایه مدل ارتباطی انتشار/اشتراک (Publish/Subscribe Model) طراحی شد، که در آن پیامها از طریق یک کارگزار پیام (message broker) بین ناشران (Publishers) و مشترکان مبادله میشوند. این پروتکل بر روی لایه انتقال TCP/IP Transmission Control Protocol/Internet Protocol اجرا میشود و به دلیل سبک بودن، برای ارتباط ماشین به ماشین (Machine-to-Machine Communication – M2M) و اینترنت اشیا (Internet of Things – IoT) بسیار مناسب است. در سال 2016، پروتکل امکیوتیتی (MQTT protocol) بهعنوان استاندارد ISO/IEC 20922 ثبت شد و جایگاه رسمیتری در دنیای فناوری پیدا کرد. آخرین نسخه این پروتکل، یعنی MQTT 5.0، با قابلیتهایی نظیر مدیریت بهتر خطاها و پشتیبانی از ویژگیهای پیشرفتهتر، در تاریخ 7 مارس 2019 منتشر شد. امروزه MQTT به دلیل کارایی و انعطافپذیری، به یکی از پرکاربردترین پروتکلها در حوزه IoT و ارتباطات صنعتی تبدیل شده و اکنون دیگر همه میدانند iot در MQTT چه سهمی دارد.
معرفی معماری MQTT
معماری پروتکل MQTT بر پایه یک ساختار ساده و کارآمد طراحی شدهاست که از مدل توپولوژی ستارهای (star topology) پیروی میکند. در این معماری، یک کارگزار مرکزی (Broker) بهعنوان هسته اصلی (pub) عمل میکند و تمامی دستگاهها یا کلاینتها (Clients) به آن متصل میشوند. کلاینتها که شامل ارسالکنندهها (Publishers) و دریافتکنندهها (Subscribers) هستند، از طریق کارگزار با یکدیگر ارتباط برقرار میکنند و هیچ ارتباط مستقیمی بین خودشان ندارند. این توپولوژی ستارهای امکان مدیریت متمرکز پیامها را فراهم میکند و با کاهش پیچیدگی ارتباطات، کارایی را در محیطهایی با تعداد زیاد دستگاهها افزایش میدهد. کارگزار وظیفه دریافت پیامها از ارسالکنندهها، فیلتر کردن آنها بر اساس موضوع (Topic) و توزیع آنها به دریافتکنندههای مشترک را بر عهده دارد. این ساختار، MQTT را به گزینهای ایدهآل برای کاربردهایی با نیاز به مقیاسپذیری و انعطافپذیری تبدیل کردهاست.
چرا پروتکل MQTT مهم است؟
پروتکل MQTT به دلایل متعددی در دنیای فناوری، بهویژه در حوزه اینترنت اشیا (Internet of Things – IoT) و ارتباطات ماشین به ماشین (Machine-to-Machine Communication – M2M)، که پروتکل ارتباطی M2M هم خوانده میشود، از اهمیت بالایی برخوردار است. نخست اینکه سوژه این مقاله یک پروتکل سبک (lightweight protocol) و کارآمد است و برای دستگاههایی با منابع محدود مانند حسگرها (Sensors) و دستگاههای کممصرف (Low-Power Devices) که در شبکههایی با پهنای باند پایین (Low Bandwidth) کار میکنند، بسیار مناسب طراحی شدهاست. دوم، MQTT مقیاسپذیر است و میتواند تعداد زیادی دستگاه را بهصورت همزمان مدیریت کند، که این ویژگی آن را برای کاربردهای بزرگ مانند شهرهای هوشمند (Smart Cities) ایدهآل میسازد. سوم، این پروتکل قابلاطمینان است و با ارائه سطوح مختلف کیفیت سرویس تضمین میکند که پیامها حتی در شرایط ناپایدار شبکه (Unstable Network Conditions) به مقصد برسند. چهارم، MQTT از امنیت بالایی برخوردار است و از مکانیزمهایی مانند رمزنگاری TLS/SSL یا Transport Layer Security/Secure Sockets Layer) برای حفاظت از دادهها پشتیبانی میکند. در نهایت، این پروتکل دارای پشتیبانی گسترده است و توسط بسیاری از پلتفرمها، کتابخانهها و زبانهای برنامهنویسی پشتیبانی میشود، که توسعهدهندگان را قادر میسازد بهراحتی از آن در پروژههای مختلف استفاده کنند. این ویژگیها در مجموع، MQTT را به یکی از پروتکلهای کلیدی در فناوریهای نوین تبدیل کردهاست.
MQTT چیست و چگونه کار میکند؟

پروتکل MQTT بر اساس مفاهیم اولیهای عمل میکند که شامل سه جزء اصلی است: انتشار/اشتراک (Publish/Subscribe)، موضوعات (Topics) و کارگزار (Broker). در این مدل، دستگاهها یا کلاینتها به دو دسته تقسیم میشوند: ارسالکنندهها (Publishers) که دادهها را تولید و ارسال میکنند و دریافتکنندهها (Subscribers) که دادهها را بر اساس علاقهمندی خود دریافت میکنند. این ارتباط از طریق موضوعات (Topics) مدیریت میشود که بهعنوان برچسبهایی برای دستهبندی پیامها عمل میکنند؛ بهعنوان مثال، یک دستگاه میتواند دما را تحت موضوع «sensor/temperature» منتشر کند و دستگاه دیگر در همان موضوع اشتراک کند. هسته این سیستم، کارگزار (Broker) است که پیامها را از ارسالکنندهها دریافت کرده، بر اساس موضوع فیلتر میکند و به دریافتکنندههای مشترک تحویل میدهد. این مکانیزم ساده و غیرمستقیم، انعطافپذیری و کارایی بالایی را در انتقال دادهها فراهم میکند و نیازی به ارتباط مستقیم بین کلاینتها ندارد.
Publish/Subscribe چیست؟
Publish/Subscribe یک مدل ارتباطی است که در پروتکل MQTT به کار گرفته میشود و بر اساس سیستم انتشار و اشتراک (publish-subscribe) عمل میکند. در این مدل، یک دستگاه میتواند بهعنوان ارسالکننده (Publisher) پیامی را منتشر کند یا بهعنوان دریافتکننده (Subscriber) پیامی را دریافت نماید، بدون اینکه نیاز به برقراری ارتباط مستقیم بین این دو باشد. به این ترتیب، دستگاهها از طریق موضوعات (Topics) به هم متصل میشوند؛ ارسالکننده پیام را تحت یک موضوع خاص منتشر میکند و دریافتکنندههایی که در آن موضوع اشتراک کردهاند، پیام را دریافت میکنند. این سیستم انعطافپذیری بالایی ارائه میدهد، زیرا یک دستگاه میتواند همزمان نقش منتشرکننده و مشترک را ایفا کند و دادهها را بهصورت پویا و بر اساس نیاز تبادل نماید. این ساختار غیرمتمرکز و واسطهمحور، کارایی و مقیاسپذیری را در سیستمهای پیچیده مانند اینترنت اشیا بهبود میبخشد.
MQTT client چیست؟
MQTT Client به هر دستگاه یا برنامهای گفته میشود که از پروتکل MQTT برای برقراری ارتباط استفاده میکند و میتواند نقش ارسالکننده (Publisher)، دریافتکننده (Subscriber) یا هر دو را بر عهده داشته باشد. این کلاینتها از طریق اتصال به یک کارگزار (Broker) عمل میکنند و در چارچوب مدل Publish/Subscribe با یکدیگر در ارتباط هستند. به عبارت دیگر، یک MQTT Client میتواند پیامی را تحت یک موضوع (Topic) منتشر کند تا سایر کلاینتهایی که در همان موضوع اشتراک کردهاند، آن را دریافت کنند، یا خود در موضوعی اشتراک کند تا پیامهای منتشرشده توسط کلاینتهای دیگر را دریافت نماید. این ارتباط وابسته به مدل Publish/Subscribe است که انعطافپذیری و استقلال کلاینتها را تضمین میکند، زیرا نیازی به شناخت مستقیم یکدیگر ندارند و تمامی تعاملات از طریق کارگزار مدیریت میشود. بنابراین، MQTT Client جزء حیاتی در اجرای این مدل ارتباطی محسوب میشود.
Messages در MQTT چیست؟
Messages در پروتکل MQTT به دادههایی اشاره دارد که بین دستگاهها ردوبدل میشوند و هسته اصلی ارتباطات در این پروتکل را تشکیل میدهند. این پیامها میتوانند انواع مختلفی از اطلاعات را منتقل کنند و نقش مهمی در عملکرد سیستمهای مبتنی بر MQTT ایفا میکنند. بهطور خاص، Messages میتوانند شامل فرمانها، مانند دستوراتی برای روشن یا خاموش کردن یک دستگاه، یا دادههای حسگرها، مانند دما، رطوبت یا فشار باشند که توسط دستگاههای اینترنت اشیا (IoT devices) جمعآوری شدهاند. این دادهها از طریق مدل Publish/Subscribe و با استفاده از موضوعات (Topics) بین کلاینتها جابهجا میشوند، بهطوری که یک کلاینت پیام را منتشر میکند و کلاینتهای دیگر که در همان موضوع اشتراک کردهاند، آن را دریافت میکنند.
ساختار و محتوای Messages معمولاً ساده و سبک است تا با هدف اصلی پروتکل MQTT، یعنی کارایی در محیطهای کممنبع، همراستا باشد. برای مثال، یک پیام ممکن است تنها یک مقدار عددی مانند ۲۵ برای دما یا یک دستور متنی مانند ON باشد. این پیامها توسط کارگزار (Broker) مدیریت میشوند و بر اساس سطح کیفیت سرویس (QoS) تعیینشده، تحویل آنها به دریافتکنندهها تضمین میشود. به این ترتیب، Messages نهتنها ابزار انتقال اطلاعات هستند، بلکه انعطافپذیری لازم برای پشتیبانی از کاربردهای متنوع، از کنترل دستگاهها تا مانیتورینگ لحظهای، را فراهم میکنند.
Topics در MQTT چیست؟
Topics در پروتکل MQTT بهعنوان یکی از مفاهیم کلیدی، مانند آدرسی برای پیامها عمل میکند که ساختار و نظم را در انتقال دادهها فراهم میآورد. به بیان ساده، یک Topic برچسبی است که مشخص میکند یک پیام خاص به چه دسته یا گروهی تعلق دارد و به کلاینتها اجازه میدهد تا بهطور هدفمند به تبادل اطلاعات بپردازند. فرستنده (Publisher) پیام خود را در یک Topic مشخص ارسال میکند، برای مثال «home/temperature»، و این پیام از طریق کارگزار (Broker) به تمام گیرندههایی (Subscribers) که در همان Topic اشتراک کردهاند، تحویل داده میشود. این مکانیزم، ارتباط غیرمستقیم و انعطافپذیر بین دستگاهها را ممکن میسازد.
ساختار Topics بهصورت سلسلهمراتبی طراحی شدهاست و از جداکنندههایی مانند «/» برای سازماندهی استفاده میکند، مشابه مسیرهای فایل در سیستمعاملها. بهعنوان مثال، یک Topic مانند «building/floor1/room3/light» میتواند بهطور دقیق مشخص کند که پیام مربوط به چراغ اتاق سوم در طبقه اول یک ساختمان است. گیرندهها با اشتراک در این Topic، تنها پیامهای مرتبط با آن را دریافت میکنند و از دریافت دادههای غیرضروری اجتناب میشود. این ویژگی، کارایی و مقیاسپذیری را افزایش میدهد و Topics را به ابزاری قدرتمند برای مدیریت ارتباطات در سیستمهای پیچیده مانند اینترنت اشیا تبدیل میکند.
MQTT از طریق WSS چیست؟
MQTT از طریق WSS به استفاده از پروتکل MQTT بر روی WebSocket Secure) WS) اشاره دارد که نسخه امن پروتکل WebSocket است. WebSocket یک تکنولوژی ارتباطی دوطرفه است که امکان انتقال دادهها را در یک اتصال پایدار بین کلاینت و سرور فراهم میکند و معمولاً بر روی پروتکلهای HTTP/HTTPS اجرا میشود. در حالت عادی، MQTT از TCP/IP بهعنوان لایه انتقال خود استفاده میکند، اما با افزودن WSS، این پروتکل میتواند از طریق پورتهای استاندارد وب (مانند ۴۴۳) و با رمزنگاری امن عمل کند. این ترکیب بهویژه در محیطهایی که نیاز به عبور از فایروالها یا استفاده از مرورگرها وجود دارد، مفید است.
در این روش، پیامهای MQTT درون فریمهای WebSocket محصور میشوند و از طریق یک اتصال امن مبتنی بر SSL/TLS منتقل میگردند. این امکان را به کلاینتهای MQTT میدهد تا بدون نیاز به باز کردن پورتهای غیراستاندارد یا پیکربندی پیچیده شبکه، به کارگزار (Broker) متصل شوند. به عنوان مثال، یک برنامه وب میتواند از طریق WSS به یک کارگزار MQTT متصل شود و دادهها را بهصورت لحظهای ارسال یا دریافت کند، در حالی که امنیت ارتباط حفظ میشود.
چرا از MQTT بر روی WSS استفاده میشود؟
استفاده از MQTT بر روی WSS به دلایل متعددی اهمیت دارد که پاسخگوی نیازهای خاص در کاربردهای مدرن است. اولاً، امنیت یکی از اصلیترین دلایل است؛ WSS از رمزنگاری SSL/TLS استفاده میکند که دادهها را در برابر استراق سمع و دستکاری محافظت میکند، بهویژه در شبکههای عمومی یا ناامن. این موضوع در اینترنت اشیا، جایی که دستگاهها اغلب اطلاعات حساس را منتقل میکنند، حیاتی است.
دوم، سازگاری با زیرساختهای وب دلیل دیگری است. بسیاری از شبکهها و فایروالها پورتهای غیراستاندارد (مانند ۱۸۸۳ که معمولاً برای MQTT استفاده میشود) را مسدود میکنند، اما پورت ۴۴۳ که برای HTTPS و WSS استفاده میشود، معمولاً باز است. این ویژگی امکان استفاده از MQTT را در محیطهای محدود شده، مانند شبکههای سازمانی، فراهم میکند. سوم، پشتیبانی از برنامههای مبتنی بر مرورگر نیز مزیت بزرگی است؛ با WSS، توسعهدهندگان میتوانند برنامههای وب تعاملی بسازند که مستقیماً با کارگزار MQTT ارتباط برقرار کنند، بدون نیاز به افزونه یا نرمافزار اضافی.
در نهایت، استفاده از WSS انعطافپذیری بیشتری به MQTT میافزاید و آن را با فناوریهای مدرن وب همراستا میکند تا بتوان از برنامههای کاربردی MQTT بهره جست، در حالی که همچنان ویژگیهای سبک و کارآمد این پروتکل حفظ میشود. این ترکیب، MQTT را به گزینهای ایدهآل برای سناریوهایی تبدیل میکند که برای آنها هم امنیت و هم دسترسیپذیری اهمیت دارند.
پروتکلهای رقیب MQTT
پروتکل MQTT بهعنوان یکی از پرکاربردترین پروتکلهای ارتباطی در حوزه اینترنت اشیا (IoT) شناخته میشود، اما پروتکلهای رقیب دیگری نیز وجود دارند که هر یک با ویژگیها و کاربردهای خاص خود، در سناریوهای مختلف مورد استفاده قرار میگیرند. در این بخش، به بررسی پروتکلهای SMCP، DDS، STOMP، AMQP و CoAP پرداخته میشود تا تفاوتها و نقاط قوت آنها نسبت به MQTT روشن گردد. این پروتکلها بسته به نیازهای پروژه، مانند مصرف انرژی، امنیت، مقیاسپذیری یا نوع دادههای انتقالی، میتوانند جایگزین مناسبی باشند.
SMCP یا Simple Media Control Protoco
SMCP یک پروتکل ارتباطی سبک است که بهطور خاص برای محیطهای جاسازیشده (Embedded Systems) طراحی شده و بر پایه زبان برنامهنویسی C پیادهسازی شدهاست. این پروتکل با هدف سادگی و کاهش مصرف منابع، برای دستگاههای محدود از نظر سختافزاری مناسب است. برخلاف MQTT که از مدل Publish/Subscribe استفاده میکند، SMCP بیشتر بر کنترل رسانه و تعاملات ساده متمرکز است و معمولاً در کاربردهایی مانند سیستمهای خانگی هوشمند یا دستگاههای چندرسانهای استفاده میشود. با این حال، به دلیل تمرکز محدود و عدم پشتیبانی گسترده مانند MQTT، کاربرد آن در مقیاس بزرگ، کمتر است.
DDS یا Data Distribution Service
DDS یک استاندارد میانافزار برای سیستمهای بیدرنگ (Real-Time Systems) است که بر ارتباطات مستقیم و مستقل در سیستمهای جاسازیشده تمرکز دارد. برخلاف MQTT که از یک کارگزار مرکزی (Broker) استفاده میکند، DDS از معماری غیرمتمرکز بهره میبرد و مدل Publish/Subscribe را با قابلیتهای پیشرفتهتر مانند کیفیت سرویس (QoS) دقیق و انتقال دادههای پیچیده ارائه میدهد. این پروتکل برای کاربردهایی با نیاز به سرعت بالا و اطمینان زیاد، مانند صنایع هوافضا یا پزشکی، ایدهآل است، اما پیچیدگی و مصرف منابع بالاتر آن، استفاده در دستگاههای کوچک IoT را محدود میکند.
STOMP یا Simple/Streaming Text Oriented Messaging Protocol
STOMP یک پروتکل مبتنی بر متن است که طراحی سادهای دارد و بر انتقال پیامها با استفاده از یک رشته مقصد (Destination String) تمرکز میکند، نه صفها یا موضوعات پیچیده. برخلاف MQTT که از ساختار باینری (binary structure) سبک و مدل Publish/Subscribe استفاده میکند، STOMP به دلیل متنی بودن، خوانایی بیشتری برای انسان دارد و اغلب در برنامههای وب یا سیستمهایی که نیاز به ادغام با پروتکلهای دیگر دارند، بهکار میرود. با این حال، سادگی آن باعث میشود که نسبت به MQTT در محیطهای کممنبع یا با پهنای باند (bandwidth) محدود، کارایی کمتری داشته باشد.
AMQP یا Advanced Message Queuing Protocol
AMQP یک پروتکل پیامرسانی پیشرفته است که مانند MQTT از مدل Publish/Subscribe پشتیبانی میکند، اما ویژگیهای بیشتری مانند قابلیت اطمینان بالا، انعطافپذیری در مسیریابی و پشتیبانی از اولویتبندی پیچیده ارائه میدهد. این پروتکل بیشتر برای سیستمهای سازمانی و برنامههایی که نیاز به تبادل دادههای سنگین و امن دارند، مناسب است. در مقایسه با MQTT که بر سادگی و سبکی تمرکز دارد، AMQP پیچیدهتر و سنگینتر است و به همین دلیل، در دستگاههای کوچک IoT کمتر استفاده میشود، اما در سناریوهای صنعتی و تجاری کاربرد گستردهای دارد.
CoAP یا Constrained Application Protocol
CoAP یکی از رقبای اصلی MQTT در حوزه اینترنت اشیا است که برای دستگاههای محدود طراحی شده و از مدل درخواست/پاسخ (Request/Response) مشابه HTTP استفاده میکند. این پروتکل بر پایه UDP عمل میکند (برخلاف MQTT که بر TCP استوار است) و به همین دلیل، مصرف انرژی و پهنای باند کمتری دارد، اما قابلیت اطمینان کمتری نسبت به MQTT ارائه میدهد. CoAP با ویژگیهایی مانند انتقال بلوکی داده و سازگاری با شبکههای محدود، در سناریوهایی که سرعت بر اطمینان اولویت دارد، برتری دارد و اغلب در سیستمهای حسگر بیسیم به کار میرود.
هر یک از این پروتکلها نقاط قوت و ضعف خاص خود را دارند. MQTT به دلیل سبکی، مقیاسپذیری و سازگاری با IoT، انتخاب محبوبی است، اما CoAP در مصرف انرژی بهینهتر است، AMQP امنیت و انعطافپذیری بیشتری ارائه میدهد، DDS برای سیستمهای بیدرنگ مناسبتر است، STOMP سادگی را ارائه میدهد و SMCP بر کاربردهای خاص متمرکز است. انتخاب پروتکل مناسب به نیازهای پروژه، از جمله نوع دستگاهها، زیرساخت شبکه و سطح مورد انتظار از امنیت و کارایی بستگی دارد.
در مقاله زیر با رابط برنامهنویسی کاربردی یا همان API آشنا شوید:
امنیت MQTT چیست؟
امنیت در پروتکل MQTT یکی از جنبههای کلیدی است که برای حفاظت از دادههای منتقلشده بین دستگاهها و کارگزار (Broker) طراحی شدهاست. این پروتکل بهطور ذاتی مکانیزمهای امنیتی داخلی محدودی دارد، اما با استفاده از ابزارها و پروتکلهای مکمل، میتواند سطح بالایی از ایمنی را فراهم کند. هدف اصلی امنیت در MQTT، اطمینان از محرمانگی، یکپارچگی و احراز هویت در ارتباطات است، بهویژه در کاربردهایی مانند اینترنت اشیا (IoT) که دادههای حساس مانند اطلاعات حسگرها یا دستورات کنترلی ردوبدل میشوند. در ادامه، به شرح جنبههای اصلی امنیت MQTT و نقش رمزگذاری میپردازیم.
رمزگذاری و امنیت در MQTT
یکی از روشهای اصلی تأمین امنیت در MQTT، استفاده از رمزگذاری (Encryption) در سطح انتقال با پروتکلهایی مانند SSL/TLS است. این مکانیزم، ارتباطات بین کلاینت (Client) و کارگزار را رمزگذاری میکند و از استراق سمع یا دستکاری دادهها توسط افراد غیرمجاز جلوگیری میکند. با این حال، باید توجه داشت که MQTT بهصورت پیشفرض از رمزگذاری End-to-End (انتها به انتها) پشتیبانی نمیکند. رمزگذاری End-to-End به این معناست که دادهها از مبدأ (فرستنده) تا مقصد نهایی (گیرنده) رمزگذاری شوند، بهطوری که حتی کارگزار نیز نتواند به محتوای پیام دسترسی پیدا کند. در MQTT، کارگزار بهعنوان واسطه، پیامها را دریافت و توزیع میکند و اگر رمزگذاری فقط در سطح انتقال (بین کلاینت و کارگزار) اعمال شود، کارگزار میتواند پیامها را بهصورت متن ساده (Plain Text) مشاهده کند.
برای دستیابی به رمزگذاری End-to-End، توسعهدهندگان باید خودشان لایه امنیتی اضافی را پیادهسازی کنند، مثلاً با رمزگذاری پیامها در سطح برنامه (Application-Level Encryption) قبل از ارسال توسط کلاینت. در این حالت، فرستنده پیام را با استفاده از الگوریتمهای رمزنگاری (مانند AES) رمزگذاری میکند و گیرنده با کلید مناسب آن را رمزگشایی میکند. این روش تضمین میکند که حتی اگر کارگزار یا شبکه مورد نفوذ قرار گیرد، محتوای پیام قابل خواندن نباشد. با این وجود، این قابلیت بهطور مستقیم در مشخصات استاندارد MQTT گنجانده نشده و نیازمند تلاش اضافی از سوی توسعهدهندگان است.
سایر جنبههای امنیتی MQTT
علاوه بر رمزگذاری، MQTT از مکانیزمهای دیگری برای افزایش امنیت استفاده میکند. احراز هویت (Authentication) یکی از این موارد است که از طریق نام کاربری و رمز عبور یا گواهینامههای SSL/TLS انجام میشود تا اطمینان حاصل شود که فقط کلاینتهای مجاز به کارگزار متصل شوند. همچنین، سطح کیفیت سرویس (QoS) در MQTT به قابلیت اطمینان تحویل پیام کمک میکند، که خود بهطور غیرمستقیم امنیت عملیاتی را بهبود میبخشد. نسخه MQTT 5.0 نیز قابلیتهای امنیتی پیشرفتهتری مانند مدیریت بهتر خطاها و پشتیبانی از ویژگیهای جدید برای کنترل دسترسی را معرفی کردهاست.
با این حال، فقدان رمزگذاری End-to-End بهصورت پیشفرض، یکی از محدودیتهای MQTT محسوب میشود، بهویژه در مقایسه با پروتکلهایی که این ویژگی را بهطور ذاتی ارائه میدهند. برای جبران این ضعف، استفاده از MQTT روی WSS (WebSocket Secure) یا پیادهسازی رمزگذاری در سطح برنامه توصیه میشود. در نتیجه، امنیت MQTT به نحوه پیکربندی و استفاده از آن بستگی دارد و میتواند با رویکردهای مناسب، نیازهای امنیتی پروژههای مختلف را برآورده کند.
مثال از کاربرد پروتکل MQTT در اینترنت اشیا
پروتکل MQTT به دلیل سبکی، کارایی و قابلیت اطمینان، در بسیاری از حوزههای اینترنت اشیا (IoT) کاربرد گستردهای دارد. ساختار مبتنی بر Publish/Subscribe آن، امکان انتقال سریع و مؤثر دادهها را بین دستگاهها فراهم میکند و در سناریوهای متنوعی از زندگی روزمره تا صنایع پیشرفته به کار گرفته میشود. در ادامه، مثالهایی از کاربرد MQTT در حوزههای خانه هوشمند، کشاورزی هوشمند، و اتوماسیون، حملونقل هوشمند و پزشکی و سلامت ارائه میشود، به خصوص که کاربرد MQTT در صنعت و همچنین نقش MQTT در اینترنت اشیا طرفداران زیادی دارد.
خانه هوشمند
مثال: در یک خانه هوشمند، کاربر میتواند از راه دور با استفاده از یک اپلیکیشن موبایل، لامپهای خانه را روشن یا خاموش کند.
توضیح: در این سناریو، لامپ هوشمند بهعنوان یک کلاینت MQTT عمل میکند و در موضوعی مانند «home/livingroom/lamp» اشتراک میکند. اپلیکیشن موبایل نیز بهعنوان یک کلاینت دیگر، پیامهایی مانند ON یا OFF را در این موضوع منتشر میکند. کارگزار (Broker) که معمولاً روی یک سرور خانگی یا ابری نصب است، این پیام را دریافت و به لامپ منتقل میکند. این فرایند به دلیل سبکی MQTT، حتی در شبکههای خانگی با پهنایباند محدود، سریع و قابل اطمینان انجام میشود و تجربهای یکپارچه برای کاربر فراهم میکند.
کشاورزی هوشمند
مثال: یک سیستم آبیاری هوشمند در مزرعه میتواند بر اساس دادههای حسگر رطوبت خاک، بهطور خودکار آبیاری را فعال کند.
توضیح: در این کاربرد، حسگرهای رطوبت خاک که در مزرعه نصب شدهاند، بهعنوان کلاینتهای MQTT، دادههای رطوبت را تحت موضوعی مانند «farm/soil/moisture» منتشر میکنند. یک سیستم کنترل مرکزی که در همان موضوع اشتراک کرده، این دادهها را دریافت میکند و در صورت کاهش رطوبت به زیر سطح مشخص، پیامی مانند «START» را در موضوع «farm/irrigation» منتشر میکند. پمپ آب، بهعنوان کلاینت دیگر، این پیام را دریافت و آبیاری را آغاز میکند. MQTT با مصرف کم انرژی و انتقال سریع داده، برای چنین سیستمهایی در مناطق دورافتاده ایدهآل است.
صنعت و اتوماسیون
مثال: در یک کارخانه، ماشینآلات میتوانند وضعیت عملکرد خود را به یک سیستم نظارتی مرکزی گزارش دهند تا در صورت خرابی، هشدار صادر شود.
توضیح: در این سناریو، هر ماشین بهعنوان یک کلاینت MQTT عمل میکند و دادههایی مانند دما، فشار یا تعداد چرخههای کاری را در موضوعاتی مانند «factory/machine1/status» منتشر میکند. سیستم نظارتی مرکزی که در این موضوعات اشتراک کرده، دادهها را بهصورت لحظهای دریافت و تحلیل میکند. اگر مشکلی تشخیص داده شود (مثلاً دمای بیش از حد)، سیستم پیامی مانند «ALERT» را در موضوع «factory/alerts» منتشر میکند تا اپراتورها مطلع شوند. مقیاسپذیری و قابلیت اطمینان MQTT، آن را برای مدیریت تعداد زیاد دستگاهها در محیطهای صنعتی مناسب میسازد.
حملونقل هوشمند
مثال: یک ناوگان اتوبوس شهری میتواند موقعیت لحظهای خود را به یک سیستم مدیریت ترافیک ارسال کند تا مسیرها بهینهسازی شوند.
توضیح: هر اتوبوس مجهز به یک دستگاه MQTT Client است که موقعیت جغرافیایی (طول و عرض جغرافیایی) را از GPS دریافت و در موضوعی مانند «transport/bus1/location» منتشر میکند. سیستم مدیریت ترافیک که در این موضوعات اشتراک دارد، دادهها را جمعآوری و با تحلیل آنها، مسیرهای بهینه یا هشدارهایی برای ترافیک سنگین را محاسبه میکند. این اطلاعات میتوانند در موضوع دیگری مانند «transport/bus1/instructions» به راننده ارسال شوند. MQTT با پشتیبانی از ارتباطات لحظهای و کمحجم، به بهبود کارایی حملونقل عمومی کمک میکند.
پزشکی و سلامت
مثال: یک دستگاه ضربانسنج پوشیدنی میتواند دادههای ضربان قلب بیمار را به پزشک یا بیمارستان ارسال کند تا در صورت غیرعادی بودن، هشدار دهد.
توضیح: در این کاربرد، دستگاه ضربانسنج بهعنوان یک کلاینت MQTT، دادههای ضربان قلب را در بازههای زمانی مشخص در موضوعی مانند «health/patient1/heartbeat» منتشر میکند. یک برنامه یا سرور بیمارستان که در این موضوع اشتراک کرده، دادهها را دریافت و تحلیل میکند. اگر ضربان قلب از محدوده نرمال خارج شود، سرور پیامی مانند «EMERGENCY» را در موضوع «health/patient1/alert» منتشر میکند تا پزشک یا تیم پزشکی فوراً مطلع شوند. استفاده از MQTT در این حوزه به دلیل مصرف کم باتری و انتقال امن دادهها، برای دستگاههای پزشکی حیاتی است.
این مثالها نشان میدهند که MQTT با انعطافپذیری و کارایی خود، در گستره وسیعی از کاربردهای اینترنت اشیا قابل استفاده است. از کنترل ساده در خانههای هوشمند (MQTT in smart homes) تا مدیریت پیچیده در صنعت و سلامت، این پروتکل با تکیه بر ساختار سبک و مدل Publish/Subscribe، راهحلی مؤثر برای ارتباطات مدرن ارائه میدهد.
مزایا MQTT
پروتکل MQTT به دلیل ویژگیهای برجستهاش، یکی از گزینههای محبوب در حوزه اینترنت اشیا (IoT) و ارتباطات ماشین به ماشین (M2M) محسوب میشود. مزایای پروتکل اینترنت اشیا بهگونهای طراحی شدهاند که نیازهای دستگاههای مدرن با منابع محدود را برآورده کنند و کارایی بالایی در سناریوهای مختلف ارائه دهند. در ادامه، به مهمترین مزایای MQTT بهصورت موردی اشاره میشود:
سبک و کمحجم: ساختار MQTT بهگونهای است که با حداقل سربار (Overhead) عمل میکند و برای دستگاههایی با قدرت پردازش و حافظه محدود، مانند حسگرهای کوچک، ایدهآل است.
مصرف کم پهنای باند: این پروتکل با بهینهسازی انتقال دادهها، حتی در شبکههایی با پهنای باند پایین، عملکرد مؤثری دارد و از منابع شبکه بهصرفه استفاده میکند.
مدل انتشار/اشتراک (Pub/Sub): استفاده از مدل Publish/Subscribe امکان ارتباط غیرمستقیم و انعطافپذیر بین دستگاهها را فراهم میکند، که مقیاسپذیری و مدیریت آسانتر سیستم را به دنبال دارد.
پشتیبانی از QoS: MQTT سطوح کیفیت سرویس (Quality of Service) را در سه سطح (۰، ۱، ۲) ارائه میدهد که به کاربر اجازه میدهد بین سرعت و اطمینان تحویل پیام تعادل برقرار کند.
پشتیبانی از اتصال ناپایدار: این پروتکل با قابلیتهایی مانند مکانیزم «آخرین اراده» (Last Will) و ذخیرهسازی پیامها، در شبکههای ناپایدار یا قطع و وصل، عملکرد قابل اعتمادی ارائه میدهد.
این مزایا در کنار هم، MQTT را به ابزاری کارآمد و قدرتمند برای کاربردهای متنوع، از خانههای هوشمند تا سیستمهای صنعتی، تبدیل کردهاند.
معایب MQTT
پروتکل MQTT با وجود مزایای متعدد، دارای معایبی است که میتواند در برخی سناریوها محدودیتهایی ایجاد کند. این نقاط ضعف، بسته به نوع کاربرد و نیازهای پروژه، ممکن است تأثیر قابل توجهی داشته باشند. در ادامه، به مهمترین معایب MQTT بهصورت موردی اشاره میشود:
عدم رمزگذاری داخلی:
MQTT بهصورت پیشفرض رمزگذاری داخلی ندارد و برای تأمین امنیت، باید پروتکلهای TLS/SSL بهصورت جداگانه اضافه شوند، که این امر نیازمند پیکربندی اضافی و افزایش مصرف منابع است.
وابستگی به بروکر:
این پروتکل به یک کارگزار (Broker) مرکزی وابسته است و اگر بروکر از کار بیفتد یا دچار مشکل شود، کل سیستم ارتباطی مختل خواهد شد.
عدم پشتیبانی از اولویت پیام:
MQTT امکان تعیین اولویت برای پیامها را فراهم نمیکند، بنابراین پیامهای مهمتر نمیتوانند نسبت به سایرین برتری داشته باشند.
عدم ذخیره پیامهای قدیمی:
بهطور پیشفرض، پیامهای قدیمی ذخیره نمیشوند و کلاینتهایی که پس از ارسال پیام متصل میشوند، به آنها دسترسی نخواهند داشت، مگر اینکه تنظیمات خاصی اعمال شود.
افزایش پیچیدگی در مقیاسهای بزرگ:
در سیستمهای بسیار بزرگ با تعداد زیاد دستگاهها، مدیریت موضوعات (Topics) و بار روی بروکر میتواند پیچیدگی و چالشهای مقیاسپذیری را افزایش دهد. این معایب نشان میدهند که MQTT، هرچند در بسیاری از موارد کارآمد است، اما ممکن است برای پروژههایی با نیازهای خاص مانند امنیت ذاتی یا مقیاسپذیری بسیار بالا، نیازمند راهکارهای تکمیلی باشد.
ویژگیهای کلیدی نسخه 5.0 پروتکل MQTT:
بهبود قابلیت اطمینان:
مکانیزم اطلاعرسانی قطع غیرمنتظره برای آگاهسازی کاربران: این ویژگی به کاربران امکان میدهد تا در صورت قطع ناگهانی اتصال، از آن مطلع شوند و اقدامات لازم را انجام دهند. قابلیتهای پیشرفته مدیریت خطا: نسخه 5.0 پروتکل MQTT دارای قابلیتهای پیشرفتهای برای مدیریت خطا است که باعث افزایش قابلیت اطمینان ارتباطات میشود.
بهینهسازی عملکرد:
کاهش سربار ارتباطی و مصرف پهنای باند کارآمد برای بهینهسازی ترافیک شبکه: با کاهش سربار ارتباطی، مصرف پهنای باند کاهش مییابد و عملکرد شبکه بهبود پیدا میکند.
افزایش انعطافپذیری:
قابلیتهای جدید احراز هویت و مجوزدهی: نسخه 5.0 پروتکل MQTT دارای قابلیتهای جدیدی برای احراز هویت و مجوزدهی است که باعث افزایش امنیت ارتباطات میشود.
امکانات بیشتر:
- پاسخهای بهتر از طرف سرور به کلاینتها
- اشتراکگذاری موضوعات به صورت گروهی
- قابلیت کنترل بهتر جریان دادهها
پروتکل MQTT 5.0 نسبت به نسخههای قبلی، پیشرفتهای چشمگیری در زمینه کارایی، قابلیت اطمینان و انعطافپذیری داشته است. این پروتکل با ارائه ویژگیهای جدید، به یکی از بهترین پروتکلهای ارتباطی برای اینترنت اشیا (IoT) تبدیل شدهاست.
مفهوم QOS در MQTT

QoS مخفف عبارت «Quality of Service» یا «کیفیت سرویس» است. در پروتکل MQTT، QoS به سطوح تضمین تحویل پیامها اشاره دارد. این مفهوم مشخص میکند که پیامها با چه سطحی از اطمینان باید تحویل داده شوند.
سطوح QoS در MQTT:
QoS 0 (حداکثر یک بار):
در این سطح، پیام حداکثر یک بار تحویل داده میشود.
هیچ تضمینی برای تحویل پیام وجود ندارد.
سرعت تحویل پیام در این سطح بالاست، اما ممکن است پیامها از دست بروند.
QoS 1 (حداقل یک بار):
در این سطح، پیام حداقل یک بار تحویل داده میشود.
ممکن است پیامها به صورت تکراری تحویل داده شوند.
این سطح، اطمینان بیشتری نسبت به QoS 0 ارائه میدهد.
QoS 2 (دقیقاً یک بار):
در این سطح، پیام دقیقاً یک بار تحویل داده میشود.
این سطح، بالاترین سطح اطمینان را ارائه میدهد، اما سرعت تحویل پیام ممکن است کاهش یابد.
اهمیت QoS:
QoS در پروتکل MQTT، امکان انتخاب سطحی از اطمینان را برای تحویل پیامها فراهم میکند. این امر به کاربران امکان میدهد تا با توجه به نیازهای برنامه خود، سطحی از اطمینان را انتخاب کنند. به عنوان مثال، در برنامههای حساس که از دست رفتن پیامها قابل قبول نیست، میتوان از QoS 2 استفاده کرد. در حالی که در برنامههایی که سرعت تحویل پیام مهمتر است، میتوان از QoS 0 یا QoS 1 استفاده کرد.
QoS 0
ارسال یکباره:
در این سطح، پیام فقط یک بار ارسال میشود.
عدم ارسال مجدد:
هیچ مکانیزمی برای ارسال مجدد پیام وجود ندارد.
عدم دریافت تأییدیه:
هیچ تأییدی از طرف گیرنده برای دریافت پیام ارسال نمیشود.
احتمال از دست رفتن پیام:
به دلیل عدم وجود مکانیزم تأیید و ارسال مجدد، ممکن است پیام در طول مسیر از بین برود.
سرعت و سبکی:
این سطح، سریعترین و سبکترین روش ارسال پیام در پروتکل MQTT است.
به همین دلیل این روش ارسال برای مواردی مناسب است که سرعت ارسال اطلاعات در اولویت قرار دارد.
QoS 0 به عنوان «آتش و فراموش کن» نیز شناخته میشود، زیرا فرستنده پس از ارسال پیام، هیچ اقدامی برای تأیید دریافت آن انجام نمیدهد.
این سطح برای برنامههایی مناسب است که از دست رفتن برخی از پیامها قابل قبول است، مانند برنامههای جمعآوری دادههای حسگرهای محیطی که اطلاعات آنها به طور مداوم بهروزرسانی میشود.
QoS 1
QoS 1 ارسال حداقل یکباره:
در این سطح، پیام حداقل یک بار ارسال میشود.
ارسال مجدد در صورت عدم تأیید:
اگر فرستنده تأییدیه دریافت پیام را از طرف گیرنده دریافت نکند، پیام مجدداً ارسال خواهد شد.
احتمال دریافت پیامهای تکراری:
به دلیل مکانیزم ارسال مجدد، ممکن است گیرنده پیامهای تکراری دریافت کند. این مسئله به علت این موضوع پیش خواهد آمد که امکان دارد پیام ارسال شده باشد و در بین راه تاییدیه آن دچار مشکل شود. در نتیجه پیام مجدد ارسال شود. این سطح تضمین میکند که پیام حداقل یکبار به مقصد ارسال خواهد شد.
نکات تکمیلی:
QoS 1 از مکانیزم تأیید (PUBACK) برای اطمینان از دریافت پیام استفاده میکند.
این سطح برای برنامههایی مناسب است که از دست رفتن پیامها قابل قبول نیست، اما تحمل دریافت پیامهای تکراری وجود دارد.
QoS 2 (دقیقاً یک بار):
تحویل دقیقاً یکباره:
در این سطح، پیام دقیقاً یک بار به گیرنده تحویل داده میشود.
پیچیدگی و هزینه:
این سطح، پیچیدهترین و پرهزینهترین سطح QoS در پروتکل MQTT است.
فرایند تأیید دو مرحلهای:
این سطح از یک فرایند تأیید دو مرحلهای برای اطمینان از تحویل پیام استفاده میکند و از ارسال مجدد پیامهای تکراری جلوگیری میکند.
برای این منظور، هم ارسالکننده و هم دریافتکننده باید وضعیت پیام را در مراحل مختلف ارسال و دریافت بررسی کنند. QoS 2 برای برنامههایی مناسب است که تحویل دقیقاً یک بار پیام از اهمیت بالایی برخوردار است، مانند سیستمهای مالی یا سیستمهای کنترل حیاتی. در این سطح از ارتباطات MQTT مکانیزمهای پیچیدهتری برای کنترل وضعیت پیام بین فرستنده و گیرنده ردوبدل میشود.
با خرید سرور ابری پارسپک؛ قدرت و سرعت در دستان شماست
با سرور ابری پارسپک، یک زیرساخت قدرتمند، مقیاسپذیر و ایمن در اختیار دارید که به شما امکان میدهد که بدون دغدغه، کسبوکار دیجیتال خود را رشد دهید. به علاوه میتوانید تنها در چند دقیقه سرور مورد نیازتان را راهاندازی کنید و از منابع کاملاً بهینهشده بهره ببرید. همین حالا وارد دنیای جدیدی از میزبانی شوید. برای بررسی قیمت سرویسهای ابری، روی لینک زیر کلیک کنید:
جمعبندی
MQTT مخفف چیست؟ در این مقاله به همین سوال ساده پاسخ دادیم و بعد یک بررسی عمقی را پیش روی شما گذاشتیم تا بدانیم پروتکل MQTT، به عنوان یک پروتکل پیامرسانی سبک و کارآمد، در حوزه اینترنت اشیا (IoT) جایگاه ویژهای دارد. این پروتکل با ارائه ویژگیهایی نظیر انتشار/اشتراک، سطوح مختلف کیفیت سرویس (QoS) و قابلیتهای امنیتی قابل ارتقا، امکان برقراری ارتباط پایدار و سریع را در شبکههای با پهنای باند محدود فراهم میکند. از جمله نکات کلیدی در MQTT، میتوان به سطوح QoS اشاره کرد که تضمینهای متفاوتی برای تحویل پیام ارائه میدهند، و همچنین اهمیت امنیت که با روشهایی مانند احراز هویت و رمزنگاری تقویت میشود. در نهایت، با توجه به طراحی منحصر به فردش، MQTT انتخابی ایدهآل برای کاربردهای متنوع IoT به شمار میآید.
سوالات متداول
مهمترین مزیت پروتکل MQTT چیست؟
مهمترین مزیت پروتکل MQTT، طراحی سبک و کارآمد آن است که امکان برقراری ارتباط پایدار و سریع را در شبکههای با پهنای باند محدود و دستگاههای با منابع پردازشی کم فراهم میکند. این ویژگی، MQTT را به گزینهای ایدهآل برای کاربردهای اینترنت اشیا (IoT) تبدیل کردهاست، جایی که دستگاهها اغلب با محدودیتهای منابع و اتصال مواجه هستند.
علامت «+» در MQTT چیست؟
در پروتکل MQTT، علامت «+» به عنوان یک «wildcard تک سطحی» شناخته میشود. این علامت به شما امکان میدهد در موضوعات (topics) مشترک شوید که در یک سطح خاص، هر مقداری را میپذیرند. علامت + به کاربران اجازه میدهد که در موضوعات با سطح دسترسی یکسان، به صورت دستهای مشترک شوند.
آیا MQTT امن است؟
MQTT بهخودیخود امن نیست، اما با بهکارگیری روشهایی مانند احراز هویت، رمزنگاری TLS/SSL و کنترل دسترسی ACL میتوان امنیت آن را بهطور چشمگیری ارتقا داد؛ بنابراین، با رعایت این نکات، MQTT میتواند در محیطهای مختلف با سطوح امنیتی متفاوت مورد استفاده قرار گیرد.
آیا MQTT یک پروتکل RESTful است؟
خیر، MQTT یک پروتکل RESTful نیست. MQTT یک پروتکل پیامرسانی بر پایه انتشار/اشتراک (publish/subscribe) است، در حالی که REST (Representational State Transfer) یک معماری نرمافزاری بر پایه درخواست/پاسخ (request/response) است. MQTT برای ارتباطات بلادرنگ (real-time) و دستگاههای با منابع محدود طراحی شده، در حالی که REST عمدتاً برای ارتباط بین سرویسهای وب استفاده میشود.
MQTT qos چیست؟
QoS در MQTT به معنای «کیفیت سرویس» است و سطوح مختلفی از تضمین تحویل پیام را بین فرستنده و گیرنده تعریف میکند. این سطوح شامل QoS 0 (حداکثر یک بار، بدون تضمین تحویل)، QoS 1 (حداقل یک بار، با احتمال دریافت پیام تکراری) و QoS 2 (دقیقاً یک بار، با بالاترین سطح اطمینان و پیچیدگی) است که هر کدام برای کاربردهای مختلف با نیازهای متفاوت به اطمینان از تحویل پیام مناسب هستند.