Поделиться через


Использование сетевых служб

Внимание

Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).

Azure Sphere может запускаться в качестве статического IP-адреса, сервера DHCP и сервера SNTP для сетевого интерфейса. Сервер DHCP позволяет приложениям Azure Sphere настраивать сетевые параметры для внешнего устройства в сети. Внешнее устройство может использовать сервер SNTP, чтобы синхронизировать время с Azure Sphere.

Сетевая конфигурация

Вы можете настроить одновременное выполнение сетевых интерфейсов Ethernet и Wi-Fi для на устройстве Azure Sphere. Сетевые интерфейсы Ethernet и Wi-Fi могут быть подключены к общедоступным (подключенным к Интернету) или частным сетям. По крайней мере один интерфейс должен быть подключен к общедоступной сети. Одновременно можно настроить только один интерфейс Ethernet.

Частные и общедоступные сетевые интерфейсы

При использовании общедоступных и частных сетевых интерфейсов, например частной сети Ethernet с общедоступной сетью Wi-Fi, устройство Azure Sphere не будет выступать в качестве маршрутизатора. Оно не будет автоматически передавать пакеты, полученные из сети Ethernet, в сеть Wi-Fi или наоборот. В приложении нужно полностью реализовать логику для отправки и получения данных по обеим сетям.

Двойные общедоступные сетевые интерфейсы

При использовании двух сетевых интерфейсов со включенным динамическим предоставлением IP-адресов операционная система пытается использовать первый подключенный к сети интерфейс при выборе адресов DNS-серверов для разрешения имен узлов. Если интерфейс отключается от сети, автоматически используются адреса DNS-серверов из другого подключенного интерфейса.

Статический IP-адрес

Статический IP-адрес можно настроить в интерфейсе Ethernet или Wi-Fi. Чтобы настроить конфигурацию статического IP-адреса, приложение должно использовать сетевой API Applibs, а в манифесте приложения нужно разрешить возможность NetworkConfig.

При настройке статического IP-адреса необходимо также задать пользовательский DNS, чтобы убедиться, что ОС Azure Sphere продолжает функционировать должным образом.

Пример частных сетевых служб показывает, как подключать Azure Sphere к частной сети и использовать несколько сетевых служб.

В этом фрагменте кода показано, как настроить сетевой интерфейс со статическим IP-адресом.

Включите следующую строку в раздел "Возможности" файла app_manifest.json следующим образом:

"Capabilities": {
  "NetworkConfig": true
}

Включите эти файлы заголовков в приложение:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Задайте IP-адрес, маску подсети и шлюз для конфигурации IP- адресов.

static const char staticIpInDotNotation[] = "yourStaticIp"; // Your static IP in x.x.x.x notation.
static const char subnetMaskInDotNotation[] =
    "yourSubnetMask"; // Your subnet mask in x.x.x.x notation.
static const char gatewayIpInDotNotation[] = "yourGatewayIp"; // Your gateway IP in x.x.x.x notation.

Укажите сетевой интерфейс для настройки:

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Преобразуйте сетевые адреса в целые числа и примените его к указанному сетевому интерфейсу.

struct in_addr staticIpAddress;
struct in_addr subnetMask;
struct in_addr gatewayIpAddress;

Networking_IpConfig ipConfig;

// Convert the addresses from the numbers-and-dots notation into integers.
if (inet_pton(AF_INET, staticIpInDotNotation, &staticIpAddress) != 1) {
    Log_Debug("ERROR: Invalid static IP address or address family specified.\n");
    return -1;
}
if (inet_pton(AF_INET, subnetMaskInDotNotation, &subnetMask) != 1) {
    Log_Debug("ERROR: Invalid subnet mask or address family specified.\n");
    return -1;
}
if (inet_pton(AF_INET, gatewayIpInDotNotation, &gatewayIpAddress) != 1) {
    Log_Debug("ERROR: Invalid gateway IP address or address family specified.\n");
    return -1;
}

Networking_IpConfig_Init(&ipConfig);
Networking_IpConfig_EnableStaticIp(&ipConfig, staticIpAddress, subnetMask, gatewayIpAddress);

int result =
    Networking_IpConfig_EnableCustomDns(&ipConfig, dnsServers, numOfDnsServerAddressSpecified);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_EnableCustomDns: %d (%s)\n", errno, strerror(errno));
    Networking_IpConfig_Destroy(&ipConfig);
    return -1;
}

int result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
    return -1;
}

Статический DNS-адрес

Если вы настроили устройство со статическим IP-адресом и требует разрешения имен, приложение должно задать статический DNS-адрес. Используйте Networking_IpConfig_EnableCustomDns и задайте один или несколько допустимых сопоставителей DNS. Если задано несколько сопоставителей, они будут запрашиваться, и первый допустимый ОТВЕТ DNS будет удовлетворять запросу. Networking_IpConfig_EnableCustomDns также можно использовать для переопределения текущего сопоставителя, если он задан через DHCP.

