다음을 통해 공유


네트워크 서비스 사용

Important

Azure Sphere(레거시) 설명서입니다. Azure Sphere(레거시)는 2027년 9월 27일에 사용 중지되며 사용자는 이 시간까지 Azure Sphere(통합)로 마이그레이션해야 합니다. TOC 위에 있는 버전 선택기를 사용하여 Azure Sphere(통합) 설명서를 볼 수 있습니다.

Azure Sphere는 네트워크 인터페이스에 대한 고정 IP 주소, DHCP(동적 호스트 구성 프로토콜) 서버간단한 SNTP(네트워크 시간 프로토콜) 서버를 실행할 수 있습니다. DHCP 서버를 사용하면 Azure Sphere 애플리케이션이 네트워크의 외부 디바이스에 대한 네트워크 매개 변수를 구성할 수 있습니다. 외부 디바이스는 SNTP 서버를 사용하여 Azure Sphere와 시간을 동기화할 수 있습니다.

네트워크 구성

Azure Sphere 디바이스에서 동시에 실행되도록 이더넷 및 Wi-Fi 네트워크 인터페이스를 구성할 수 있습니다. 이더넷 및 Wi-Fi 네트워크 인터페이스는 공용(인터넷에 연결됨) 또는 프라이빗 네트워크에 연결할 수 있습니다. 하나 이상의 인터페이스를 공용 네트워크에 연결해야 합니다. 한 번에 하나의 이더넷 인터페이스만 구성할 수 있습니다.

프라이빗 및 공용 네트워크 인터페이스

공용 Wi-Fi가 있는 프라이빗 이더넷과 같은 공용 및 프라이빗 네트워크 인터페이스를 모두 사용하는 경우 Azure Sphere 디바이스는 라우터 역할을 하지 않습니다. 이더넷 네트워크에서 받은 패킷을 Wi-Fi 네트워크에 자동으로 전달하거나 그 반대로 전달하지 않습니다. 애플리케이션은 두 네트워크에서 정보를 보내고 받는 모든 논리를 구현해야 합니다.

이중 공용 네트워크 인터페이스

동적 IP 주소 지정을 사용하도록 설정된 두 개의 네트워크 인터페이스를 사용하는 경우 OS는 호스트 이름 확인을 위해 DNS 서버 주소를 선택할 때 네트워크에 연결된 첫 번째 인터페이스를 사용하려고 합니다. 인터페이스가 네트워크에서 연결을 끊으면 연결된 다른 인터페이스의 DNS 서버 주소가 자동으로 사용됩니다.

고정 IP 주소

이더넷 또는 Wi-Fi 인터페이스에서 고정 IP 주소를 구성할 수 있습니다. 고정 IP 주소 구성을 설정하려면 애플리케이션에서 applibs 네트워킹 API를 사용해야 하며 애플리케이션 매니페스트NetworkConfig 기능을 사용하도록 설정해야 합니다.

고정 IP 주소를 구성할 때 Azure Sphere OS가 예상대로 계속 작동하도록 사용자 지정 DNS 도 설정해야 합니다.

Private Network Services 샘플은 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 서버 수를 지정합니다. 최대 3개의 DNS 서버를 지정할 수 있습니다. 다음 코드는 사용할 세 개의 DNS 서버 IP 주소 배열을 설정합니다.

// 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 구성은 DHCP에서 지정한 모든 DNS 서버를 재정의합니다.

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에 연결된 외부 클라이언트 디바이스는 Azure Sphere 디바이스의 서버 애플리케이션과 통신할 수 있도록 IP 주소 및 기타 네트워크 매개 변수를 할당해야 합니다. 그러나 일부 외부 디바이스는 이러한 매개 변수를 구성하는 방법을 지원하지 않습니다. Azure Sphere는 애플리케이션이 이 구성을 제공할 수 있는 DHCP 서버를 지원합니다. 애플리케이션의 애플리케이션 매니페스트에서 DhcpService 기능을 사용하도록 설정해야 합니다.

Azure Sphere 애플리케이션은 Networking_DhcpServerConfig_Init 호출하여 클라이언트 디바이스에 IP 주소, 서브넷 마스크, 게이트웨이 주소, 임대 기간 및 최대 3개의 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 의 RTC에 자세한 정보가 있습니다.

수신 대기 포트

Azure Sphere 애플리케이션이 들어오는 TCP 또는 UDP 연결을 수신 대기하는 경우 애플리케이션 매니페스트 는 애플리케이션에서 사용하는 포트를 지정해야 합니다. 예시:

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

샘플

  • DNS 서비스 검색 샘플은 DNS 서버에서 응답을 쿼리하고 처리하는 방법을 보여 줍니다.
  • Private Network Services 샘플은 Azure Sphere를 프라이빗 네트워크에 연결하고 여러 네트워크 서비스를 사용하는 방법을 보여 줍니다.