Korzystanie z usług sieciowych
Ważne
Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).
Usługa Azure Sphere może uruchamiać statyczny adres IP, serwer DHCP (Dynamic Host Configuration Protocol) oraz prosty serwer protokołu SNTP (Network Time Protocol) dla interfejsu sieciowego. Serwer DHCP umożliwia aplikacjom usługi Azure Sphere konfigurowanie parametrów sieciowych dla urządzenia zewnętrznego w sieci. Urządzenie zewnętrzne może używać serwera SNTP do synchronizowania czasu z usługą Azure Sphere.
Konfiguracja sieci
Możesz skonfigurować sieć Ethernet i interfejs sieciowy sieci Wi-Fi do jednoczesnego uruchamiania na urządzeniu usługi Azure Sphere. Interfejsy sieciowe Ethernet i Wi-Fi mogą być połączone z publicznymi (połączonymi z Internetem) lub sieciami prywatnymi. Co najmniej jeden interfejs musi być połączony z siecią publiczną. Jednocześnie można skonfigurować tylko jeden interfejs Ethernet.
Prywatne i publiczne interfejsy sieciowe
Jeśli używasz zarówno publicznych, jak i prywatnych interfejsów sieciowych, takich jak prywatna sieć Ethernet z publicznymi sieciami Wi-Fi, urządzenie usługi Azure Sphere nie będzie działać jako router. Nie będzie automatycznie przekazywać pakietów odebranych w sieci Ethernet do sieci Wi-Fi ani na odwrót. Aplikacja musi zaimplementować całą logikę, która wysyła i odbiera informacje w obu sieciach.
Podwójne publiczne interfejsy sieciowe
Jeśli używasz dwóch interfejsów sieciowych, które mają włączone dynamiczne adresowanie IP, system operacyjny próbuje użyć pierwszego interfejsu połączonego z siecią po wybraniu adresów serwerów DNS na potrzeby rozpoznawania nazw hostów. Jeśli interfejs rozłącza się z siecią, adresy serwera DNS z innego połączonego interfejsu są automatycznie używane.
Statyczny adres IP
Statyczny adres IP można skonfigurować w interfejsie Ethernet lub Wi-Fi. Aby skonfigurować konfigurację statycznego adresu IP, aplikacja musi używać interfejsu API sieci biblioteki applibs, a manifest aplikacji musi włączyć funkcję NetworkConfig.
Podczas konfigurowania statycznego adresu IP należy również ustawić niestandardowy system DNS, aby zapewnić, że system operacyjny usługi Azure Sphere będzie nadal działać zgodnie z oczekiwaniami.
Przykładowe usługi sieci prywatnej pokazują, jak połączyć usługę Azure Sphere z siecią prywatną i korzystać z kilku usług sieciowych.
Ten fragment kodu przedstawia sposób konfigurowania interfejsu sieciowego przy użyciu statycznego adresu IP.
W sekcji Możliwości pliku app_manifest.json dołącz następujący wiersz:
"Capabilities": {
"NetworkConfig": true
}
Uwzględnij te pliki nagłówkowe w aplikacji:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Ustaw adres IP, maskę podsieci i bramę dla konfiguracji adresu 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.
Określ interfejs sieciowy do skonfigurowania:
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Przekonwertuj adresy sieciowe na liczby całkowite i zastosuj je do określonego interfejsu sieciowego.
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;
}
Statyczny adres DNS
Jeśli skonfigurowano urządzenie ze statycznym adresem IP i wymagaj rozpoznawania nazw, aplikacja musi ustawić statyczny adres DNS. Użyj Networking_IpConfig_EnableCustomDns i ustaw co najmniej jeden prawidłowy program rozpoznawania nazw DNS. Jeśli ustawiono wiele funkcji rozpoznawania nazw, zostaną one odpytywane, a pierwsza prawidłowa odpowiedź DNS spełni zapytanie. Networking_IpConfig_EnableCustomDns można również użyć do zastąpienia bieżącego rozpoznawania nazw, jeśli jest ustawiony za pośrednictwem protokołu DHCP.
Aby skonfigurować interfejs sieciowy z niestandardowymi serwerami DNS, manifest aplikacji musi włączyć funkcję NetworkConfig.
W sekcji Możliwości pliku app_manifest.json dołącz następujący wiersz:
"Capabilities": {
"NetworkConfig": true
}
Ten fragment kodu pokazuje, jak skonfigurować interfejs sieciowy z niestandardowymi serwerami DNS.
Uwzględnij te pliki nagłówkowe w aplikacji:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Określ liczbę serwerów DNS. Można określić maksymalnie trzy serwery DNS. Poniższy kod konfiguruje tablicę trzech adresów IP serwera DNS do użycia.
// 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.
Określ interfejs sieciowy do skonfigurowania.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Przekonwertuj adresy sieciowe na liczby całkowite i zastosuj konfigurację. Ta konfiguracja DNS zastępuje wszystkie serwery DNS określone przez protokół 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;
}
Serwer DHCP
Zewnętrzne urządzenie klienckie połączone z usługą Azure Sphere za pośrednictwem interfejsu Ethernet musi mieć przypisany adres IP i inne parametry sieciowe, aby umożliwić komunikację z aplikacją serwera na urządzeniu usługi Azure Sphere. Jednak niektóre urządzenia zewnętrzne nie obsługują sposobu konfigurowania tych parametrów. Usługa Azure Sphere obsługuje serwer DHCP, za pomocą którego aplikacja może zapewnić tę konfigurację. Aplikacja musi włączyć funkcję DhcpService w manifeście aplikacji.
Aplikacja usługi Azure Sphere wywołuje Networking_DhcpServerConfig_Init , aby skonfigurować serwer w celu zapewnienia adresu IP, maski podsieci, adresu bramy, czasu trwania dzierżawy i maksymalnie trzech adresów serwera NTP na urządzeniu klienckim. W bieżącej wersji można skonfigurować tylko jeden adres IP. Następnie wywołuje Networking_DhcpServer_Start , aby uruchomić serwer w określonym interfejsie sieciowym. Po uruchomieniu serwera DHCP urządzenie klienckie może wysyłać rozgłaszane komunikaty DHCP w celu odnajdywania i żądania adresów IP z serwera DHCP w określonej podsieci.
Serwer SNTP
Serwer SNTP umożliwia urządzeniom klienckim synchronizowanie czasu systemowego z urządzeniem usługi Azure Sphere. Aby korzystać z serwera, aplikacja usługi Azure Sphere musi włączyć funkcję SntpService w manifeście aplikacji.
Aby uruchomić serwer, aplikacja usługi Azure Sphere wywołuje Networking_SntpServer_Start i określa interfejs sieciowy, na którym zostanie uruchomiony serwer. Urządzenie klienckie i urządzenie usługi Azure Sphere muszą znajdować się w tej samej podsieci lokalnej sieci, na której działa serwer. Urządzenie usługi Azure Sphere musi być połączone z co najmniej jedną siecią publiczną, aby można było uzyskać bieżący czas z serwera protokołu NTP (Public Network Time Protocol). Serwer SNTP nie odpowiada na zapytania, dopóki nie ma bieżącej godziny.
Uwaga
Mimo że aplikacja może ustawić czas systemowy bezpośrednio, nie jest to zalecane, ponieważ czas nie utrzymuje się, gdy urządzenie traci moc. Aby uzyskać więcej informacji, zobacz Zarządzanie czasem systemowym i protokołem RTC w usłudze Azure Sphere .
Porty nasłuchiwania
Jeśli aplikacja usługi Azure Sphere nasłuchuje przychodzących połączeń TCP lub UDP, manifest aplikacji musi określić porty używane przez aplikację. Na przykład:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Przykłady
- Przykład odnajdywania usługi DNS przedstawia sposób wykonywania zapytań i przetwarzania odpowiedzi z serwera DNS.
- Przykładowe usługi sieci prywatnej pokazują, jak połączyć usługę Azure Sphere z siecią prywatną i korzystać z kilku usług sieciowych.