Чтобы настроить сетевой интерфейс с пользовательскими DNS-серверами, манифест приложения должен включить функцию NetworkConfig.

Включите следующую строку в раздел "Возможности" файла app_manifest.json следующим образом:

"Capabilities": {
  "NetworkConfig": true
}

В этом фрагменте кода показано, как настроить сетевой интерфейс с пользовательскими DNS-серверами.

Включите эти файлы заголовков в приложение:

#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>

Укажите количество DNS-серверов. Можно указать до трех DNS-серверов. Следующий код настраивает массив из трех IP-адресов DNS-сервера для использования.

// A maximum of 3 DNS server addresses can be specified.
static const size_t numOfDnsServerAddressSpecified = 3;
static const char *dnsServerIpAddress[] = {
    "yourDnsServer1", "yourDnsServer2", "yourDnsServer3"}; // Your DNS servers in x.x.x.x notation.

Укажите сетевой интерфейс для настройки.

static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.

Преобразуйте сетевые адреса в целые числа и примените конфигурацию. Эта конфигурация DNS переопределяет все DNS-серверы, указанные DHCP.

Networking_IpConfig ipConfig;

// Convert the addresses from the numbers-and-dots notation into integers.
struct in_addr dnsServers[numOfDnsServerAddressSpecified];
for (int i = 0; i < numOfDnsServerAddressSpecified; i++) {
    if (inet_pton(AF_INET, dnsServerIpAddress[i], &dnsServers[i]) != 1) {
        Log_Debug("ERROR: Invalid DNS server address or address family specified.\n");
        return -1;
    }
}

Networking_IpConfig_Init(&ipConfig);

int result =
    Networking_IpConfig_EnableCustomDns(&ipConfig, dnsServers, numOfDnsServerAddressSpecified);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_EnableCustomDns: %d (%s)\n", errno, strerror(errno));
    Networking_IpConfig_Destroy(&ipConfig);
    return -1;
}

result = Networking_IpConfig_Apply(networkInterfaceToConfigure, &ipConfig);
Networking_IpConfig_Destroy(&ipConfig);

if (result != 0) {
    Log_Debug("ERROR: Networking_IpConfig_Apply: %d (%s)\n", errno, strerror(errno));
    return -1;
}

DHCP-сервер

Внешнее клиентское устройство, которое подключено к Azure Sphere через интерфейс Ethernet, должно получить IP-адрес и другие параметры сети, чтобы обмениваться данными с серверным приложением на устройстве Azure Sphere. Но некоторые внешние устройства не поддерживают настройку этих параметров. Azure Sphere предоставляет сервер DHCP, с помощью которого приложение может предоставлять сведения о конфигурации. Для приложения необходимо включить возможность DhcpService в соответствующем манифесте приложения.

Приложение Azure Sphere вызывает функцию Networking_DhcpServerConfig_Init, чтобы настроить на сервере предоставление клиентскому устройству IP-адреса, маски подсети, адреса шлюза, срока действия аренды адреса и не более трех адресов NTP-серверов. В текущем выпуске можно настроить только один IP-адрес. Затем вызывается Networking_DhcpServer_Start, чтобы запустить сервер на конкретном сетевом интерфейсе. После запуска DHCP-сервера клиентское устройство получает возможность отправлять широковещательные сообщения DHCP для поиска и запроса IP-адресов через сервер DHCP в указанной подсети.

Сервер SNTP

Сервер SNTP позволяет клиентским устройствам синхронизировать системное время с устройством Azure Sphere. Чтобы использовать этот сервер, для приложения Azure Sphere необходимо включить возможность SntpService в соответствующем манифесте приложения.

Чтобы запустить сервер, приложение Azure Sphere вызывает функцию Networking_SntpServer_Start и указывает сетевой интерфейс, на котором будет выполняться этот сервер. Клиентское устройство и устройство Azure Sphere должны находиться в той же локальной подсети той же сети, где выполняется сервер. Устройство Azure Sphere должно быть подключено по крайней мере к одной общедоступной сети, чтобы получать текущее время с сервера времени NTP в общедоступной сети. Сервер SNTP не будет отвечать на запросы, пока не получит текущее время.

Примечание.

Приложение может задать системное время напрямую, но мы не рекомендуем так делать, так как время не сохраняется при отключении питания устройства. Дополнительные сведения см. в статье Управление системным временем и часами реального времени в Azure Sphere.

Ожидание передачи данных через порты

Если приложение Azure Sphere ожидает передачи данных входящих подключений по TCP или UDP, в манифесте приложения нужно указать порты, используемые приложением. Например:

"Capabilities": {
  "AllowedTcpServerPorts": [ 11000 ],
  "AllowedUdpServerPorts": [ 1024, 50000 ]
} 

Примеры

  • Пример обнаружения службы DNS показывает, как выполнять запросы и обрабатывать ответы от DNS-сервера.
  • Пример частных сетевых служб показывает, как подключать Azure Sphere к частной сети и использовать несколько сетевых служб.