Прылада стаіць за хатнім роўтарам без прабросу порта і без публічнага адраса, і ёй усё роўна трэба атрымаць канфігурацыю за секунды. Хітрасць не ў дзірцы ў міжсеткавым экране. Гэта злучэнне, якое прылада адкрывае вонкі да брокера, да якога можа дацягнуцца, і той затым перадае паведамленні назад па тым жа ўсталяваным шляху. Уся ўласцівасць, якая падабаецца людзям у гэтым дызайне, і кожная пастка ў ім паходзяць ад гэтага перавяртання.

Што насамрэч праходзіць праз NAT

Калі прылада адкрывае TCP-злучэнне да брокера, хатні роўтар стварае адлюстраванне і трымае яго жывым увесь час існавання патоку. Адказы ў гэтым патоку вяртаюцца да прылады, бо адлюстраванне ўжо існуе. Брокер ніколі не ініцыюе нічога ў бок дома, таму няма непатрабаванага ўваходнага пакета, які роўтар мог бы адхіліць. У гэтым уся сеткавая аргументацыя, і таму падыход працуе ў сетках, якія вы не кантралюеце.

Прылада павінна падтрымліваць злучэнне жывым або аднаўляць яго, і гэта становіцца пытаннем надзейнасці, як толькі архітэктура вызначана.

Брокер маршрутызуе тэмы, а не праксіруе HTTP

MQTT вызначае абмены публікацыі і падпіскі: прылада падпісваецца на фільтр тэм, які ёй дазволена чытаць, а ўпаўнаважаны кантролер публікуе ў адпаведную тэму. Брокер супастаўляе публікацыі з падпіскамі і дастаўляе копіі. Ён не ведае, што такое запыт браўзера, і не будзе перасылаць HTTP GET на вэб-сервер прылады. Калі існуючая прашыўка размаўляе толькі па HTTP, дызайн з брокерам патрабуе змены ў праграме або наўмыснага кампанента перакладу.

Імёны тэм таксама не аўтарызацыя. Большасць брокераў падтрымліваюць спісы кантролю доступу для кожнага кліента, і прылады варта абмяжоўваць уласнымі дрэвамі публікацыі і падпіскі, а не дзяліць адзіную глабальную прастору імёнаў.

Рэсурсы прылады вызначаюць форму TLS

У ESP8266 абмежаваная RAM, і TLS-рукапаціканне — самае дарагое, што ён робіць. Ядро Arduino пастаўляе BearSSL менавіта дзеля гэтага абмежавання, і выбар паміж праверкай CA і замацаваннем адбітка змяняе як памяць, так і тое, што можа зрабіць зламыснік з сапраўдным сертыфікатам на іншае імя. Праверка CA брокера — мацнейшы варыянт, калі куча дазваляе. Памер карыснай нагрузкі таксама важны: кліент MQTT трымае буфер, і паведамленні, большыя за яго, моўчкі абрэзваюцца, калі буфер не павялічыць наўмысна.

Keepalive і тайм-аўты сокета — частка таго ж бюджэту, бо кліент, які ніколі не заўважае мёртвае злучэнне, перастае атрымліваць каманды, не паведамляючы пра памылку.

Семантыка паведамленняў, якая кусаецца

Захаванае паведамленне зберагаецца брокерам і дастаўляецца пазнейшым адпаведным падпісчыкам, што выдатна для бягучага стану і небяспечна для аднаразовых каманд: прылада, якая перападключылася, можа атрымаць учорашнюю каманду як новую. QoS 1 гарантуе дастаўку як мінімум адзін раз, таму дублікаты нармальныя, і праграма павінна быць устойлівай да паўтору, ідэальна — з ідэнтыфікатарам або адзнакай часу, якую можна адхіліць. Апошняя воля дае сігнал стану, калі прылада падае, але толькі калі злучэнне сапраўды адмаўляе, а не завісае.

Паводзіны чыстай сесіі вырашаюць, ці захоўвае брокер вашы падпіскі, пакуль вас няма, і памылка тут — прычына, чаму некаторыя прылады прапускаюць першае паведамленне пасля кожнага перападключэння.

TLS абараняе ўчастак да брокера. Гэта не скразное шыфраванне нагрузкі ад аператара брокера, які можа чытаць усё, што вы публікуеце праз яго.

Абмяжуйце жыццёвы цыкл і праверце яго бясшкоднымі данымі

Плануйце перападключэнне з адступленнем, а не шчыльным цыклам паўтораў, падпісвайцеся явна, калі сесія не пастаянная, і запісвайце вынік злучэння, каб маўклівая афлайн-прылада пакідала сведкі. Праверце шлях перападключэння на ўзорах нагрузкі, якія нічога не робяць, бо першы вытворчы тэст канала каманд не павінен быць сапраўднай камандай. Затым пацвердзіце, што робіць састарэлае захаванае паведамленне пры перападключэнні, і вырашыце, ці прымальныя такія паводзіны для кожнай тэмы.

Зроблена так, дызайн прыбірае адно ўваходнае сеткавае патрабаванне і пакідае праграмнае забеспячэнне прылады, палітыку брокера і семантыку паведамленняў бачнай працай, а не схаванымі дапушчэннямі.

Падобныя артыкулы