ESP8266-nı port yönləndirməsi olmadan idarə etmək: MQTT-nin xaricə çıxan yolu
İnternetdən əlçatan bir broker, ev cihazının özünün açdığı bağlantı üzərindən idarə olunmasına imkan verir. Bunun TLS yaddaşına, mövzulara və təkrara nəyi dəyişdiyi.
Cihaz port yönləndirməsi və ümumi ünvanı olmayan ev routerinin arxasında oturur və yenə də konfiqurasiyanı saniyələr içində almalıdır. Hiylə firewall-da bir deşik deyil. Bu, cihazın çata bildiyi brokerə bayıra doğru açdığı və brokerin mesajları həmin qurulmuş yol ilə geri ötürdüyü bağlantıdır. İnsanların bu dizaynda sevdiyi hər xüsusiyyət və içindəki hər tələ bu tərsinə çevrilmədən gəlir.
NAT-dan əslində nə keçir
Cihaz brokerə TCP bağlantısı açdıqda, ev routeri bir xəritələmə yaradır və onu axının ömrü boyu canlı saxlayır. Həmin axın üzrə cavablar cihaza qayıdır, çünki xəritələmə artıq mövcuddur. Broker heç vaxt evə doğru heç nə başlatmır, ona görə routerin rədd edəcəyi tələb olunmamış giriş paketi yoxdur. Bütün şəbəkə arqumenti budur və buna görə bu yanaşma nəzarət etmədiyiniz şəbəkələrdə işləyir.
Cihaz bağlantını canlı saxlamalı və ya yenidən qurmalıdır; memarlıq oturuşduqdan sonra bu, etibarlılıq sualına çevrilir.
Broker mövzuları yönləndirir, HTTP-yə proksi etmir
MQTT nəşr və abunə mübadilələrini müəyyən edir: cihaz oxumağa icazəsi olan mövzu filtrinə abunə olur, səlahiyyətli nəzarətçi isə uyğun mövzuya nəşr edir. Broker nəşrləri abunələrlə uyğunlaşdırır və nüsxələri çatdırır. O, brauzer sorğusunun nə olduğunu bilmir və HTTP GET sorğusunu cihazın veb serverinə ötürməyəcək. Mövcud firmware yalnız HTTP danışırsa, broker dizaynı tətbiq dəyişikliyi və ya qəsdən hazırlanmış tərcümə komponenti tələb edir.
Mövzu adları da avtorizasiya deyil. Əksər brokerlər hər müştəri üçün giriş nəzarəti siyahılarını dəstəkləyir və cihazlar bir qlobal ad məkanını paylaşmaq əvəzinə öz nəşr və abunə ağacları ilə məhdudlaşdırılmalıdır.
Cihaz resursları TLS formasını müəyyən edir
ESP8266-nın RAM-ı məhduddur və TLS handshake onun etdiyi ən bahalı şeydir. Arduino nüvəsi BearSSL-i məhz bu məhdudiyyət üçün göndərir və CA-nın yoxlanması ilə barmaq izinin bərkidilməsi arasındakı seçim həm yaddaş izini, həm də başqa ada malik etibarlı sertifikatı olan hücumçunun nə edə biləcəyini dəyişir. Heap imkan verdikdə brokerin CA-sını yoxlamaq daha güclü variantdır. Yük ölçüsü də vacibdir: MQTT müştərisi bufer saxlayır və ondan böyük mesajlar, bufer qəsdən artırılmadıqca səssizcə kəsilir.
Keepalive və socket timeout-ları eyni büdcənin hissəsidir, çünki ölü bağlantını heç vaxt görməyən müştəri xəta bildirmədən əmrləri almağı dayandırır.
Dişləyən mesaj semantikası
Saxlanılan mesaj broker tərəfindən yadda saxlanılır və sonrakı uyğun abunəçilərə çatdırılır; bu, cari vəziyyət üçün əladır və birdəfəlik əmrlər üçün təhlükəlidir: yenidən qoşulan cihaz dünənki əmri yeni kimi ala bilər. QoS 1 ən azı bir dəfə çatdırılmanı zəmanət edir, ona görə dublikatlar normaldır və tətbiq təkrara davamlı olmalıdır, ideal olaraq rədd edə biləcəyi identifikator və ya vaxt damğası ilə. Son vəsiyyət cihaz düşdükdə sizə status siqnalı verir, ancaq bağlantı asılı qalmaq əvəzinə həqiqətən uğursuz olarsa.
Təmiz sessiya davranışı brokerin siz yoxkən abunələrinizi saxlayıb-saxlamadığını müəyyən edir və bunu səhv etmək bəzi cihazların hər yenidən qoşulmadan sonra ilk mesajı qaçırmasının səbəbidir.
TLS brokerə qədər olan addımı qoruyur. Bu, broker operatoruna qarşı yükün ucdan uca şifrələnməsi deyil; o operator vasitəsilə nəşr etdiyiniz hər şeyi oxuya bilər.
Həyat dövrünü məhdudlaşdırın və zərərsiz məlumatla sınaqdan keçirin
Yenidən qoşulmanı sıx təkrar cəhd dövrü əvəzinə geri çəkilmə ilə planlaşdırın, sessiya davamlı deyilsə açıq şəkildə yenidən abunə olun və qoşulma nəticəsini jurnala yazın ki, səssiz oflayn cihaz sübut qoysun. Yenidən qoşulma yolunu heç nə etməyən nümunə yüklərlə sınayın, çünki əmr kanalının ilk istehsal sınağı real əmr olmamalıdır. Sonra köhnəlmiş saxlanılan mesajın yenidən qoşulmada nə etdiyini təsdiqləyin və bu davranışın hər mövzu üçün məqbul olub-olmadığını qərarlaşdırın.
Bu şəkildə dizayn bir giriş şəbəkə tələbini aradan qaldırır və cihaz proqramını, broker siyasətini və mesaj semantikasını gizli fərziyyələr deyil, görünən iş kimi qoyur.