Menu

Koncepcje sterowania sieciowego

Istnieje wiele różnych koncepcji i trybów sterowania za pośrednictwem sieci komputerowych. Dotyczy to również Internetu Rzeczy. Nie będę tu przedstawiał wszystkich koncepcji. Przedstawię tu tylko trochę teorii. W kolejnych rozdziałach i na różnych przykładach przedstawię, jak te koncepcje można zastosować w praktyce.


•••  Programowanie sieciowe   •••

Gniazda (Sockets)
Podstawą wszelkiego programowania sieciowego są gniazda. Gniazdo to mechanizm umożliwiający komunikację między różnymi aplikacjami. Dokładniej, gniazda umożliwiają komunikację między dwoma różnymi procesami na tych samych lub odległych maszynach.
Istnieją cztery rodzaje gniazd, ale tylko dwa z nich są powszechnie używane.

1. Stream Sockets
Te gniazda używają do transmisji danych protokołu TCP (Transmission Control Protocol). Jeśli wyślesz przez gniazdo TCP trzy pakiety danych "A, B, C", to zostaną one dostarczone w dokładnie tej samej kolejności - "A, B, C". Jeśli dostarczenie pakietów jest niemożliwe, nadawca otrzymuje komunikat o błędzie.

2. Datagram Sockets
Te gniazda używają do transmisji danych protokołu UDP (User Datagram Protocol). Ten tryb nie potwierdza, czy dane zostały dostarczone - dostarczenie nie jest gwarantowane, podobnie jak kolejność dostarczanych pakietów danych. Niemniej zaletą jest to, że korzystanie z tego gniazda jest bardzo proste i transfer danych jest bardzo szybki. Wszystko, co musimy zrobić, to zbudować pakiet danych i dołączyć odpowiednie informacje o miejscu docelowym. Paczka jest gotowa do wysłania.

Z punktu widzenia programisty gniazdo to interfejs pomiędzy jego aplikacją a warstwą transportową dla komunikacji z węzłem docelowym w sieci. Programiście potrzebna jest tylko wiedza jak zaimplementować w kodzie swojej aplikacji takie gniazdo i jakie jest API do korzystania z funkcji bibliotecznych gniazda.
Większość aplikacji korzystających z protokołu HTTP (Hypertext Transfer Protocol) oraz FTP (File Transfer Protocol) używa gniazd do nawiązania połączenia między klientem a serwerem, a następnie do wymiany danych. Oczywiście w sterowaniu komputerowym to tryb oparty na TCP jest najczęściej używany.

Serwery i Klienty
Serwer to proces, który wykonuje pewne funkcje na żądanie klienta.
Klient to proces, który wysyła żądanie do serwera, aby serwer wykonał żądane zadanie.

Host
Mówiąc o komunikacji sieciowej nie należy zapominać również o sprzęcie.
Host sieciowy to komputer lub inne urządzenie, które jest podłączone do sieci komputerowej i posiada adres IP.

Adres IP
W sieciach komputerowych każdy host musi mieć adres IP. Adres protokołu internetowego (adres IP) to unikalny numer przypisywany każdemu urządzeniu podłączonemu do sieci komputerowej. IP (liczba 32 bitowa) pozwala na identyfikację hosta i wymianę z nim danych.
Jednak sam adres IP nie jest wystarczający do komunikacji sieciowej, ponieważ na tym samym hoście może działać wiele aplikacji. Każda z nich może wysyłać lub czekać na dane. Dlatego oprócz adresu IP używamy również podadresów (zwanych „portami”). Każdej aplikacji przypisywana jest unikalna wartość portu. Dzięki temu wykorzystanie portów umożliwia jednoczesne uruchamianie wielu aplikacji na jednym hoście. 16-bitowy numer portu może przyjmować wartości z zakresu od 0 do 65535.
Innymi słowy, aby zażądać od serwera określonej usługi, musimy podać adres gniazda jako:    IP address + Port number

Teraz jesteśmy już w pełni gotowi, aby zrozumieć poniższe schematy.

The diagram of a simple connection between two applications via sockets.

Schemat przedstawia prosty przykład połączenia gniazdowego pomiędzy dwoma maszynami w sieci komputerowej. Jak widać, połączenie oparte jest na protokołach TCP i IP poprzez odpowiednie gniazda (TCP = Transmission Control Protocol, IP = Internet Protocol). Każda z tych maszyn (serwer i klient) może mieć zaimplementowany dowolny system operacyjny.
Ta architektura oprogramowania jest oparta na powszechnie używanym czterowarstwowym modelu stosu protokołów komunikacyjnych TCP/IP.

The diagram of 4 layer TCP/IP model.

Warto wspomnieć, że obecnie modele TCP/IP i OSI są dwoma najczęściej używanymi standardami sieciowymi do komunikacji.
Ogólnie możemy podsumować, że TCP/IP jest kombinacją dwóch oddzielnych protokołów, które współpracują ze sobą w celu zapewnienia połączeń przez Internet. Za prawidłowy routing datagramów (podstawowych jednostek przesyłanych danych) odpowiada schemat adresowania IP. Protokół TCP odpowiada za usługi transportowe wyższego poziomu i on obejmuje protokół HTTP (Hypertext Transfer Protocol). Istnieje wiele opisów różnych metod protokołu HTTP. Przykładowo możesz zajrzeć tu ⇭.



