Udostępnij za pośrednictwem


Strumienie urządzeń usługi IoT Hub (wersja zapoznawcza)

Strumienie urządzeń usługi Azure IoT Hub ułatwiają tworzenie bezpiecznych tuneli TCP dwukierunkowych dla różnych scenariuszy komunikacji między chmurą a urządzeniem. Punkt końcowy przesyłania strumieniowego usługi IoT Hub mediatuje strumienie urządzeń, działając jako serwer proxy między urządzeniem a punktami końcowymi usługi. Ta konfiguracja, przedstawiona na poniższym diagramie, jest szczególnie przydatna, gdy urządzenia znajdują się za zaporą sieciową lub znajdują się w sieci prywatnej. W związku z tym strumienie urządzeń usługi IoT Hub ułatwiają klientom dotarcie do urządzeń IoT w sposób przyjazny dla zapory i bez konieczności szerokiego otwierania przychodzących lub wychodzących portów zapory sieciowej.

Diagram przedstawiający przegląd strumieni urządzeń usługi IoT Hub.

Urządzenia korzystające ze strumieni urządzeń usługi IoT Hub mogą pozostać bezpieczne i muszą otwierać wychodzące połączenia TCP z punktem końcowym przesyłania strumieniowego centrum IoT za pośrednictwem portu 443. Po ustanowieniu strumienia aplikacje po stronie usługi i urządzenia mają dostęp programowy do obiektu klienta Protokołu WebSocket w celu wysyłania i odbierania nieprzetworzonych bajtów do siebie. Gwarancje niezawodności i kolejności udostępniane przez ten tunel są na równi z protokołem TCP.

Świadczenia

Strumienie urządzeń usługi IoT Hub zapewniają następujące korzyści:

  • Bezpieczna łączność przyjazna dla zapory: urządzenia IoT można uzyskać z punktów końcowych usługi bez otwierania portu zapory przychodzącej na urządzeniu lub obwodach sieci (wymagana jest tylko łączność wychodząca z usługą IoT Hub przez port 443).

  • Uwierzytelnianie: obie strony urządzenia i usługi tunelu muszą być uwierzytelniane w usłudze IoT Hub przy użyciu odpowiednich poświadczeń.

  • Szyfrowanie: domyślnie strumienie urządzeń usługi IoT Hub używają połączeń z obsługą protokołu TLS. Ten czynnik gwarantuje, że ruch jest zawsze szyfrowany niezależnie od tego, czy aplikacja korzysta z szyfrowania, czy nie.

  • Prostota łączności: W wielu przypadkach użycie strumieni urządzeń eliminuje konieczność złożonej konfiguracji wirtualnych sieci prywatnych w celu umożliwienia łączności z urządzeniami IoT.

  • Zgodność ze stosem TCP/IP: strumienie urządzeń usługi IoT Hub mogą obsługiwać ruch aplikacji TCP/IP. Takie podejście oznacza, że ta funkcja może korzystać z szerokiej gamy protokołów zastrzeżonych i opartych na standardach.

  • Łatwość użycia w konfiguracjach sieci prywatnej: usługa może komunikować się z urządzeniem, odwołując się do jego identyfikatora urządzenia, a nie adresu IP urządzenia. Ten fakt jest przydatny w sytuacjach, gdy urządzenie znajduje się w sieci prywatnej i ma prywatny adres IP lub jego adres IP jest przypisywany dynamicznie i jest nieznany po stronie usługi.

Przepływy pracy strumienia urządzenia

Strumień urządzenia jest inicjowany, gdy usługa żąda połączenia z urządzeniem, podając jego identyfikator urządzenia. Ten przepływ pracy szczególnie pasuje do modelu komunikacji klienta/serwera, w tym SSH i RDP, gdzie użytkownik zamierza zdalnie nawiązać połączenie z serwerem SSH lub RDP uruchomionym na urządzeniu przy użyciu programu klienta SSH lub RDP.

Proces tworzenia strumienia urządzenia obejmuje negocjacje między głównymi i głównymi punktami końcowymi centrum IoT Hub w ramach urządzenia, usługi i przesyłania strumieniowego. Podczas gdy główny punkt końcowy centrum IoT organizuje tworzenie strumienia urządzenia, punkt końcowy przesyłania strumieniowego obsługuje ruch przepływujący między usługą a urządzeniem.

Przepływ tworzenia strumienia urządzenia

Programowe tworzenie strumienia urządzenia przy użyciu zestawu SDK obejmuje następujące kroki, które są również przedstawione na rysunku:

