تکنولوژی یا فناوری چیست و چه مفاهیمی را در بر می گیرد؟
فروردین ۲۸, ۱۳۹۸دیپ وب (Deep Web) یا وب عمیق چیست؟
فروردین ۲۸, ۱۳۹۸MQTT (انتقال تلهمتری صف بندی پیام ها) یا (Message Queuing Telemetry Transport) یک پروتکل پیام رسانی انتشار-اشتراکی ( publish-subscribe) است که در استاندارد ایزو (ISO/IEC PRF 20922) نیز ثبت شده است. این پروتکل بر روی پروتکل TCP/IP عمل می کند و برای اتصالات به محل های دور که در آن ها به ردپای کوچکی از کد نیاز است و یا پهنای باند شبکه محدود است، طراحی شده است. الگوی پیام رسانی انتشار-اشتراکی به یک کارگزار پیام ها (message broker) احتیاج دارد.
اندی استنفورد-کلارک از شرکت IBM و آرلن نیپر از شرکت Cirrus Link اولین نسخه از این پروتکل را در سال ۱۹۹۹ ارائه کردند.
در سال ۲۰۱۳، IBM نسخه ۳.۱ MQTT را به همراه اجازه ای که امکان اعمال تغییرات کوچک در این پروتکل را فراهم می کرد به سازمان پیشبرد استاندارد های اطلاعاتی سازمان یافته(OASIS) ارائه کرد. MQTT-SN نسخه تغییر یافته پروتکل اصلی است که برای دستگاه های نهفته در شبکه های غیر TCP/IP مانند ZigBee توسعه یافته است.
از نظر تاریخی، MQ موجود در MQTT از مجموعه محصولات صف بندی پیام شرکت IBM یعنی IBM MQ گرفته شده است. با این وجود، نیازی نیست که خود صف بندی به عنوان یک ویژگی استاندارد در همه شرایط پشتیبانی شود.
پروتکل های جایگزین MQTT شامل پروتکل پیشرفته صف بندی پیام ها (AMQP)، پروتکل ساده متن محور پیام ها(STOMP)، پروتکل برنامه های محدود شده IETF، XMPP، DDS، OPC UA و پروتکل پیام رسانی برنامه های تحت وب (WAMP) هستند.
بررسی کلی MQTT
یک سیستم MQTT از مجموعه ای از کلاینت ها که با یک سرور در ارتباط هستند تشکیل شده است. به این سرور اغلب کارگزار گفته می شود. یک کلاینت می تواند ناشر اطلاعات و یا مشترک آن باشد. هر کلاینت می تواند به کارگزار متصل شود.
اطلاعات به صورت سلسله مراتبی از موضوعات سازمان دهی می شوند. وقتی یک ناشر داده های جدیدی دارد که می خواهد آن ها را توزیع کند، یک پیام کنترلی به همراه داده ها را به کارگزار متصل ارسال می کند. در ادامه کارگزار این اطلاعات را بین هر کدام از کلاینت هایی که مشترک آن موضوع مشخص هستند، توزیع می کند. به این ترتیب دیگر نیازی نیست تا ناشر اطلاعاتی در زمینه تعداد یا موقعیت مکانی مشترکین داشته باشد و به همین ترتیب، مشترکین نیز نیازی ندارند تا با استفاده از اطلاعات مربوط به ناشر به شیوه ای خاص تنظیم شوند.
اگر کارگزار موضوعی را دریافت کند که در حال حاضر هیچ مشترکی ندارد، آن موضوع را حذف خواهد کرد مگر این که ناشر به آن اعلام کند که این موضوع باید نگه داشته شود. این کار به مشترکین جدید یک موضوع اجازه می دهد تا به جای منتظر ماندن برای بروزرسانی بعدی از طرف ناشر، آخرین نسخه از اطلاعات موجود را دریافت کنند.
وقتی یک کلاینت ناشر برای اولین بار به کارگزار متصل می شود، می تواند پیام پیش فرضی را تنظیم کند تا در صورتی که کارگزار تشخیص داد کلاینت ناشر به صورت غیرمنتظره ارتباط خود را با کارگزار از دست داده است، این پیام به همه مشترکین ارسال شود.
کلاینت ها تنها با کارگزار تعامل دارند اما یک سیستم ممکن است دارای چندین سرور کارگزار باشد که اطلاعات را بسته به موضوعات مشترکین فعلیشان، با یکدیگر تبادل می کنند.
یک پیام کنترلی MQTT با حداقل حجم ممکن می تواند حاوی دو بایت اطلاعات باشد اما اگر نیاز باشد، همین پیام کنترلی می تواند تقریبا ۲۵۶ مگابایت از اطلاعات را نیز با خود حمل کند. به طور کلی چهارده نوع پیام برای برقراری و قطع ارتباط یک کلاینت با کارگزار، انتشار اطلاعات، تایید دریافت اطلاعات و نظارت بر ارتباط بین کلاینت و کارگزار تعریف شده است.
MQTT برای انتقال اطلاعات از پروتکل TCP استفاده می کند. نسخه مشابه آن یعنی MQTT-SN بر روی واسطه های انتقال دیگر مانند بلوتوث استفاده می شود.
MQTT اطلاعات هویتی اتصال را به صورت متن ساده ارسال می کند و هیچ گونه تمهیداتی برای احراز هویت یا امنیت در نظر نگرفته است. چنین تمهیداتی را می توان از طریق پروتکل زیرین TCP و با استفاده از اقدامات لازم برای حفاظت از صحت و سلامت اطلاعات منتقل شده در برابر استراق سمع یا جعل اطلاعات، فراهم کرد.
آیا MQTT یک استاندارد است؟
تا ماه مارس ۲۰۱۳، فرآیند استاندارد سازی MQTT توسط OASIS در حال انجام بوده است. مشخصات این پروتکل سال هاست که بدون استفاده از حق امتیاز در اختیار همگان قرار گرفته و شرکت هایی مانند Eurotech(که قبلا با نام Arcom شناخته می شد) این پروتکل را در محصولات خود اجرا کرده اند. در ماه نوامبر ۲۰۱۱، IBM و Eurotech اعلام کردند در گروه ماشین به ماشین Eclipse عضو خواهند شد و کد MQTT خود را در اختیار پروژه این گروه به نام Paho قرار خواهند داد.
WSMQTT چیست؟
WSMQTT محصولی از شرکت IBM است که پروتکل MQTT را به گونه ای کاملا مقیاس پذیر پیاده سازی کرده و به صورت مستقیم بین محصولات خانواده Websphere MQ عمل می کند. پیاده سازی های دیگری از MQTT نیز وجود دارند که در وب سایت رسمی به آن ها اشاره شده است.
آیا MQTT از ویژگی های امنیتی نیز پشتیبانی می کند؟
شما می توانید در نسخه ۳.۱ این پروتکل یک نام کاربری و رمز عبور را نیز از طریق بسته MQTT ارسال کنید. رمزنگاری در سرتاسر شبکه از طریق SSL و به صورت مستقل از پروتکل MQTT انجام می شود. لازم به ذکر است که SSL جز سبک ترین پروتکل ها به شمار نمی رود و بار کاری زیادی را به شبکه اضافه می کند. اقدامات امنیتی بیشتر را می توان از طریق یک اپلیکیشن که داده های ارسالی و دریافتی را رمزنگاری می کند، انجام داد اما این چیزی نیست که به صورت پیش فرض در این پروتکل وجود داشته باشد زیرا این پروتکل به گونه ای طراحی شده که ساده و سبک باشد.
انواع پیام ها
اتصال:
منتظر برقراری ارتباط با سرور می ماند و اتصالی را بین گره ها برقرار می کند
قطع اتصال:
منتظر کلاینت MQTT می ماند تا هر کاری را که باید، انجام دهد و سپس منتظر TCP/IP می ماند تا اتصال را قطع کند.
انتشار:
پس از انتقال درخواست کلاینت MQTT، بلافاصله به رشته کاربرد باز می گردد
کیفیت خدمات (QoS) – Quality of service
هر اتصال به کارگزار می تواند یک اقدام کیفیت خدمات نیز مشخص کند. این اقدامات بر حسب درجه افزایش Overhead طبقه بندی می شوند:
- حداکثر یک بار: پیام فقط یک بار فرستاده می شود و کلاینت و کارگزار هیچ قدم اضافی برای تایید دریافت پیام طی نمی کنند(ارسال پیام و فراموش کردن آن)
- حداقل یک بار: پیام چندین بار توسط فرستنده ارسال می شود تا در نهایت تاییدیه دریافت از سمت مقابل ارسال شود(تایید دریافت)
- دقیقا یک بار: فرستنده و دریافت کننده وارد یک تعامل دو سطحی می شوند تا اطمینان حاصل شود تنها یک کپی از پیام دریافت می شود(دریافت مطمئن)
این زمینه در انتقال اطلاعات بستر TCP تغییری ایجاد نمی کند و تنها بین فرستندگان و دریافت کنندگان MQTT مورد استفاده قرار می گیرد.
کاربرد MQTT در دنیای واقعی
چندین پروژه وجود دارند که از MQTT استفاده می کنند:
- Facebook Messenger: فیسبوک از جنبه هایی از MQTT در پیام رسان خود برای چت آنلاین استفاده کرده است. با این وجود مشخص نیست میزان این استفاده چقدر بوده یا دقیقا برای چه کاری استفاده شده است.
- IECC Scalable: آخرین نسخه از سیستم کنترل علامت دهی IECC محصول شرکت DeltaRail از MQTT برای برقراری ارتباط بین بخش های مختلف سیستم و سایر اجزای سیستم علامت دهی استفاده می کند. در واقع MQTT چارچوب ارتباطی زیرساختی را برای سیستمی که با استاندارد های CENELEC برای ارتباطات ایمن سازگاری دارد، تامین می کند.
- پلتفرم اینترنت اشیا EVRYTHNG: که از MQTT به عنوان یک پروتکل ماشین به ماشین برای میلیون ها دستگاه متصل استفاده می کند.
- در سال ۲۰۱۵، خدمات تحت وب آمازون، Amazon IoT تحت MQTT را معرفی کرد.
- SensorThings API متعلق به استاندارد OGC افزونه MQTT را به عنوان یک پروتکل پیام رسانی اضافی در نظرگرفته است. استفاده از این پروتکل در اجرای آزمایشی اینترنت اشیا در دپارتمان امنیت ملی ایالات متحده، به نمایش گذاشته شد.
- خدمات Upstream Infrastructure پلتفرم OpenStack از طریق یک گذرگاه پیام واحد MQTT به یکدیگر متصل هستند و Mosquitto به عنوان کارگزار MQTT عمل می کند.
- در سال ۲۰۱۵، شرکت Adafruit یک سرویس ابری رایگان MQTT را با نام Adafruit IO برای کسانی که به اینترنت اشیا علاقه مند هستند، منتشر کرد.
- مرکز IoT پلتفرم Microsoft Azure از MQTT به عنوان پروتکل اصلی برای پیام های دوری سنجی(تلهمتری) استفاده می کند.
- شرکت XIM, Inc در سال ۲۰۱۷ کلاینت MQTT را به نام MQTT Buddy منتشر کرد. این کلاینت در واقع یک اپلیکیشن MQTT برای کاربران اندروید و iOS است اما برای F-Droid منتشر نشده است. این اپلیکیشن به زبان های انگلیسی، روسی و چینی منتشر شده است.
- Node-RED از نسخه ۱۴/۰ به بعد برای تنظیم مناسب ارتباط های TLS از گره های MQTT پشتیبانی می کند.
- پلتفرم منبع باز اتوماسیون خانگی Home Assistant از MQTT پشتیبانی می کند و چهار گزینه را در اختیار کارگزاران MQTT قرار می دهد.
- چارچوب (فریمورک) اتوماسیون خانگی Pimatic برای Raspberry Pi که مبتنی بر Node.js است از پلاگین MQTT را ارائه می کند که به طور کامل از پلتفرم MQTT پشتیبانی می کند.
- McAfee OpenDXL مبتنی بر MQTT است اما تغییراتی در خود کارگزاران پیام ها ایجاد شده تا بتوانند برای پشتیبانی از قابلیت های پیشرفته مانند خدمات، پیام رسانی درخواست/پاسخ، شرایط انتقال سرویس به سرویسی دیگر در صورت مواجه شدن با مشکل(Fail over) و مناطق خدماتی، به صورت ذاتی فرمت پیام های DXL را متوجه شوند.