•••  Sterowanie poprzez sieć   •••

Sterowanie poprzez sieć urządzeniami, które mają publiczne adresy IP.

Architektura "Klient - Serwer"
W oparciu o przedstawiony powyżej model możemy budować systemy sterowania dla różnych urządzeń.
Wyobraź sobie, że mamy urządzenie bezpośrednio połączone z serwerem - ta maszyna jest zarówno serwerem sieciowym, jak i kontrolerem naszego urządzenia. Serwer musi być wyposażony w odpowiednią aplikację, która na odpowiednim porcie nasłuchuje poleceń z maszyn klienckich.

The diagram of the Server-Client architecture.

Klient powinien być wyposażony w odpowiednią aplikację do komunikacji z serwerem - może to być przeglądarka internetowa. Kontrolerem może być serwer WWW, który jest w stanie odpowiadać na przychodzące polecenia HTTP. Architektura ta jest z powodzeniem implementowana w tak popularnych systemach jak ARDUINO i Raspberry Pi. Takie implementacje są potężnie wspierane przez oprogramowanie Node-Red, które jest dedykowanym narzędziem do łączenia urządzeń sprzętowych w Internecie Rzeczy.
Jeżeli chcemy sterować takimi urządzeniami przez Internet, ich kontrolery muszą być dostępne z zewnątrz w tej sieci – powinny mieć publiczne adresy IP.
To często jest dużą wadą takiego rozwiązania.

______________

Sterowanie poprzez sieci urządzeniami, które nie mają publicznych adresów IP.

Architektura "Klient - Serwer - Klient"
W internecie mamy miliardy urządzeń. Wiele z nich jest dostępnych na rynku w bardzo przystępnych cenach. Urządzenia te można zainstalować wszędzie tam, gdzie jest dostęp do Internetu - przewodowo lub bezprzewodowo (np. WiFi). Na przykład istnieje bardzo wiele rodzajów popularnych przełączników WiFi, które włączają/wyłączają urządzenia elektryczne z dowolnego miejsca na świecie.

The WIFI switch.

Między innymi one są tak chętnie wykorzystywane, ponieważ nie wymagają publicznych adresów IP.
Mamy dziś bardzo wiele rozwiązań do sterowania urządzeniami przez internet, w których kontrolery urządzeń nie potrzebują publicznych adresów IP.

Poniżej schemat przedstawia taką koncepcję - zarówno sterowane urządzenie, jak i urządzenie z aplikacją sterującą nie muszą mieć publicznych adresów IP.

The diagram of the Client-Server-Client architecture.

Jak widać kontroler urządzenia i „zdalny sterownik” są zaimplementowane jako aplikacje klienckie. Aplikacje wymieniają dane za pośrednictwem serwera. Tylko ten serwer musi mieć publiczny adres IP.
Aplikacje klienckie służące do sterowania mogą, ale nie muszą być trwale przechowywane na komputerach klienckich.
Również te aplikacje mogą być ładowane z dowolnych serwerów (np. WWW) i uruchamiane w przeglądarkach internetowych zaimplementowanych na maszynach klienckich. Zauważ, że serwer do ładowania aplikacji sterującej może być innym serwerem niż ten, który służy do wymiany danych.
W moich gadżetach można znaleźć praktyczny przykład takiego systemu komunikacji sieciowej między dwiema aplikacjami na hostach bez publicznych adresów IP. Uruchom "Wirtualny wentylator 02 - sterowany przez sieć" aby przetestować taką technikę.

⇽       ⇾

Obie prezentowane architektury są zgodne z pierwotnym modelem korzystania z Internetu, ponieważ sieć ta została od początku zaprojektowana w modelu „Klient-Serwer”. W tym modelu klient musi być zawsze inicjatorem żądania usługi.

Obecnie istnieje wiele serwerów wyspecjalizowanych do wymiany danych między urządzeniami podłączonymi do Internetu. W tym celu zaprojektowano nowe modele komunikacji i opracowano nowe zaawansowane protokoły, np. MQTT (Message Queue Telemetry Transport).
Oczywiście nadal jest stosowana komunikacja oparta na tradycyjnym modelu „klient-serwer”.
Taki model pozwala budować bardzo proste systemy w oparciu o najprostsze serwery WWW. Wystarczy skorzystać z serwera HTTP obsługującego skrypty opracowane w języku PHP (Hypertext Preprocessor) lub innych językach skryptowych.
Takie właśnie proste rozwiązania zostaną wykorzystane w prezentowanych przeze mnie tu realizacjach.

⇽       ⇾

Oczywiście przy tworzeniu aplikacji webowych należy pamiętać, że dostęp do kontrolowanych urządzeń mają zazwyczaj tylko upoważnieni użytkownicy. Często racjonalne jest podzielenie tych użytkowników na grupy, ponieważ wtedy każda grupa może mieć indywidualne uprawnienia do sterowania urządzeniami. Dlatego często wygodnie jest zaimplementować relacyjną bazę danych na maszynie serwerowej. Bardzo popularnym rozwiązaniem jest wykorzystanie najpopularniejszej na świecie darmowej bazy danych MySQL database. Dla niewielkiej liczby użytkowników kontrolowanego urządzenia możemy skorzystać z bazy danych w postaci tzw. plików płaskich. W takim rozwiązaniu tabele bazy są zapisane w jednym lub kilku plikach.