Diagram przedstawiający kroki procesu uzgadniania dla strumienia urządzenia usługi IoT Hub.

  1. Aplikacja urządzenia rejestruje wywołanie zwrotne z wyprzedzeniem, aby otrzymywać powiadomienia o zainicjowaniu nowego strumienia urządzenia na urządzeniu. Ten krok zwykle odbywa się, gdy urządzenie uruchamia się i nawiązuje połączenie z usługą IoT Hub.

  2. Program po stronie usługi inicjuje strumień urządzenia w razie potrzeby, podając identyfikator urządzenia (a nie adres IP).

  3. Usługa IoT Hub powiadamia program po stronie urządzenia, wywołując wywołanie zwrotne zarejestrowane w kroku 1. Urządzenie może zaakceptować lub odrzucić żądanie inicjowania strumienia. Ta logika może być specyficzna dla scenariusza aplikacji. Jeśli urządzenie odrzuci żądanie strumienia, usługa IoT Hub informuje odpowiednio usługę; w przeciwnym razie należy wykonać następujące czynności.

  4. Urządzenie tworzy bezpieczne wychodzące połączenie TCP z punktem końcowym przesyłania strumieniowego za pośrednictwem portu 443 i uaktualnia połączenie z protokołem WebSocket. Adres URL punktu końcowego przesyłania strumieniowego i poświadczenia używane do uwierzytelniania są udostępniane urządzeniu przez usługę IoT Hub w ramach żądania wysłanego w kroku 3.

  5. Usługa jest powiadamiana o wyniku akceptowania strumienia przez urządzenie i przechodzi do tworzenia własnego klienta protokołu WebSocket do punktu końcowego przesyłania strumieniowego. Podobnie otrzymuje on adres URL punktu końcowego przesyłania strumieniowego i informacje o uwierzytelnianiu z usługi IoT Hub.

W opisanym wcześniej procesie negocjacji ręki:

  • Proces uzgadniania musi zostać ukończony w ciągu 60 sekund (od kroku 2 do kroku 5), w przeciwnym razie uzgadnianie kończy się niepowodzeniem z powodu przekroczenia limitu czasu, a usługa jest o tym odpowiednio informowana.

  • Po zakończeniu wcześniej opisanego procesu tworzenia strumienia punkt końcowy przesyłania strumieniowego działa jako serwer proxy i przekazuje ruch między usługą a urządzeniem za pośrednictwem odpowiednich obiektów WebSocket.

  • Oba urządzenia i usługi wymagają łączności wychodzącej z głównym punktem końcowym usługi IoT Hub i punktem końcowym przesyłania strumieniowego przez port 443. Adres URL tych punktów końcowych jest dostępny na karcie Przegląd w portalu usługi IoT Hub.

  • Niezawodność i kolejność gwarancji ustalonego strumienia jest na równi z protokołem TCP.

  • Wszystkie połączenia z usługą IoT Hub i jej punktem końcowym przesyłania strumieniowego używają protokołu TLS i są szyfrowane.

Przepływ zakończenia

Ustalony strumień kończy się po rozłączeniu jednego z połączeń TCP z bramą (przez usługę lub urządzenie). Ta akcja może odbywać się dobrowolnie przez zamknięcie protokołu WebSocket na urządzeniu lub w programach usług albo mimowolnie w przypadku przekroczenia limitu czasu lub błędu procesu łączności sieciowej. Po zakończeniu połączenia urządzenia lub usługi z punktem końcowym przesyłania strumieniowego inne połączenie TCP jest również (wymuszone) zakończone, a usługa i urządzenie są odpowiedzialne za ponowne utworzenie strumienia, jeśli jest to konieczne.

Wymagania dotyczące łączności

Zarówno urządzenie, jak i boki usługi strumienia urządzenia muszą być w stanie nawiązać połączenia z usługą IoT Hub i jego punktem końcowym przesyłania strumieniowego z obsługą protokołu TLS. Taka sytuacja wymaga łączności wychodzącej przez port 443 do tych punktów końcowych. Nazwa hosta skojarzona z punktem końcowym przesyłania strumieniowego znajduje się w okienku przeglądu centrum IoT w witrynie Azure Portal, jak pokazano na poniższym zrzucie ekranu.

Zrzut ekranu przedstawiający okienko robocze centrum IoT w portalu Azure, z zaznaczoną nazwą hosta dla urządzeń przesyłających strumieniowo.

Alternatywnie informacje o punktach końcowych można pobrać przy użyciu interfejsu wiersza polecenia platformy Azure w sekcji właściwości centrum, w szczególności property.hostname i property.deviceStreams kluczy.

az iot hub devicestream show --name <YourIoTHubName>

Dane wyjściowe to obiekt JSON wszystkich punktów końcowych, z którymi urządzenie i usługa centrum mogą wymagać połączenia w celu ustanowienia strumienia urządzenia.

{
  "streamingEndpoints": [
    "https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
  ]
}

Uwaga

Upewnij się, że zainstalowano interfejs wiersza polecenia platformy Azure w wersji 2.73.0 lub nowszej. Najnowszą wersję można pobrać ze strony Instalowanie interfejsu wiersza polecenia platformy Azure.

