Потоки устройств Центра Интернета вещей (предварительная версия)IoT Hub Device Streams (preview)

Потоки устройств Центра Интернета вещей Azure облегчают создание защищенных двусторонних туннелей TCP для различных сценариев взаимодействия между устройством и облаком.Azure IoT Hub device streams facilitate the creation of secure bi-directional TCP tunnels for a variety of cloud-to-device communication scenarios. Поток устройства проходит через конечную точку потоковой передачи Центра Интернета вещей, которая действует в качестве прокси-сервера между вашим устройством и конечными точками службы.A device stream is mediated by an IoT Hub streaming endpoint which acts as a proxy between your device and service endpoints. Эта конфигурация (показана на схеме ниже) особенно полезна, когда устройства находятся за сетевым брандмауэром или в частной сети.This setup, depicted in the diagram below, is especially useful when devices are behind a network firewall or reside inside of a private network. Таким образом, потоки устройств Центра Интернета вещей позволяют клиентам связываться с устройствами Центра Интернета вещей при использовании брандмауэра без необходимости открывать набор портов сетевого брандмауэра для входящего или исходящего трафика.As such, IoT Hub device streams help address customers' need to reach IoT devices in a firewall-friendly manner and without the need to broadly opening up incoming or outgoing network firewall ports.

«Обзор потоков устройства центра Интернета вещей»

При использовании потоков устройств Центра Интернета вещей устройства остаются защищенными и на них всего лишь нужно открыть исходящие подключения TCP к конечной точке потоковой передачи Центра Интернета вещей через порт 443.Using IoT Hub device streams, devices remain secure and will only need to open up outbound TCP connections to IoT hub's streaming endpoint over port 443. После установки потоковой передачи приложения на стороне службы и устройства получат программный доступ к объекту клиента WebSocket для обмена необработанными байтами.Once a stream is established, the service-side and device-side applications will each have programmatic access to a WebSocket client object to send and receive raw bytes to one another. Гарантии надежности и упорядоченности, предоставляемые этим туннелем, точно такие же, как и у протокола TCP.The reliability and ordering guarantees provided by this tunnel is on par with TCP.

ПреимуществаBenefits

Потоки устройств Центра Интернета вещей предоставляют следующие преимущества:IoT Hub device streams provide the following benefits:

  • Безопасное подключение при использовании брандмауэра. К устройствам Центра Интернета вещей можно получить доступ из конечных точек службы, не открывая порт входящего трафика брандмауэра на периметре устройства или сети (только исходящее подключение к Центру Интернета вещей должно осуществляться через порт 443).Firewall-friendly secure connectivity: IoT devices can be reached from service endpoints without opening of inbound firewall port at the device or network perimeters (only outbound connectivity to IoT Hub is needed over port 443).

  • Проверка подлинности: И на устройстве, и в службе как сторонах туннеля требуется аутентификация в Центре Интернета вещей с использованием соответствующих учетных данных.Authentication: Both device and service sides of the tunnel need to authenticate with IoT Hub using their corresponding credentials.

  • Шифрование. По умолчанию потоки устройств Центра Интернета вещей используют TLS-подключения.Encryption: By default, IoT Hub device streams use TLS-enabled connections. Это гарантирует, что трафик всегда шифруется, независимо от того, использует ли приложение шифрование.This ensures that the traffic is always encrypted regardless of whether the application uses encryption or not.

  • Простота подключения. Во многих случаях благодаря потокам устройств устраняется необходимость в сложной установке виртуальных частных сетей для подключения к устройствам Интернета вещей.Simplicity of connectivity: In many cases, the use of device streams eliminates the need for complex setup of Virtual Private Networks to enable connectivity to IoT devices.

  • Совместимость со стеком TCP/IP. Потоки устройств Центра Интернета вещей вмещают трафик приложения по протоколу TCP/IP.Compatibility with TCP/IP stack: IoT Hub device streams can accommodate TCP/IP application traffic. Это означает, что эту функцию может использовать широкий диапазон запатентованных протоколов, а также протоколов, основанных на стандартах.This means that a wide range of proprietary as well as standards-based protocols can leverage this feature.

  • Простота в использовании при настройке частной сети. Служба может подключиться к устройству по его идентификатору, а не по его IP-адресу.Ease of use in private network setups: Service can communicate with a device by referencing its device ID, rather than device's IP address. Это полезно в ситуациях, когда устройство находится в частной сети и имеет частный IP-адрес или когда IP-адрес назначается динамически и неизвестен на стороне службы.This is useful in situations where a device is located inside a private network and has a private IP address, or its IP address is assigned dynamically and is unknown to the service side.

