Uso de servicios de red
Importante
Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).
Azure Sphere puede ejecutar una dirección IP estática, un servidor del Protocolo de configuración dinámica del host (DHCP) y un servidor de Protocolo simple de tiempo de redes (SNTP) para una interfaz de red. El servidor DHCP permite que las aplicaciones de Azure Sphere configuren parámetros de red para un dispositivo externo en la red. El dispositivo externo puede utilizar el servidor SNTP para sincronizar su hora con Azure Sphere.
Configuración de red
Puede configurar una interfaz de red Ethernet y otra Wi-Fi para que se ejecuten simultáneamente en un dispositivo de Azure Sphere. Las interfaces de red Ethernet y Wi-Fi se pueden conectar a redes públicas (conectadas a Internet) o privadas. Se debe conectar al menos una interfaz a una red pública. Solo se puede configurar una interfaz Ethernet a la vez.
Interfaces de red privada y pública
Si utiliza las interfaces de red pública y privada simultáneamente, como una red Ethernet privada con una conexión Wi-Fi pública, el dispositivo de Azure Sphere no actuará como un enrutador. No pasará automáticamente los paquetes recibidos en la red Ethernet a la red Wi-Fi, o viceversa. La aplicación debe implementar toda la lógica que envía y recibe información de ambas redes.
Interfaces de red públicas duales
Si usa dos interfaces de red que tienen direcciones IP dinámicas habilitadas, el sistema operativo intenta usar la primera interfaz conectada a la red cuando selecciona las direcciones del servidor DNS para la resolución de nombres de host. Si una interfaz se desconecta de la red, se usan automáticamente las direcciones del servidor DNS de la otra interfaz conectada.
Dirección IP estática
Puede configurar una dirección IP estática en una interfaz Ethernet o Wi-Fi. Para definir la configuración de una dirección IP estática, la aplicación debe usar la API de redes de las bibliotecas de aplicaciones y el manifiesto de aplicación debe habilitar la funcionalidad NetworkConfig.
Al configurar una dirección IP estática, también se debe establecer dns personalizado para asegurarse de que el sistema operativo De Azure Sphere sigue funcionando según lo previsto.
En el ejemplo Servicios en la red privada se muestra cómo conectar Azure Sphere a una red privada y usar varios servicios de red.
Este fragmento de código muestra cómo configurar una interfaz de red con una dirección IP estática.
Incluya la siguiente línea en la sección Funcionalidades del archivo app_manifest.json de la siguiente manera:
"Capabilities": {
"NetworkConfig": true
}
Incluya estos archivos de encabezado en la aplicación:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Establezca la dirección IP, la máscara de subred y la puerta de enlace para la configuración de 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.
Especifique la interfaz de red que se va a configurar:
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Convierta las direcciones de red en enteros y aplíquelas a la interfaz de red especificada.
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;
}
Dirección DNS estática
Si ha configurado un dispositivo con una dirección IP estática y requiere la resolución de nombres, la aplicación debe establecer una dirección DNS estática. Use Networking_IpConfig_EnableCustomDns y establezca uno o varios solucionadores DNS válidos. Si se establecen varios solucionadores, se consultarán todos y la primera respuesta DNS válida cumplirá la consulta. Networking_IpConfig_EnableCustomDns también se puede usar para invalidar la resolución actual si se establece una a través de DHCP.
Para configurar una interfaz de red con servidores DNS personalizados, el manifiesto de aplicación debe habilitar la funcionalidad NetworkConfig.
Incluya la siguiente línea en la sección Funcionalidades del archivo app_manifest.json de la siguiente manera:
"Capabilities": {
"NetworkConfig": true
}
Este fragmento de código muestra cómo configurar una interfaz de red con servidores DNS personalizados.
Incluya estos archivos de encabezado en la aplicación:
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <applibs/log.h>
#include <applibs/networking.h>
Especifique el número de servidores DNS. Se pueden especificar hasta tres servidores DNS. El código siguiente configura la matriz de tres direcciones IP del servidor DNS que se van a usar.
// 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.
Especifique la interfaz de red que se va a configurar.
static const char networkInterfaceToConfigure[] = "yourNetworkInterface"; // Your network interface.
Convierta las direcciones de red en enteros y aplique la configuración. Esta configuración dns invalida los servidores DNS especificados por 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;
}
Servidor DHCP
Si dispositivo cliente externo se conecta a Azure Sphere mediante una interfaz Ethernet, se le debe asignar una dirección IP y otros parámetros de red para que pueda comunicarse con una aplicación de servidor en el dispositivo de Azure Sphere. Sin embargo, algunos dispositivos externos no permiten configurar estos parámetros. Azure Sphere admite un servidor DHCP a través del cual una aplicación puede proporcionar esta configuración. La aplicación debe habilitar la funcionalidad DhcpService en su manifiesto de aplicación.
La aplicación de Azure Sphere llama a Networking_DhcpServerConfig_Init para configurar el servidor para proporcionar una dirección IP, una máscara de subred, una dirección de puerta de enlace, la duración de la concesión y hasta tres direcciones del servidor NTP para un dispositivo cliente. Solo se puede configurar una dirección IP en la versión actual. Después, llama a Networking_DhcpServer_Start para iniciar el servidor en una interfaz de red determinada. Cuando se inicia el servidor DHCP, el dispositivo cliente puede enviar mensajes de difusión DHCP para detectar y solicitar las direcciones IP del servidor DHCP en la subred especificada.
Servidor SNTP
El servidor SNTP permite a los dispositivos cliente sincronizar su hora del sistema con la hora de los dispositivos de Azure Sphere. Para usar el servidor, la aplicación de Azure Sphere debe habilitar la funcionalidad SntpService en su manifiesto de aplicación.
Para iniciar el servidor, la aplicación de Azure Sphere llama a Networking_SntpServer_Start y especifica la interfaz de red en la que se ejecutará el servidor. El dispositivo cliente y el dispositivo de Azure Sphere deben estar en la misma subred local de la red en la que se está ejecutando el servidor. El dispositivo de Azure Sphere debe estar conectado al menos a una red pública, para que pueda obtener la hora actual de un servidor público de Protocolo de tiempo de red (NTP). El servidor SNTP no responde a las consultas hasta que tenga la hora actual.
Nota:
Aunque una aplicación puede establecer la hora del sistema directamente, no es recomendable porque la hora no se conserva cuando se apaga el dispositivo. Administración de la hora del sistema y el reloj en tiempo real en Azure Sphere contiene más información.
Puertos de escucha
Si la aplicación de Azure Sphere escucha las conexiones TCP o UDP entrantes, el manifiesto de la aplicación debe especificar los puertos que usa la aplicación. Por ejemplo:
"Capabilities": {
"AllowedTcpServerPorts": [ 11000 ],
"AllowedUdpServerPorts": [ 1024, 50000 ]
}
Ejemplos
- En el ejemplo de Detección de servicios de DNS se muestra cómo consultar y procesar las respuestas de un servidor DNS.
- En el ejemplo Servicios en la red privada se muestra cómo conectar Azure Sphere a una red privada y usar varios servicios de red.