Zezwalaj na łączność wychodzącą z punktami końcowymi przesyłania strumieniowego urządzenia

Jak wspomniano na początku tego artykułu, urządzenie tworzy połączenie wychodzące do punktu końcowego strumieniowania IoT Hub podczas procesu inicjowania strumieniowania urządzeń. Zapory na urządzeniu lub jego sieci muszą zezwalać na łączność wychodzącą z bramą przesyłania strumieniowego za pośrednictwem portu 443 (należy pamiętać, że komunikacja odbywa się za pośrednictwem połączenia protokołu WebSocket szyfrowanego przy użyciu protokołu TLS).

Nazwa hosta skojarzona z punktem końcowym przesyłania strumieniowego znajduje się w okienku przeglądu centrum IoT w witrynie Azure Portal, jak pokazano na poniższym zrzucie ekranu.

Zrzut ekranu przedstawiający okienko robocze centrum IoT w portalu Azure, z zaznaczoną nazwą hosta dla urządzeń przesyłających strumieniowo.

Alternatywnie te informacje można znaleźć przy użyciu interfejsu wiersza polecenia platformy Azure, jak pokazano w poniższym przykładzie:

az iot hub devicestream show --name <YourIoTHubName>

Uwaga

Upewnij się, że zainstalowano interfejs wiersza polecenia platformy Azure w wersji 2.73.0 lub nowszej. Najnowszą wersję można pobrać ze strony Instalowanie interfejsu wiersza polecenia platformy Azure.

Rozwiązywanie problemów za pośrednictwem dzienników zasobów strumieni urządzeń

Usługę Azure Monitor można skonfigurować w celu zbierania dzienników zasobów dla strumieni urządzeń emitowanych przez centrum IoT. Takie podejście może być przydatne w scenariuszach rozwiązywania problemów.

Wykonaj następujące kroki, aby utworzyć ustawienie diagnostyczne służące do wysyłania dzienników zasobów strumieni urządzeń dla centrum IoT do dzienników usługi Azure Monitor:

  1. W witrynie Azure Portal przejdź do centrum IoT Hub. W okienku po lewej stronie w obszarze Monitorowanie wybierz pozycję Ustawienia diagnostyczne. Następnie wybierz pozycję Dodaj ustawienie diagnostyczne.

  2. Podaj nazwę ustawienia diagnostycznego i wybierz pozycję Strumienie urządzeń (wersja zapoznawcza) z listy dzienników. Następnie wybierz pozycję Wyślij do obszaru roboczego usługi Log Analytics. Możesz wybrać istniejący obszar roboczy usługi Log Analytics lub utworzyć nowy.

    Zrzut ekranu przedstawiający okienko ustawień diagnostyki w portalu Azure z wyróżnionymi ustawieniami dzienników zasobów strumieni urządzeń.

  3. Po utworzeniu ustawienia diagnostycznego służącego do wysyłania dzienników zasobów strumieni urządzeń do obszaru roboczego usługi Log Analytics możesz uzyskać dostęp do dzienników, wybierając pozycję Dzienniki w obszarze Monitorowanie w okienku po lewej stronie centrum IoT w witrynie Azure Portal. Dzienniki zasobów strumieni urządzeń są wyświetlane w AzureDiagnostics tabeli i zawierają Category=DeviceStreams. Wyświetlenie dzienników w tabeli może potrwać kilka minut.

    Jak pokazano tutaj, tożsamość urządzenia docelowego i wynik operacji jest również dostępny w dziennikach.

    Zrzut ekranu przedstawiający dzienniki AzureDiagnostic dla centrum IoT Hub, z wyróżnieniem tożsamości, operacji i wyników wpisu dziennika zasobów Device Streams.

Aby dowiedzieć się więcej na temat korzystania z usługi Azure Monitor z usługą IoT Hub, zobacz Monitorowanie usługi Azure IoT Hub. Aby uzyskać informacje o wszystkich dziennikach zasobów, metrykach i tabelach dostępnych dla usługi IoT Hub, zobacz Dokumentacja danych monitorowania usługi Azure IoT Hub.

Dostępność w regionach

W publicznej wersji zapoznawczej strumienie urządzeń usługi IoT Hub są dostępne w regionach Środkowe stany USA, Wschodnie stany USA EUAP, Europa Północna i Azja Południowo-Wschodnia. Upewnij się, że centrum jest tworzone w jednym z tych regionów.

Dostępność zestawu SDK

Dwie strony każdego strumienia (po stronie urządzenia i usługi) używają zestawu SDK usługi IoT Hub do ustanowienia tunelu. W publicznej wersji zapoznawczej klienci mogą wybierać spośród następujących języków zestawu SDK:

  • Zestawy SDK języka C i C# obsługują strumienie urządzeń po stronie urządzenia.

  • Zestawy SDK Node.js i C# obsługują strumienie urządzeń po stronie serwera.

Następne kroki