Рабочие процессы устройства потокаDevice stream workflows

Потоковая передача данных устройства инициируется в том случае, когда служба запрашивает подключение к устройству с указанием его идентификатора.A device stream is initiated when the service requests to connect to a device by providing its device ID. Этот рабочий процесс особенно подходит для модели взаимодействия "клиент — сервер", в том числе с задействованием протоколов SSH и RDP, когда пользователь хочет удаленно подключиться к серверу SSH и RDP, выполняемому на устройстве, с помощью клиентской программы SSH и RDP.This workflow particularly fits into a client/server communication model, including SSH and RDP, where a user intends to remotely connect to the SSH or RDP server running on the device using an SSH or RDP client program.

Процесс создания потока устройства включает согласование между устройством, службой, основной конечной точкой и конечной точкой потоковой передачи Центра Интернета вещей.The device stream creation process involves a negotiation between the device, service, IoT hub's main and streaming endpoints. Хотя основная конечная точка Центра Интернета вещей организует создание потока устройства, конечная точка потоковой передачи обрабатывает трафик, который проходит между службой и устройством.While IoT hub's main endpoint orchestrates the creation of a device stream, the streaming endpoint handles the traffic that flows between the service and device.

Процесс создания потока устройстваDevice stream creation flow

Программное создание потока устройства с помощью пакета SDK состоит из приведенных ниже шагов, которые также показаны на рисунке ниже:Programmatic creation of a device stream using the SDK involves the following steps, which are also depicted in the figure below:

«Процесс подтверждения поток устройства»

  1. Приложение устройства заранее регистрирует обратный вызов, чтобы получить уведомление при инициации подключения нового потока к устройству.The device application registers a callback in advance to be notified of when a new device stream is initiated to the device. Этот шаг обычно происходит, когда устройство загружается и подключается к Центру Интернета вещей.This step typically takes place when the device boots up and connects to IoT Hub.

  2. Программа на стороне службы инициирует подключение потока устройства, когда это необходимо, предоставляя идентификатор устройства (не IP-адрес).The service-side program initiates a device stream when needed by providing the device ID (not the IP address).

  3. Центр Интернета вещей уведомляет программу на стороне устройства, вызывая обратный вызов, зарегистрированный на шаге 1.IoT hub notifies the device-side program by invoking the callback registered in step 1. Устройство может принять или отклонить запрос на инициацию потоковой передачи.The device may accept or reject the stream initiation request. Эта логика может отличаться в зависимости от конкретного сценария приложения.This logic can be specific to your application scenario. Если устройство отклоняет этот запрос потоковой передачи, Центр Интернета вещей уведомляет службу. В противном случае выполняются следующие действия.If the stream request is rejected by the device, IoT Hub informs the service accordingly; otherwise, the steps below follow.

  4. Устройство создает защищенное исходящее подключение TCP к конечной точке потоковой передачи через порт 443 и преобразует его в подключение WebSocket.The device creates a secure outbound TCP connection to the streaming endpoint over port 443 and upgrades the connection to a WebSocket. URL-адрес конечной точки потоковой передачи, а также учетные данные, используемые для аутентификации, предоставляются устройству с помощью Центра Интернета вещей как часть запроса, отправленного на шаге 3.The URL of the streaming endpoint as well as the credentials to use to authenticate are both provided to the device by IoT Hub as part of the request sent in step 3.

  5. Служба уведомляется о результатах принятия потока устройством и устанавливает собственное подключение клиента WebSocket к конечной точке потоковой передачи.The service is notified of the result of device accepting the stream and proceeds to create its own WebSocket client to the streaming endpoint. Аналогичным образом она получает URL-адрес конечной точки потоковой передачи и информацию об аутентификации из Центра Интернета вещей.Similarly, it receives the streaming endpoint URL and authentication information from IoT Hub.

