ام كيو تي تي
شعار MQTT | |
| حالة | نُشرت |
|---|---|
| بدأت السنة | 1999 |
| أحدث إصدار | 5.0 [1] 7 مارس 2019 |
| منظمة |
|
| لجنة | اللجنة الفنية للنقل عن بعد لرسائل OASIS [4] |
| المحررين | أندرو بانكس (IBM)، إد بريجز (مايكروسوفت)، كين بورجينديل (IBM)، راؤول جوبتا (IBM) [1] |
| المعايير ذات الصلة | MQTT-SN [5] |
| موقع إلكتروني | موقع mqtt.org |
MQTT (كان في الأصل اختصارًا لـ MQ Telemetry Transport [a] ) هو بروتوكول شبكة خفيف الوزن للنشر والاشتراك من جهاز إلى جهاز لخدمة قائمة انتظار الرسائل / قائمة انتظار الرسائل . وهو مصمم للاتصالات بالمواقع البعيدة التي تحتوي على أجهزة ذات قيود على الموارد أو نطاق ترددي محدود للشبكة ، كما هو الحال في إنترنت الأشياء (IoT). يجب أن يعمل عبر بروتوكول نقل يوفر اتصالات منظمة وخالية من الخسائر وثنائية الاتجاه - عادةً، TCP/IP . [1] إنه معيار OASIS مفتوح وتوصية ISO ( ISO/IEC 20922 ).
تاريخ
قام آندي ستانفورد كلارك ( IBM ) وأرلين نيبر (الذي كان يعمل آنذاك في شركة Eurotech, Inc. ) بتأليف النسخة الأولى من البروتوكول في عام 1999. [6] وقد تم استخدامه لمراقبة خطوط أنابيب النفط داخل نظام التحكم الصناعي SCADA . [7] وكان الهدف هو الحصول على بروتوكول يتميز بكفاءة النطاق الترددي وخفيف الوزن ويستخدم طاقة بطارية قليلة، لأن الأجهزة كانت متصلة عبر رابط الأقمار الصناعية، والذي كان مكلفًا للغاية في ذلك الوقت. [8]
تاريخيًا، جاء "MQ" في "MQTT" من خط إنتاج IBM MQ (الذي كان يُعرف آنذاك باسم "MQSeries")، حيث يرمز إلى "Message Queue". ومع ذلك، يوفر البروتوكول رسائل النشر والاشتراك (بدون طوابير، على الرغم من الاسم). [9] في المواصفات التي فتحتها IBM كإصدار 3.1، تمت الإشارة إلى البروتوكول باسم "MQ Telemetry Transport". [10] [11] تشير الإصدارات اللاحقة التي أصدرتها OASIS إلى البروتوكول باسم "MQTT" فقط، على الرغم من أن اللجنة الفنية نفسها تسمى "OASIS Message Queuing Telemetry Transport Technical Committee". [4] منذ عام 2013، لم يعد "MQTT" يرمز إلى أي شيء. [12] [9]
في عام 2013، قدمت شركة IBM إصدار MQTT v3.1 إلى هيئة مواصفات OASIS مع ميثاق يضمن قبول التغييرات الطفيفة فقط على المواصفات. [4] بعد تولي صيانة المعيار من IBM، أصدرت OASIS الإصدار 3.1.1 في 29 أكتوبر 2014. [13] [14] تم إصدار ترقية أكثر جوهرية لإصدار MQTT 5، بإضافة العديد من الميزات الجديدة، [15] في 7 مارس 2019. [1]
MQTT-SN (MQTT لشبكات الاستشعار) هو أحد أشكال البروتوكول الرئيسي الموجه للأجهزة المضمنة التي تعمل بالبطارية على الشبكات غير TCP/IP، [16] مثل Zigbee . [17]
ملخص
يحدد بروتوكول MQTT نوعين من كيانات الشبكة: وسيط الرسائل وعدد من العملاء. وسيط MQTT هو خادم يستقبل جميع الرسائل من العملاء ثم يقوم بتوجيه الرسائل إلى عملاء الوجهة المناسبين. [18] عميل MQTT هو أي جهاز (من وحدة تحكم دقيقة إلى خادم كامل) يقوم بتشغيل مكتبة MQTT ويتصل بوسيط MQTT عبر شبكة. [19]
يتم تنظيم المعلومات في تسلسل هرمي من الموضوعات. عندما يكون لدى الناشر عنصر جديد من البيانات لتوزيعه، فإنه يرسل رسالة تحكم بالبيانات إلى الوسيط المتصل. ثم يقوم الوسيط بتوزيع المعلومات على أي عملاء اشتركوا في هذا الموضوع. لا يحتاج الناشر إلى الحصول على أي بيانات حول عدد المشتركين أو مواقعهم، ولا يتعين على المشتركين بدورهم تكوين أي بيانات حول الناشرين.
إذا تلقى وسيط رسالة حول موضوع لا يوجد مشتركون حاليون له، يتجاهل الوسيط الرسالة ما لم يقم ناشر الرسالة بتعيين الرسالة كرسالة محتفظ بها. الرسالة المحتفظ بها هي رسالة MQTT عادية مع تعيين علامة المحفوظة على true. يخزن الوسيط آخر رسالة محتفظ بها وجودة الخدمة المقابلة (QoS) للموضوع المحدد. يتلقى كل عميل مشترك في نمط موضوع يطابق موضوع الرسالة المحتفظ بها الرسالة المحتفظ بها فور اشتراكه. يخزن الوسيط رسالة محتفظ بها واحدة فقط لكل موضوع. [20] يسمح هذا للمشتركين الجدد في موضوع ما بتلقي القيمة الأكثر حداثة بدلاً من انتظار التحديث التالي من الناشر.
عندما يتصل عميل النشر بالوسيط لأول مرة، فإنه يمكنه إعداد رسالة افتراضية ليتم إرسالها إلى المشتركين إذا اكتشف الوسيط أن عميل النشر قد انقطع اتصاله بالوسيط بشكل غير متوقع.
يتفاعل العملاء فقط مع وسيط، ولكن النظام قد يحتوي على عدة خوادم وسيطة تتبادل البيانات استنادًا إلى موضوعات المشتركين الحاليين.
يمكن أن تكون رسالة التحكم MQTT الدنيا بحجم لا يتجاوز بايتين من البيانات. ويمكن لرسالة التحكم أن تحمل ما يقرب من 256 ميجا بايت من البيانات إذا لزم الأمر. هناك أربعة عشر نوعًا محددًا من الرسائل تُستخدم لتوصيل وفصل العميل عن الوسيط، ونشر البيانات، والإقرار باستلام البيانات، والإشراف على الاتصال بين العميل والخادم.
يعتمد بروتوكول MQTT على بروتوكول TCP لنقل البيانات. يتم استخدام أحد المتغيرات، MQTT-SN، عبر وسائل نقل أخرى مثل UDP أو Bluetooth.
يرسل بروتوكول MQTT بيانات اعتماد الاتصال بتنسيق نص عادي ولا يتضمن أي تدابير للأمان أو المصادقة. ويمكن توفير ذلك باستخدام بروتوكول TLS لتشفير وحماية المعلومات المنقولة ضد التنصت أو التعديل أو التزوير.
المنفذ الافتراضي غير المشفر لـ MQTT هو 1883. المنفذ المشفر هو 8883. [21]
وسيط MQTT
وسيط MQTT عبارة عن برنامج يعمل على جهاز كمبيوتر (يعمل محليًا أو في السحابة)، ويمكن إنشاؤه ذاتيًا أو استضافته بواسطة جهة خارجية. وهو متاح في كل من التطبيقات مفتوحة المصدر والمملوكة.
يعمل الوسيط كمكتب بريد. لا يستخدم عملاء MQTT عنوان اتصال مباشر للمستلم المقصود، بل يستخدمون سطر الموضوع المسمى "الموضوع". يتلقى أي شخص مشترك نسخة من جميع الرسائل الخاصة بهذا الموضوع. يمكن لعملاء متعددين الاشتراك في موضوع من وسيط واحد (إمكانية واحد إلى العديد)، ويمكن لعميل واحد تسجيل اشتراكات في مواضيع مع وسطاء متعددين (العديد إلى واحد).
يمكن لكل عميل إنتاج واستقبال البيانات من خلال النشر والاشتراك، أي يمكن للأجهزة نشر بيانات المستشعر ولا تزال قادرة على تلقي معلومات التكوين أو أوامر التحكم (MQTT هو بروتوكول اتصال ثنائي الاتجاه). يساعد هذا في مشاركة البيانات وإدارة الأجهزة والتحكم فيها. لا يمكن للعميل بث نفس البيانات إلى مجموعة من الموضوعات، ويجب عليه نشر رسائل متعددة إلى الوسيط، مع إعطاء موضوع واحد لكل منها.
مع بنية وسيط MQTT، يتم فصل أجهزة العميل وتطبيق الخادم. وبهذه الطريقة، يظل العملاء غير مدركين لمعلومات بعضهم البعض. يمكن لـ MQTT، إذا تم تكوينه، استخدام تشفير TLS مع الاتصالات المحمية بالشهادة واسم المستخدم وكلمة المرور. اختياريًا، قد يتطلب الاتصال شهادة، في شكل ملف شهادة يقدمه العميل ويجب أن يتطابق مع نسخة الخادم.
في حالة الفشل، يمكن لبرنامج الوسيط والعملاء تسليم النسخ الاحتياطية تلقائيًا إلى وسيط احتياطي احتياطي/تلقائي. يمكن أيضًا إعداد وسطاء النسخ الاحتياطي لمشاركة تحميل العملاء عبر خوادم متعددة في الموقع أو في السحابة أو مزيج من هذه الخوادم.
يمكن للوسيط دعم كل من MQTT القياسي وMQTT للمواصفات المتوافقة مثل Sparkplug. [22] ويمكن القيام بذلك باستخدام نفس الخادم، وفي نفس الوقت وبنفس مستويات الأمان.
يحتفظ الوسيط بسجل لجميع معلومات الجلسة أثناء تشغيل الجهاز وإيقاف تشغيله، في وظيفة تسمى "الجلسات المستمرة". في هذه الحالة، يقوم الوسيط بتخزين معلومات الاتصال لكل عميل، والموضوعات التي اشترك فيها كل عميل، وأي رسائل لموضوع بجودة خدمة 1 أو 2. [23]
المزايا الرئيسية لوسيط MQTT هي:
- إزالة اتصالات العملاء المعرضة للخطر وغير الآمنة (عندما يتم تكوينها بشكل مناسب).
- القدرة على التوسع بسهولة من جهاز واحد إلى الآلاف.
- إدارة وتتبع حالات اتصال العميل، بما في ذلك بيانات اعتماد الأمان والشهادات (عندما يتم تكوينها بشكل مناسب).
- تقليل الضغط على الشبكات الخلوية أو شبكات الأقمار الصناعية دون المساس بالأمن (عندما يتم تكوينها بشكل مناسب).
أنواع الرسائل
يتصل

