ESP8266-ის მართვა პორტის გადამისამართების გარეშე: MQTT-ის გამავალი გზა
ინტერნეტიდან ხელმისაწვდომი broker საშუალებას აძლევს სახლის მოწყობილობას იმართოს იმ კავშირით, რომელიც მან თავად გახსნა. რას ცვლის ეს TLS მეხსიერებისთვის, თემებისა და გამეორებისთვის.
მოწყობილობა დგას სახლის როუტერის უკან პორტის გადამისამართების და საჯარო მისამართის გარეშე და მაინც უნდა მიიღოს კონფიგურაცია წამებში. ხრიკი firewall-ში ხვრელი არ არის. ეს არის კავშირი, რომელსაც მოწყობილობა ხსნის გარეთ broker-ისკენ, რომელსაც შეუძლია მიაღწიოს, და ის შემდეგ შეტყობინებებს უკან აბრუნებს იმავე უკვე დამყარებული გზით. ყველა თვისება, რომელიც ამ დიზაინში მოსწონთ, და ყველა ხაფანგი მასში, სწორედ ამ შებრუნებიდან მოდის.
რა გადის რეალურად NAT-ში
როდესაც მოწყობილობა ხსნის TCP კავშირს broker-თან, სახლის როუტერი ქმნის ასახვას და ინახავს მას ცოცხლად ნაკადის სიცოცხლის განმავლობაში. პასუხები ამ ნაკადზე ბრუნდება მოწყობილობასთან, რადგან ასახვა უკვე არსებობს. Broker არასოდეს იწყებს არაფერს სახლისკენ, ამიტომ არ არის მოუთხოვნელი შემომავალი პაკეტი, რომელიც როუტერმა უნდა უარყოს. ეს არის მთელი ქსელური არგუმენტი და ამიტომ მუშაობს ეს მიდგომა ქსელებში, რომლებსაც არ აკონტროლებთ.
მოწყობილობამ უნდა შეინარჩუნოს კავშირი ცოცხლად ან ხელახლა დაამყაროს ის, რაც არქიტექტურის დაფიქსირების შემდეგ საიმედოობის საკითხი ხდება.
Broker თემებს მარშრუტიზებს, HTTP-ს პროქსი არ უწევს
MQTT განსაზღვრავს გამოქვეყნებისა და გამოწერის გაცვლებს: მოწყობილობა იწერს თემის ფილტრზე, რომლის წაკითხვის უფლებაც აქვს, ხოლო უფლებამოსილი კონტროლერი აქვეყნებს შესაბამის თემაზე. Broker ადარებს გამოქვეყნებებს გამოწერებს და აწვდის ასლებს. მან არ იცის, რა არის ბრაუზერის მოთხოვნა, და არ გადასცემს HTTP GET-ს მოწყობილობის ვებ სერვერზე. თუ არსებული firmware მხოლოდ HTTP-ს ლაპარაკობს, broker-ის დიზაინს სჭირდება აპლიკაციის ცვლილება ან განზრახ შექმნილი თარგმანის კომპონენტი.
თემების სახელები ასევე არ არის ავტორიზაცია. broker-ების უმეტესობა მხარს უჭერს წვდომის კონტროლის სიებს თითოეული კლიენტისთვის და მოწყობილობები უნდა შემოიფარგლოს საკუთარი გამოქვეყნებისა და გამოწერის ხეებით, ნაცვლად ერთი გლობალური სახელთა სივრცის გაზიარებისა.
მოწყობილობის რესურსები განსაზღვრავს TLS-ის ფორმას
ESP8266-ს აქვს შეზღუდული RAM და TLS ხელის ჩამორთმევა ყველაზე ძვირადღირებულია, რასაც ის აკეთებს. Arduino-ს ბირთვი BearSSL-ს სწორედ ამ შეზღუდვის გამო აწვდის და არჩევანი CA-ს გადამოწმებასა და თითის ანაბეჭდის მიმაგრებას შორის ცვლის როგორც მეხსიერების კვალს, ისე იმას, თუ რა შეუძლია სხვა სახელისთვის ვალიდური სერტიფიკატის მქონე თავდამსხმელს. broker-ის CA-ს გადამოწმება უფრო ძლიერი ვარიანტია, როცა გროვა იძლევა საშუალებას. ტვირთის ზომასაც აქვს მნიშვნელობა: MQTT კლიენტი ინახავს ბუფერს და მასზე დიდი შეტყობინებები ჩუმად იჭრება, თუ ბუფერი განზრახ არ გაიზარდა.
Keepalive და socket-ის ვადები ერთი და იმავე ბიუჯეტის ნაწილია, რადგან კლიენტი, რომელიც მკვდარ კავშირს არასოდეს ამჩნევს, წყვეტს ბრძანებების მიღებას შეცდომის შეტყობინების გარეშე.
შეტყობინებების სემანტიკა, რომელიც კბენს
შენახულ შეტყობინებას broker ინახავს და გადასცემს მოგვიანებით შესაბამის გამომწერთებს, რაც შესანიშნავია მიმდინარე მდგომარეობისთვის და საშიშია ერთჯერადი ბრძანებებისთვის: ხელახლა დაკავშირებულმა მოწყობილობამ შეიძლება მიიღოს გუშინდელი ბრძანება ისე, თითქოს ახალია. QoS 1 იძლევა გარანტიას მიწოდების სულ მცირე ერთხელ, ამიტომ დუბლიკატები ნორმალურია და აპლიკაცია უნდა იყოს გამეორების მიმართ უსაფრთხო, იდეალურად იდენტიფიკატორით ან დროის ნიშნით, რომლის უარყოფაც შეუძლია. ბოლო ნება გაძლევთ სტატუსის სიგნალს, როცა მოწყობილობა ვარდება, მაგრამ მხოლოდ მაშინ, თუ კავშირი ნამდვილად ვერ ხერხდება და არ ჩამოკიდებულა.
სუფთა სესიის ქცევა განსაზღვრავს, ინახავს თუ არა broker თქვენს გამოწერებს, სანამ არ ხართ, და ამაში შეცდომა არის მიზეზი, რის გამოც ზოგი მოწყობილობა ყოველი ხელახალი დაკავშირების შემდეგ პირველ შეტყობინებას კარგავს.
TLS იცავს broker-მდე მონაკვეთს. ეს არ არის ტვირთის ბოლოდან ბოლომდე დაშიფვრა broker-ის ოპერატორის წინააღმდეგ, რომელსაც შეუძლია წაიკითხოს ყველაფერი, რასაც მის მეშვეობით აქვეყნებთ.
შემოსაზღვრეთ სიცოცხლის ციკლი და გამოსცადეთ უვნებელი მონაცემებით
დაგეგმეთ ხელახალი დაკავშირება უკან დახევით და არა მჭიდრო განმეორებითი ცდის ციკლით, ხელახლა გამოიწერეთ ცხადად, თუ სესია მუდმივი არ არის, და ჩაწერეთ კავშირის შედეგი, რათა ჩუმმა ოფლაინ მოწყობილობამ კვალი დატოვოს. გამოსცადეთ ხელახალი დაკავშირების გზა ისეთი სანიმუშო ტვირთებით, რომლებიც არაფერს აკეთებენ, რადგან ბრძანებების არხის პირველი საწარმოო ტესტი არ უნდა იყოს ნამდვილი ბრძანება. შემდეგ დაადასტურეთ, რას აკეთებს მოძველებული შენახული შეტყობინება ხელახალი დაკავშირებისას და გადაწყვიტეთ, მისაღებია თუ არა ეს ქცევა თითოეული თემისთვის.
ასე გაკეთებული, დიზაინი შლის ერთ შემომავალ ქსელურ მოთხოვნას და მოწყობილობის პროგრამულ უზრუნველყოფას, broker-ის პოლიტიკას და შეტყობინებების სემანტიკას ტოვებს როგორც ხილულ სამუშაოს, დამალული ვარაუდების ნაცვლად.