Во время описанного выше процесса подтверждения:In the handshake process above:

  • Процесс подтверждения необходимо выполнить в течение 60 секунд (шаг 2–5), в противном случае подтверждение завершится ошибкой из-за истечения времени ожидания, а служба получит соответствующее уведомление.The handshake process must complete within 60 seconds (step 2 through 5), otherwise the handshake would fail with a timeout and the service will be notified accordingly.

  • Когда поток будет создан, конечная точка потоковой передачи будет действовать в качестве прокси-сервера и будет передавать трафик между службой и устройством через соответствующие WebSocket-подключения.After the stream creation flow above completes, the streaming endpoint will act as a proxy and will transfer traffic between the service and the device over their respective WebSockets.

  • Устройству, как и службе, требуется исходящее подключение к основной конечной точке Центра Интернета вещей, а также к конечной точке потоковой передачи через порт 443.Device and service both need outbound connectivity to IoT Hub's main endpoint as well as the streaming endpoint over port 443. URL-адреса этих конечных точек доступны на вкладке Обзор на портале Центра Интернета вещей.The URL of these endpoints is available on Overview tab on the IoT Hub's portal.

  • Гарантии надежности и упорядоченности установленного потока точно такие же, как и предоставляемые TCP.The reliability and ordering guarantees of an established stream is on par with TCP.

  • Все подключения к Центру Интернета вещей и конечной точке потоковой передачи используют TLS и шифруются.All connections to IoT Hub and streaming endpoint use TLS and are encrypted.

Завершение потокаTermination flow

Установленный поток завершается, когда любое из подключений по протоколу TCP к шлюзу отключается (службой или устройством).An established stream terminates when either of the TCP connections to the gateway are disconnected (by the service or device). Это может произойти добровольно, если закрыть подключение WebSocket в программе устройства или службы, или недобровольно в случае истечения времени ожидания или сбоя процесса.This can take place voluntarily by closing the WebSocket on either the device or service programs, or involuntarily in case of a network connectivity timeout or process failure. После закрытия подключения устройства или службы к конечной точке потоковой передачи другое подключение TCP также будет принудительно разорвано. И служба, и устройство отвечают за повторное создание потока, если это необходимо.Upon termination of either device or service's connection to the streaming endpoint, the other TCP connection will also be (forcefully) terminated and the service and device are responsible to re-create the stream, if needed.

Требования к подключениюConnectivity Requirements

Как сторона устройства, так и сторона службы потока устройства должны иметь возможность устанавливать TLS-подключения к Центру Интернета вещей и его конечной точке потоковой передачи.Both the device and the service sides of a device stream must be capable of establishing TLS-enabled connections to IoT Hub and its streaming endpoint. Для этого требуется исходящее подключение к этим конечным точкам через порт 443.This requires outbound connectivity over port 443 to these endpoints. Имя узла, связанное с этими конечными точками, можно найти на вкладке Обзор Центра Интернета вещей, как показано на рисунке ниже:The hostname associated with these endpoints can be found on the Overview tab of IoT Hub, as shown in the figure below:

«Конечные точки потока на устройство»

