یک عدد دانشجوی مهندسی برق در دانشگاه آزاد کرج تا اطلاع ثانوی!! هرچی گیرم بیاد مینویسم، از هنر و موسیقی تا علم و فیزیک کوانتوم! به سایت رزومهی من هم سر بزنید: https://nvs-iot.ir
پروتکل MQTT چیست؟
برای جواب به این سوال اول باید سوال کلیتر و مهمتری رو بپرسیم: خود پروتکل چیه؟ چی کار میکنه و چه انواعی داره.
اگر بخوایم اینترنت و ارتباط دستگاهها با همدیگه رو به زبان تشبیه کنیم (که اولین و پایهترین وسیله انتقال اطلاعات بین انسانها هم همین زبان هست.) پروتکلها مثل قواعد دستور زبان هستن که هم دستگاه گیرنده و هم دستگاه فرستنده باید اون اصول و قوانین رو رعایت کنن. برگردیم به زبان انسانی، شما هیچوقت به من نمیگید «رفتن کن و آوردن آب را برای من» من ممکنه با شنیدن این جمله برای شما آب بیارم (نویسنده مقاله در اینجا تشنه شده و با تکنیکهای بروسعلی خواجوی به یخچال حمله ور میشود!) اما یه نیشخند ریزی هم میزنم و با خودم میگم «هه! حرف زدن این یارو رو!»
اما پروتکلهای اینترنتی با زبان انسانی خیلی فرق دارن. مهمترین فرقشون اینه که اگر پروتکلهای تعیین شده در سمت گیرنده و فرستنده رعایت نشه، در بهترین حالت اطلاعات اشتباه منتقل میشه و در بدترین حالت کلا ارتباط مثل آدمی که پاش رفته رو پوست موز، پخش زمین میشه!
حالا اصلا این پروتکل چجوری کار میکنه؟
پروتکل برای انتقال اطلاعات، اونها رو به بستههای کوچیکی به اسم Packet (آره همون پاکت فارسی خودمون!) تقسیم میکنه و میفرسته. مثل این میمونه که شما بخواید یه دستگاه بزرگ رو ببرید جای دیگه و فرض میکنیم جرثقیل هنوز اختراع نشده
(+د آخه مردک اگه اختراع نشده چجوری اسم گذاشتن براش؟
-سوال خوبیه، جواب خوبی هم داره! والا تو کپشن جواب میدم!)
خب حالا باید چیکار کنیم؟ با آچار و پیچ گوشتی و دم باریک و احیانا آچار آلن به جون دستگاه میافتیم، بازش میکنیم و بسته به نوع وسیله نقلیه انتخابی (کامیون، وانت، اتوبوس، سواری و ...) به همون نسبت به قطعات کوچیکتر تقسیم میکنیم. حالا اینکه اون اطلاعات چقدر کوچیک بشن، چطور رمزگذاری بشن و ... دقیقا پروتکل چیزیه که اینا رو تعیین میکنه.
کپشن: گفتم فرض میکنیم! حالا شما گیر فلسفی نده برادر من! خواهر من! هموطن من، عزیز من، بی **** «صدای بوق»
انواع پروتکلهای اینترنت
همونطور که تو عکس بالا میبینید، پروتکلهای اینترنت انواع مختلفی دارن که چندتاشون رو مختصر توضیح میدم:
TCP/IP:
این پروتکل امکان برقراری ارتباط بین دستگاههای مختلف رو فراهم میکنه. به این شکل که کنترل میکنه هر دستگاه یا کامپیوتری که به اینترنت وصل شده، یه آدرس (شناسنامه) غیر تکراری داره تا ارسال و دریافت دادهها در مبدا و مقصد، درست انجام بشه. یعنی اولا اطلاعات ارسال شده با اطلاعات مبدا همخوانی داشته باشه و ثانیا، بستههای اطلاعاتی در مقصد، به درستی کنار هم قرار بگیرن تا فایل یا پیام درست، تشکیل بشه. (از انتقال دستگاه بزرگه بخوایم مثال بزنیم، باید قطعات و پیچ و مهره و ... به درستی کنار هم قرار بگیرن تا ما در نهایت به جای زباله خرد کن، چرخ گوشت عباس آقا قصاب رو تحویل نگیریم!)
HTTP/HTTPS:
این پروتکل که معرف حضور همهی اینترنت بازها و وبگردهای حرفهای هست، مخصوص صفحههای اینترنتی و به اصطلاح HyperText هست و تعیین میکنه وقتی من و شما کروم یا فایرفاکس یا اینترنت اکسپلورر خدابیامرز رو باز میکنیم، متنها، عکس و ... چطور منتقل بشن و من و شما بتونیم ببینیم و بخونیم و برای هم برفستیم. HTTP مخفف HyperText Transfer Protocol هست که تو چهار کلمه معنی همه این چیزایی رو میده که شرح ما وقع دادم!!
روح اینترنت اکسپلورر و ابوالقاسم فردوسی: مشکل داری؟ بی **** ما داریم اینجا زحمت میکشیم!
فرق http و https:
فرق خاصی ندارن به جز این که پروتکل https که الآن تبدیل به استاندارد ضروری برای وبسایتها شده و موتورهای جستجو (در واقع یعنی گوگل!) هم در امتیاز SEO لحاظش میکنن، از پروتکل SSL استفاده میکنه و قبلا صرفا برای سایتهایی که اطلاعات حساس کاربرها مثل نام کاربری و رمز عبور، اطلاعات کارت بانکی و ... ذخیره میکردن اجباری بود اما الآن اگه سایتتون HTTPS نداشته باشه، مرورگرهای درست حسابی (اهم اهم مثل کروم و فایرفاکس اهم اهم) نمیذارن وارد این سایتها بشید یا اگه هم بذارن میگن باشه داداش ولی خونت پای خودته!
SMTP:
مخفف Simple Mail Transfer Protocol که همونطور که از اسمش معلومه، برای ایمیلهای خروجی از صندوق شما استفاده میشه و به محض رسیدن ایمیل به گیرنده، اون ایمیل رو از صندوق خروجی شما به سینه زباله دانی تاریخ میفرسته. (منطور شاعر در اینجا از صندوق خروجی، صندوق ایمیلهای «در حال ارسال» است نه «ارسال شده»)
خب باشه، حالا بگو MQTT چه کوفتیه بزرگوار؟
خونِ سرد خودتو حفظ کن فرزندم الآن میگم برات ولی قبلش باید فرق IPV4 و IPV6 رو توضیح بدم. به جان خودم خیلی طول نمیکشه!
پروتکل اینترنت ورژن ۴ یا Internet Protocol Version 4 از محبوبترین پروتکلهای اینترنت بود که ۳۲ بیتی بود و خیلی هم بچهی خوب و حرف گوش کنی بود. اما با گسترده شدن ارتباطات و بیشتر شدن تعداد دستگاههای متصل به اینترنت، نیاز به امنیت، سرعت بیشتر و البته آدرسهای اختصاصی هم بیشتر شد. این شد که تصمیم به اختراع جانوری به نام پروتکل اینترنت ورژن ۶ یا Internet Protocol Version 6 گرفتن. البته این جانور همسن من (متولد ۱۹۹۸بلاد کفر یا ۱۳۷۷ خودمون) هست.
فرقش اینه که بزرگوار ۱۲۸ بیتی هست (یعنی حداکثر چیزی حدود ۴.۳ میلیارد آدرس مختلف میشد با IPV4 ساخت در حالی که تعداد آدرسهای اختصاصی که با IPV6 میشه ساخت چیزی حدود ۳.۴ ضربدر ۱۰ ده به توان ۳۸ هست! یعنی تعداد کل دونه شنهای روی زمین + تعداد مورچههایی از زمان دایناسورها تا الآن به دنیا اومدن هم با هم حساب کنیم بعید میدونم به چنین عدد غول تشنی برسه! ) و فرق دوم امنیت بیشتر در مقایسه با داداش بزرگترش هست. حالا اصلا به چه دردی میخوره؟
حتی قبل از این که پای اینترنت اشیا بیاد وسط، تعداد آدرسهای IP که میشد با IPV4 تولید کرد، در حال اتمام بود. یعنی همینطوریش اوضاع خیلی خیط بود، با ورود اینترنت اشیا و افزایش دستگاههای آنلاین، این موضوع بدتر هم میشد. این بود که گفتن این IPV6 وا مونده که اصلا اختراعش کردیم، خب بیایم مثل بچه آدم استفاده کنیم ازش دیگه!
حالا میرسیم به این که MQTT چیه و چیکار میکنه:
این بزرگوار مخفف Message Queuing Telemetry Transport هست و هم قابلیت ارتباط ماشین - ماشین و هم ماشین - سرویس ابری - ماشین رو داره. یعنی از این پروتکل هم میشه برای ارسال دستور یا اطلاعات از دستگاهی به دستگاه دیگه و هم از دستگاه به سرور و بعد به جاهای دیگه استفاده کرد. همچنین این پروتکل برای انتقال دادههای سبک از طریق اینترنت با پهنای باند پایین طراحی شده. البته این به این معنی نیست که با پهنای باند بالا نشه ازش استفاده کرد بلکه معنیش اینه که میتونه (و باید هم!) در پهنای باند پایین هم اطلاعات رو به سبکترین شکل و با بالاترین سرعت ممکن انتقال بده تا فرآیندهای صنعتی و یا فرآیندهای حساس (مثل کنترل ترافیک یا عمل جراحی از راه دور) دچار مشکل و اختلال نشن. به عبارتی همون مختصر و مفید و پر سرعت خودمونی.
پروتکل MQTT به دلیل مصرف پایین در عمل، قابلیت این رو داره به میلیونها دستگاه وصل بشه (اونایی که Watch Dogs بازی کردن قشنگ میفهمن منظورمو) یه شهر رو تصور کنید که همه چیز از ماشینها گرفته تا تلویزیونها و چراغ راهنمایی و ... همه به یک شبکه واحد وصل هستن و با هماهنگی کار اداره شهر و ترافیک و تصادف و تراکنشهای بانکی و ... رو انجام میدن. MQTT همچین رویایی رو میتونه به واقعیت تبدیل کنه.
امنیت MQTT با روشهای مختلف رمزگذاری اطلاعات و احراز هویت دستگاههای متصل، تا حد زیادی بالاست و از یه طرف کار رمزگذاری اطلاعات رو برای برنامه نویسها هم راحت میکنه.
به قول دکتر نیما افشار اساسا دلیل به وجود اومدن MQTT نیاز به انتقال اطلاعات بیشتر در کمترین زمان و تحت بدترین شرایط هست و مهندسین خلاق گرامی این پروتکل رو به وجود آوردن که ما بتونیم در حالی که تو خونه کیوی میخوریم، ببینیم وضعیت باغی که تو شونصد کیلومتریمون هست چجوریه و آیا به عنوان مثال نیاز به آبیاری و کود دادن و ... داره یا نه و اینا.
بسه دیگه این همه حرف زدم! هم شما کار و زندگی دارید هم من! D:
پ.ن: راستی Watch Dogs 1 رو بازی کنید براتون خوبه، ولی از من میشنوین سراغ بعدیاش نرین!
مطلبی دیگر از این انتشارات
آشنایی با دیزاین پترنها: راهکارهای استاندارد برای حل مسائل برنامهنویسی
مطلبی دیگر از این انتشارات
یه پروژه بامزه با پایتون : ساعت دیجیتالی به اسم کدون کلاک (تولد مجدد کد منبع)
مطلبی دیگر از این انتشارات
ایمن سازی کلیدهای API در پروژه های اندروید