ينتظر حتى يتم إنشاء اتصال مع الخادم ويقوم بإنشاء رابط بين العقد.
قطع الاتصال
ينتظر حتى ينتهي عميل MQTT من أي عمل يجب عليه القيام به، وحتى يتم قطع اتصال جلسة TCP/IP .
نشر
يعود فورًا إلى مؤشر ترابط التطبيق بعد تمرير الطلب إلى عميل MQTT.
الإصدار 5.0
في عام 2019، أصدرت OASIS معيار MQTT 5.0 الرسمي. [1] يتضمن الإصدار 5.0 الميزات الجديدة الرئيسية التالية: [24]
- رموز السبب: تدعم الإقرارات الآن رموز الإرجاع، والتي توفر سببًا للفشل.
- الاشتراكات المشتركة: تسمح بتوزيع الحمل بشكل متوازن على العملاء، وبالتالي تقليل مخاطر مشاكل الحمل.
- انتهاء صلاحية الرسالة: يمكن أن تتضمن الرسائل تاريخ انتهاء الصلاحية ويتم حذفها إذا لم يتم تسليمها خلال هذه الفترة الزمنية.
- الاسم المستعار للموضوع: يمكن استبدال اسم الموضوع برقم واحد.
جودة الخدمة
يمكن لكل اتصال بالوسيط تحديد مقياس جودة الخدمة. [25] يتم تصنيفها بترتيب تصاعدي للنفقات العامة:
- مرة واحدة على الأكثر - يتم إرسال الرسالة مرة واحدة فقط ولا يتخذ العميل والوسيط أي خطوات إضافية للتأكيد على التسليم (الإصدار والنسيان).
- مرة واحدة على الأقل - تتم إعادة محاولة الرسالة من قبل المرسل عدة مرات حتى يتم استلام التأكيد (التسليم المؤكد).
- مرة واحدة بالضبط - يتواصل المرسل والمستقبل في مصافحة على مستويين لضمان استلام نسخة واحدة فقط من الرسالة (التسليم المؤكد).
لا يؤثر هذا المجال على معالجة عمليات نقل البيانات الأساسية TCP؛ حيث يتم استخدامه فقط بين مرسلي ومستقبلي MQTT.
حماية
تم اختراق أمان بروتوكول MQTT [26] في عام 2020 من قبل باحثين إيطاليين، من خلال تنفيذ هجمات الحرمان من الخدمة البطيئة على هذا البروتوكول (انظر CVE-2020-13849).
التجميع
تعتبر مجموعات MQTT تقنية مستخدمة لضمان التوافر العالي والتسامح مع الأخطاء وقابلية التوسع في عمليات نشر MQTT. [27] وباعتبارها بروتوكول مراسلة فعال وخفيف الوزن، تسمح مجموعات MQTT بإنشاء شبكة مرنة من عقد الوساطة المترابطة، مما يضمن توصيل الرسائل بشكل مستمر وموثوق حتى في مواجهة أعطال الأجهزة أو انقطاعات الشبكة.
انظر أيضا
- مقارنة بين تنفيذات MQTT
- بروتوكول صف الرسائل المتقدم (AMQP)
- بروتوكول الرسائل النصية الموجهة عبر البث (STOMP)
- بروتوكول التطبيق المقيد (CoAP)
- أباتشي ActiveMQ
- العزاء PubSub+ [28] [29]
- رابيت ام كيو
ملحوظات
- ^ MQ تعني "طوابير الرسائل"، وهي مشتقة من اسم منتج IBM MQ .
مراجع
- ^ abcde "MQTT Version 5.0". OASIS . 2019-03-07 . تم الاسترجاع في 2020-12-15 .
- ^ خطأ في الاستشهاد: تم استدعاء المرجع المسمى ولكن لم يتم تعريفه مطلقًا (انظر صفحة المساعدة ).
iec-standard - ^ "ISO/IEC 20922:2016 تكنولوجيا المعلومات - نقل بيانات طابور الرسائل (MQTT) v3.1.1" . تم الاسترجاع في 2024-10-27 .
- ^ abc "ميثاق اللجنة الفنية لنقل بيانات صف الرسائل (MQTT) في OASIS". OASIS . تم الاسترجاع في 2020-12-15 .
- ^ "MQTT SN Subcommittee". OASIS . تم الاسترجاع في 2020-12-15 .
- ^ "حفلة عيد الميلاد العاشرة". MQTT.org . يوليو 2009. مؤرشف من الأصل في 15 مارس 2015. تم الاسترجاع في 25 أبريل 2015 .
- ^ "نسخة من بودكاست IBM" (PDF) . IBM.com . نوفمبر 2011 . تم الاسترجاع في 7 يناير 2021 .
- ^ "البدء باستخدام MQTT". HiveMQ. 2020-04-24.
- ^ فريق ab ، The HiveMQ. "مقدمة عن بروتوكول MQTT - أساسيات MQTT: الجزء الأول". www.hivemq.com . تم الاسترجاع في 2021-09-26 .
- ^ "الاختلافات بين MQTT v3.1 وMQTT v3.1.1". OASIS Message Queuing Telemetry Transport (MQTT) TC. 12 فبراير 2015. تم الاسترجاع في 19 أغسطس 2021 .
- ^ "MQTT V3.1 Protocol Specification". Eurotech, International Business Machines Corporation (IBM). 2010. تم الاسترجاع في 2020-12-15 .
- ^ "محضر اجتماع اللجنة الفنية لـ OASIS MQTT المنعقد يوم الخميس 25 أبريل 2013 عبر الهاتف" (PDF) .
- ^ "MQTT الإصدار 3.1.1". 2014-10-29 . تم الاسترجاع 2020-12-16 .
- ^ "6 حقائق توضح لماذا يستحق الأمر الترقية إلى الإصدار الجديد MQTT 3.1.1". 2014-10-30 . تم الاسترجاع 2020-12-16 .
- ^ "الاختلافات بين 3.1.1 و 5.0". GitHub .
- ^ ستانفورد كلارك، آندي ؛ هونغ لينه ترونغ (14 نوفمبر 2013). "MQTT لمواصفات بروتوكول شبكات الاستشعار (MQTT-SN) الإصدار 1.2" (PDF) . oasis-open.org . اللجنة الفنية لنقل بيانات صف الرسائل (MQTT) في OASIS. ص. 28. تم الاسترجاع في 2020-12-15 .
- ^ "مقدمة إلى MQTT-SN (MQTT لشبكات الاستشعار)". 25 يناير 2017. تم الاسترجاع في 2020-09-16 .
- ^ Yuan, Michael. "Getting to know MQTT". IBM Developer . تم الاسترجاع في 13 أكتوبر 2019 .
- ^ "إنشاء العميل والوسيط/الخادم والاتصال - أساسيات MQTT: الجزء 3". hivemq.com . 17 يوليو 2019 . تم الاسترجاع في 13 أكتوبر 2019 .
- ^ "الرسائل المحفوظة - أساسيات MQTT: الجزء 8". hivemq.com . 2 مارس 2015 . تم الاسترجاع في 13 أكتوبر 2019 .
- ^ "FAQ - الأسئلة الشائعة | MQTT" . تم الاسترجاع في 2020-03-19 .
- ^ “MQTT Sparkplug/Tahu”. www.cirrus-link.com . تم الاسترجاع في 5 نوفمبر 2019 .
- ^ كوب، ستيفن (2020). MQTT للمبتدئين الكاملين . ص. 17. ISBN 9798779030762.
- ^ "ما هو MQTT؟ التعريف والتفاصيل". www.paessler.com . تم الاسترجاع في 2020-06-09 .
- ^ "مركز معرفة IBM - IBM MQ - استخدام MQTT مع IBM Integration Bus - جودة الخدمة وإدارة الاتصال". www.ibm.com . تم الاسترجاع في 2018-01-30 .
- ^ Vaccari, I., Aiello, M., & Cambiaso, E. (2020). SlowITe، هجوم جديد لرفض الخدمة يؤثر على MQTT. Sensors، 20(10)، 2932.
- ^ "مجموعة MQTT عالية التوفر - Bevywise Networks". www.bevywise.com . تم الاسترجاع في 2023-12-22 .
- ^ "واجهات برمجة التطبيقات والبروتوكولات". Solace . تم الاسترجاع في 2021-04-08 .
- ^ "MQTT 5.0 Support 🎉". Solace Community . 4 يناير 2021 . تم الاسترجاع في 2021-04-08 .
روابط خارجية
- الموقع الرسمي
- الموقع الرسمي للجنة الفنية
- مواصفات MQTT
- الإصدار 5.0، 2019-03-07: إصدار PDF، إصدار HTML
- الإصدار 3.1.1 Plus Errata 01, 2015-12-10: إصدار PDF، إصدار HTML
- الإصدار 3.1.1، 2014-10-29: إصدار PDF، إصدار HTML
- الإصدار 3.1، 2010: إصدار PDF مؤرشف 2022-12-04 على موقع Wayback Machine ، إصدار HTML
- مواصفات MQTT-SN
- الإصدار 1.2، 2013-11-14: إصدار PDF
