Verwenden von Netzwerkdiensten
Wichtig
Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.
Azure Sphere kann als statische IP-Adresse, DHCP-Server (Dynamic Host Configuration Protocol) und SNTP-Server (Simple Network Time Protocol) für eine Netzwerkschnittstelle ausgeführt werden. Per DHCP-Server können Azure Sphere-Anwendungen Netzwerkparameter für ein externes Gerät im Netzwerk konfigurieren. Das externe Gerät kann den SNTP-Server zum Synchronisieren der Uhrzeit mit Azure Sphere verwenden.
Netzwerkkonfiguration
Sie können eine Ethernet- und eine WLAN-Netzwerkschnittstelle für die gleichzeitige Ausführung auf einem Azure Sphere-Gerät konfigurieren. Ethernet- und WLAN-Netzwerkschnittstellen können mit öffentlichen (internetverbindung) oder privaten Netzwerken verbunden werden. Mindestens eine Schnittstelle muss mit einem öffentlichen Netzwerk verbunden werden. Es kann jeweils nur eine Ethernet-Schnittstelle konfiguriert werden.
Private und öffentliche Netzwerkschnittstellen
Wenn Sie sowohl öffentliche als auch private Netzwerkschnittstellen nutzen, z. B. privates Ethernet mit öffentlichem WLAN, fungiert das Azure Sphere-Gerät nicht als Router. Es werden keine Pakete, die über das Ethernet-Netzwerk empfangen wurden, automatisch an das WLAN-Netzwerk übergeben (oder umgekehrt). Ihre Anwendung muss die gesamte Logik implementieren, die Informationen über beide Netzwerke sendet und empfängt.
Duale öffentliche Netzwerkschnittstellen
Wenn Sie zwei Netzwerkschnittstellen verwenden, für die die dynamische IP-Adressierung aktiviert ist, geht das Betriebssystem wie folgt vor: Es versucht, die erste Schnittstelle zu verwenden, für die die Netzwerkverbindung hergestellt wurde, wenn die DNS-Serveradressen für die Auflösung des Hostnamens ausgewählt werden. Wenn für eine Schnittstelle die Verbindung mit dem Netzwerk getrennt wird, werden automatisch die DNS-Serveradressen der anderen verbundenen Schnittstelle verwendet.
Statische IP-Adresse
Sie können eine statische IP-Adresse auf einer Ethernet- oder WLAN-Schnittstelle konfigurieren. Zur Einrichtung der Konfiguration einer statischen IP-Adresse muss für Ihre Anwendung die Applibs-Networking-API verwendet werden, und über das Anwendungsmanifest muss die Funktion NetworkConfig aktiviert werden.
Beim Konfigurieren einer statischen IP-Adresse muss auch benutzerdefiniertes DNS festgelegt werden, um sicherzustellen, dass das Azure Sphere-Betriebssystem weiterhin wie erwartet funktioniert.
Im Beispiel Private Network Services (Private Netzwerkdienste) wird veranschaulicht, wie Sie mit Azure Sphere eine Verbindung mit einem privaten Netzwerk herstellen und verschiedene Netzwerkdienste verwenden.
Dieser Codeausschnitt veranschaulicht, wie Eine Netzwerkschnittstelle mit einer statischen IP-Adresse konfiguriert wird.
Fügen Sie die folgende Zeile im Abschnitt "Funktionen" der datei app_manifest.json wie folgt ein:
"Capabilities": {
"NetworkConfig": true
}
Fügen Sie diese Headerdateien in Ihre Anwendung ein:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Legen Sie die IP-Adresse, subnetzmaske und das Gateway für die IP-Konfiguration fest.
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.
Geben Sie die zu konfigurierende Netzwerkschnittstelle an:
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Konvertieren Sie die Netzwerkadressen in ganze Zahlen, und wenden Sie diese auf die angegebene Netzwerkschnittstelle an.
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;
}
Statische DNS-Adresse
Wenn Sie ein Gerät mit einer statischen IP konfiguriert haben und eine Namensauflösung erfordern, muss Ihre Anwendung eine statische DNS-Adresse festlegen. Verwenden Sie Networking_IpConfig_EnableCustomDns, und legen Sie einen oder mehrere gültige DNS-Resolver fest. Wenn mehrere Resolver festgelegt sind, werden sie alle abgefragt, und die erste gültige DNS-Antwort erfüllt die Abfrage. Networking_IpConfig_EnableCustomDns können auch verwendet werden, um den aktuellen Resolver außer Kraft zu setzen, wenn eins über DHCP festgelegt wird.
Um eine Netzwerkschnittstelle mit benutzerdefinierten DNS-Servern zu konfigurieren, muss das Anwendungsmanifest die NetworkConfig-Funktion aktivieren.
Fügen Sie die folgende Zeile im Abschnitt "Funktionen" der datei app_manifest.json wie folgt ein:
"Capabilities": {
"NetworkConfig": true
}
Dieser Codeausschnitt veranschaulicht, wie eine Netzwerkschnittstelle mit benutzerdefinierten DNS-Servern konfiguriert wird.
Fügen Sie diese Headerdateien in Ihre Anwendung ein:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Geben Sie die Anzahl der DNS-Server an. Bis zu drei DNS-Server können angegeben werden. Der folgende Code richtet das Array von drei zu verwendenden DNS-Server-IP-Adressen ein.
// 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.
Geben Sie die zu konfigurierende Netzwerkschnittstelle an.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Konvertieren Sie die Netzwerkadressen in ganze Zahlen, und wenden Sie die Konfiguration an. Diese DNS-Konfiguration setzt alle DNS-Server außer Kraft, die von DHCP angegeben werden.
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-Server
Einem externen Clientgerät, das über eine Ethernet-Schnittstelle mit Azure Sphere verbunden ist, müssen eine IP-Adresse und andere Netzwerkparameter zugewiesen werden, damit es mit einer Serveranwendung auf dem Azure Sphere-Gerät kommunizieren kann. Einige externe Geräte unterstützen aber kein Verfahren zum Konfigurieren dieser Parameter. Azure Sphere unterstützt einen DHCP-Server, über den eine Anwendung diese Konfiguration bereitstellen kann. Für die Anwendung muss die Funktion DhcpService im zugehörigen Anwendungsmanifest aktiviert werden.
Die Azure Sphere-Anwendung ruft Networking_DhcpServerConfig_Init auf, um den Server so zu konfigurieren, dass eine IP-Adresse, Subnetzmaske, Gatewayadresse, Leasedauer und bis zu drei NTP-Serveradressen für ein Clientgerät angegeben werden. Im aktuellen Release kann nur eine IP-Adresse konfiguriert werden. Anschließend wird Networking_DhcpServer_Start aufgerufen, um den Server auf einer bestimmten Netzwerkschnittstelle zu starten. Nachdem der DHCP-Server gestartet wurde, kann das Clientgerät DHCP-Broadcastmeldungen senden, um IP-Adressen vom DHCP-Server im angegebenen Subnetz zu ermitteln und anzufordern.
SNTP-Server
Mit dem SNTP-Server können Clientgeräte ihre Systemzeit mit der Zeit des Azure Sphere-Geräts synchronisieren. Für die Nutzung des Servers muss die Azure Sphere-Anwendung die Funktion SntpService in ihrem Anwendungsmanifest aktivieren.
Zum Starten des Servers ruft die Azure Sphere-Anwendung Networking_SntpServer_Start auf und gibt die Netzwerkschnittstelle an, auf der der Server ausgeführt wird. Das Clientgerät und das Azure Sphere-Gerät müssen sich in demselben lokalen Subnetz des Netzwerks befinden, in dem der Server ausgeführt wird. Das Azure Sphere-Gerät muss mit mindestens einem öffentlichen Netzwerk verbunden sein, damit es die aktuelle Zeit von einem öffentlichen NTP-Server (Network Time Protocol) abrufen kann. Der SNTP-Server reagiert erst auf Abfragen, wenn er über die aktuelle Zeit verfügt.
Hinweis
Eine Anwendung kann die Systemzeit zwar direkt festlegen, aber dies wird nicht empfohlen, da die Zeit nicht beibehalten wird, wenn die Stromversorgung für das Gerät unterbrochen wird. Weitere Informationen finden Sie unter Verwalten von Systemzeit und Echtzeituhr für Azure Sphere.
Überwachungsports
Wenn die Azure Sphere-Anwendung auf eingehende TCP- oder UDP-Verbindungen wartet, muss das Anwendungsmanifest die Ports angeben, die die Anwendung verwendet. Zum Beispiel:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Beispiele
- Im Beispiel DNS Service Discovery (DNS-Dienstermittlung) wird veranschaulicht, wie Sie Abfragen durchführen und Antworten von einem DNS-Server verarbeiten.
- Im Beispiel Private Network Services (Private Netzwerkdienste) wird veranschaulicht, wie Sie mit Azure Sphere eine Verbindung mit einem privaten Netzwerk herstellen und verschiedene Netzwerkdienste verwenden.