Кроме того, конечные точки можно получить сведения в частности, с помощью Azure CLI в разделе "Свойства" Центр property.hostname и property.deviceStreams ключи.Alternatively, the endpoints information can be retrieved using Azure CLI under the hub's properties section, specifically, property.hostname and property.deviceStreams keys.

az iot hub devicestream show --name <YourIoTHubName>

Результат представляет собой объект JSON всех конечных точек, к которым службе и устройству центра необходимо подключаться для установки потока устройства.The output is a JSON object of all endpoints that your hub's device and service may need to connect to in order to establish a device stream.

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

Примечание

Убедитесь, что вы установили Azure CLI 2.0.57 или новее.Ensure you have installed Azure CLI version 2.0.57 or newer. Можно загрузить последнюю версию из установить Azure CLI страницы.You can download the latest version from the Install Azure CLI page.

Разрешить исходящие подключения к устройству, конечные точки потоковой передачиAllow outbound connectivity to the device streaming endpoints

Как упоминалось в начале этой статьи, устройство создает исходящее подключение к конечной точке потоковой передачи, центр Интернета вещей во время процесса запуска потоков устройства.As mentioned at the beginning of this article, your device creates an outbound connection to IoT Hub streaming endpoint during device streams initiation process. Ваши брандмауэры устройства или сети должны разрешать исходящие подключения к шлюзу потоковой передачи через порт 443 (обратите внимание, что обмен данными осуществляется через подключение WebSocket, зашифрованное с помощью протокола TLS).Your firewalls on the device or its network must allow outbound connectivity to the streaming gateway over port 443 (note that communication takes place over a WebSocket connection that is encrypted using TLS).

Имя узла конечной точки потоковой передачи устройства можно найти на портале Центра Интернета вещей Azure на вкладке "Обзор". «Конечные точки потока на устройство»The hostname of device streaming endpoint can be found on the Azure IoT Hub portal under the Overview tab. "Device stream endpoints"

Кроме того, эти сведения можно найти с помощью Azure CLI:Alternatively, you can find this information using Azure CLI:

az iot hub devicestream show --name <YourIoTHubName>

Примечание

Убедитесь, что вы установили Azure CLI 2.0.57 или новее.Ensure you have installed Azure CLI version 2.0.57 or newer. Можно загрузить последнюю версию из установить Azure CLI страницы.You can download the latest version from the Install Azure CLI page.

Устранение неполадок с использованием журналов действий потоков устройствTroubleshoot via Device Streams Activity Logs

Журналы Azure Monitor можно настроить для сбора журнала активности потоков устройства в центре Интернета вещей.You can set up Azure Monitor logs to collect the activity log of device streams in your IoT Hub. Это может быть очень полезно в сценариях устранения неполадок.This can be very helpful in troubleshooting scenarios.

Выполните следующие действия, чтобы настроить журналы действий потока устройствами центра Интернета вещей Azure Monitor.Follow the steps below to configure Azure Monitor logs for your IoT Hub's device stream activities:

  1. Перейдите на вкладку Параметры диагностики в Центре Интернета вещей и щелкните ссылку Включить диагностику.Navigate to the Diagnostic settings tab in your IoT Hub, and click on Turn on diagnostics link.

    «Включение журналов диагностики»

  2. Укажите имя для параметров диагностики и выберите параметр Отправить в Log Analytics.Provide a name for your diagnostics settings, and choose Send to Log Analytics option. Вам будут направлены на выбор существующего ресурса рабочей области Log Analytics или создайте новую.You will be guided to choose an existing Log Analytics workspace resource or create a new one. Кроме того, установите флажок напротив DeviceStreams в списке.Additionally, check the DeviceStreams from the list.

    «Включить журналы потоков устройств»

  3. Теперь вы можете просматривать журналы потоков устройств на вкладке Журналы на портале Центра Интернета вещей.You can now access your device streams logs under the Logs tab in your IoT Hub's portal. Журналы действий потоков устройств будут отображаться в таблице AzureDiagnostics, и для них установлено значение Category=DeviceStreams.Device stream activity logs will appear in the AzureDiagnostics table and have Category=DeviceStreams.

    Как показано ниже, удостоверение на целевом устройстве и результат операции также доступно в журналах.As shown below, the identity of the target device and the result of the operation is also available in the logs.

    «Журналы доступа потоке устройства»

Доступность по регионамRegional Availability

Во время действия общедоступной предварительной версии потоки устройств Центра Интернета вещей доступны в регионах "Центральная часть США" и "Центральная часть США (EUAP)".During public preview, IoT Hub device streams are available in the Central US and Central US EUAP regions. Убедитесь, что центр создан в одном из этих регионов.Please make sure you create your hub in one of these regions.

Доступность пакета SDKSDK Availability

Обе стороны каждого потока (на стороне устройства и службы) создают туннель, используя пакет SDK для Центра Интернета вещей.Two sides of each stream (on the device and service side) use the IoT Hub SDK to establish the tunnel. На этапе общедоступной предварительной версии клиенты могут выбрать пакет SDK для следующих языков:During public preview, customers can choose from the following SDK languages:

  • пакеты SDK для C и C# поддерживают потоки устройств на стороне устройства;The C and C# SDK's support device streams on the device side.

  • пакеты SDK для NodeJS и C## поддерживают потоки устройств на стороне службы.The NodeJS and C# SDK support device streams on the service side.

Примеры поток устройств центра Интернета вещейIoT Hub device stream samples

Существует два примеров предлагаемые на этой странице центра Интернета вещей.There are two quickstart samples available on the IoT Hub page. Они демонстрируют использование потоков устройства приложениями.These demonstrate the use of device streams by applications.

  • Echo образце показано программное использование потоков устройства (путем прямого вызова API пакета SDK).The echo sample demonstrates programmatic use of device streams (by calling the SDK API's directly).

  • В примере с локальным прокси-сервером демонстрируется туннелирование трафика готовых клиентских и серверных приложений (например, SSH, RDP или веб) через потоки устройств.The local proxy sample demonstrates the tunneling of off-the-shelf client/server application traffic (such as SSH, RDP, or web) through device streams.

Эти примеры более подробно описаны ниже.These samples are covered in greater detail below.

Пример echoEcho Sample

В примере echo показано программное использование потоков устройства для отправки и получения байтов между службой и приложением устройства.The echo sample demonstrates programmatic use of device streams to send and receive bytes between service and device applications. Обратите внимание на то, что можно использовать программы, службы и устройства на разных языках.Note that you can use service and device programs in different languages. Например, можно использовать программу C устройств с C# служебной программы.For example, you can use the C device program with the C# service program.

Ниже приведены примеры echo.Here are the echo samples:

Образец локальный прокси-сервера (для SSH или удаленного рабочего СТОЛА)Local proxy sample (for SSH or RDP)

В примере с локальным прокси-сервером демонстрируется способ включить туннелирование существующего трафика приложения, к которому относится обмен данными между клиентом и программой сервера.The local proxy sample demonstrates a way to enable tunneling of an existing application's traffic that involves communication between a client and a server program. Эта настройка работает для протоколов клиента и сервера, таких как SSH и RDP, в которых сторона службы выступает в качестве клиента (выполняя программы клиента SSH или RDP), а сторона устройства — в качестве сервера (выполняя управляющую программу SSH или программы сервера RDP).This set up works for client/server protocols like SSH and RDP, where the service-side acts as a client (running SSH or RDP client programs), and the device-side acts as the server (running SSH daemon or RDP server programs).

В этом разделе описывается использование потоков устройства для реализации сценариев SSH-подключения к устройству (случай с RDP или другими протоколами клиента или сервера аналогичен использованию соответствующего порта протокола).This section describes the use of device streams to enable the user to SSH to a device over device streams (the case for RDP or other client/server application are similar by using the protocol's corresponding port).

В этой конфигурации используются две программы локального прокси-сервера (показаны на рисунке ниже), а именно: локальный прокси-сервер устройства и локальный прокси-сервер службы.The setup leverages two local proxy programs shown in the figure below, namely device-local proxy and service-local proxy. Программы локального прокси-сервера отвечают за выполнение подтверждения запуска потока устройства с помощью Центра Интернета вещей и взаимодействуют с клиентом и управляющей программой SSH, используя обычные сокеты клиента и сервера.The local proxy programs are responsible for performing the device stream initiation handshake with IoT Hub, and interacting with SSH client and SSH daemon using regular client/server sockets.

«Устройство настройки прокси-сервера поток для SSH/RDP»

  1. Пользователь выполняет локальный прокси-сервер службы для инициирования установки потока данных к устройству.The user runs service-local proxy to initiate a device stream to the device.

  2. Локальный прокси-сервер устройства принимает запрос на инициацию потоковой передачи, а к конечной точке потоковой передачи Центра Интернета вещей устанавливается туннель (как обсуждалось выше).The device-local proxy accepts the stream initiation request and the tunnel is established to IoT Hub's streaming endpoint (as discussed above).

  3. Локальный прокси-сервер устройства подключается к конечной точке управляющей программы SSH, ожидая передачи данных к устройству через порт 22.The device-local proxy connects to the SSH daemon endpoint listening on port 22 on the device.

  4. Локальный прокси-сервер службы ожидает передачи данных на указанный порт, в частности новых SSH-подключений от пользователя (в примере используется порт — 2222, но вы можете настроить любой доступный порт).The service-local proxy listens on a designated port awaiting new SSH connections from the user (port 2222 used in the sample, but this can be configured to any other available port). Пользователь указывает клиент SSH на порте локального прокси-сервера в localhost.The user points the SSH client to the service-local proxy port on localhost.

ПримечанияNotes

  • На описанных выше шагах создается сквозной туннель между клиентом SSH (справа) и управляющей программой SSH (слева).The above steps complete an end-to-end tunnel between the SSH client (on the right) to the SSH daemon (on the left). В рамках этого сквозного подключения выполняется отправка трафика в Центр Интернета вещей через поток устройства.Part of this end-to-end connectivity involves sending traffic over a device stream to IoT Hub.

  • Стрелки на рисунке указывают направление, в котором подключения устанавливаются между конечными точками.The arrows in the figure indicate the direction in which connections are established between endpoints. В частности, обратите внимание, что входящие подключения к устройству отсутствуют (часто блокируются брандмауэром).Specifically, note that there is no inbound connections going to the device (this is often blocked by a firewall).

  • Использование порта 2222 в локальном прокси-сервере — произвольный выбор.The choice of using port 2222 on the service-local proxy is an arbitrary choice. Прокси-сервер можно настроить для использования любого другого доступного порта.The proxy can be configured to use any other available port.

  • Выбор порта 22 в данном случае это зависит от протокола и относящиеся к SSH.The choice of port 22 is protocol-dependent and specific to SSH in this case. В случае с RDP необходимо использовать порт 3389.For the case of RDP, the port 3389 must be used. Это можно настроить в предоставленных примерах программ.This can be configured in the provided sample programs.

Воспользуйтесь ссылками ниже, чтобы узнать, как запустить программы локального прокси-сервера на выбранном языке.Use the links below for instructions on how to run the local proxy programs in your language of choice. Аналогично примеру echo можно запустить программы локальных прокси-серверов службы и устройства на разных языках, так как они полностью совместимы.Similar to the echo sample, you can run device- and service-local proxy programs in different languages as they are fully interoperable.

Следующие шагиNext steps

Используйте приведенные ниже ссылки для получения дополнительных сведений о потоках устройства.Use the links below to learn more about device streams.