맨위로가기

사전 부팅 실행 환경

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

사전 부팅 실행 환경(PXE)은 네트워크를 통해 컴퓨터를 부팅하는 데 사용되는 기술이다. 인텔이 Wired for Management 프레임워크의 일부로 개발했으며, DHCP 및 TFTP와 같은 프로토콜을 사용한다. PXE 환경은 PXE를 지원하는 네트워크 카드나 UEFI 펌웨어를 갖춘 클라이언트, IP 주소 및 부트 파일 정보를 제공하는 DHCP 서버, 부트 파일을 제공하는 TFTP 서버로 구성된다. PXE는 CD, DVD, USB 드라이브보다 운영 체제를 설치하는 더 빠른 방법이며, 여러 운영 체제 및 배포 도구에서 지원된다. 애플의 BSDP, 마이크로소프트의 BINL과 같은 관련 기술도 존재하며, 여러 IETF 표준 문서에서 PXE 관련 기술을 다루고 있다.

더 읽어볼만한 페이지

  • 네트워크 표준 - RS-232
    RS-232는 데이터 단말 장치와 데이터 회선 종단 장치 간 직렬 통신을 위한 표준 인터페이스로, 터미널-모뎀 연결을 위해 개발되었으나 현재는 일부 산업 장비 및 시스템 콘솔 포트 등에 사용되며 전기적 신호 특성, 인터페이스 기계적 특성, 회로 기능 등을 정의하고 25핀 또는 9핀 D-서브미니어처 커넥터를 사용한다.
  • 네트워크 표준 - WirelessHD
    WirelessHD는 60 GHz 대역을 사용하는 무선 통신 규격으로, 고화질 비디오, 오디오, 데이터를 압축 없이 전송하며, 빔 형성을 통해 가시선 제약을 완화하고 최대 10미터 거리에서 작동하도록 설계되었다.
  • 부팅 - 마스터 부트 레코드
    마스터 부트 레코드(MBR)는 저장 장치의 파티션 정보를 담은 512바이트 영역으로, 파티션 테이블, 부트스트랩 코드 등으로 구성되어 BIOS 펌웨어가 실행하여 운영체제 부팅을 시작하지만, 2TiB의 디스크 크기 제한으로 GPT 파티션 테이블로 대체되고 있다.
  • 부팅 - 부팅 디스크
    부팅 디스크는 운영 체제 설치, 데이터 복구 등을 위해 사용되는 보조 기억 장치이며, BIOS 설정에 따라 플로피 디스크, CD-ROM, USB 메모리 등 다양한 매체로 부팅하며, 운영 체제에 따라 필요한 파일이 다르다.
  • 바이오스 - 아메리칸 메가트렌즈
    아메리칸 메가트렌즈(AMI)는 1985년에 설립된 회사로, BIOS 펌웨어, 서버용 마더보드, 스토리지 컨트롤러 등을 공급하며, 현재는 AMIBIOS, Aptio, AMIDiag 등 다양한 제품을 제공한다.
  • 바이오스 - 부트 섹터
    부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다.
사전 부팅 실행 환경
일반 정보
유형네트워크 프로토콜
상세 정보
개발인텔
최초 릴리스1999년 9월 20일
최신 버전2.1 (2011년 8월 23일)
상태비활성
유형네트워크 프로토콜
표준UEFI
라이선스BSD 라이선스
기술 정보
운영 체제독립적

2. 역사

컴퓨터 네트워크가 발전하면서, 부팅 시 서버로부터 소프트웨어 이미지를 받아 실행하는 클라이언트 시스템에 대한 필요성이 꾸준히 제기되었다. 이를 위해서는 업계 표준 네트워크 프로토콜 기반의 사전 부팅 서비스와 하드웨어에 독립적인 클라이언트 펌웨어 환경이 중요했다. 표준화된 환경은 시스템 간 상호 운용성을 보장하는 핵심 요소였다.

초기에는 TFTP (RFC 783, RFC 906)나 BOOTP (RFC 951) 같은 프로토콜을 이용한 시도가 있었다. BOOTP는 클라이언트가 자신의 IP 주소나 부팅 파일 정보를 얻는 데 사용되었으나, 구현의 어려움 등으로 인해 1997년 DHCP (RFC 2131)로 발전했다. 하지만 이러한 초기 방식들은 클라이언트 측의 표준화된 환경을 제공하지 못하는 한계가 있었다.

이러한 배경 속에서 인텔은 Wired for Management[2] 프레임워크의 일환으로 PXE(Preboot Execution Environment)를 개발하여 1998년 말 버전 2.0을 발표했고, 1999년 9월에는 2.1 버전을 공개했다.[3] PXE는 DHCP와 TFTP 등 기존 표준 프로토콜을 활용하면서도, 클라이언트 측 펌웨어(NIC BIOS 확장 또는 UEFI 코드)에 표준화된 인터페이스(UNDI, UDP/IP 스택, DHCP 클라이언트, TFTP 클라이언트 등)를 정의하여 네트워크 부트스트랩 프로그램(NBP)이 일관된 방식으로 서버와 통신할 수 있도록 했다. 이는 PXE의 중요한 혁신이었다. 초기 TFTP의 낮은 처리량 문제는 이후 RFC 2348(블록 크기 옵션)과 RFC 7440(창 크기 옵션) 등을 통해 개선되었다.

PXE는 다양한 시스템 아키텍처를 지원하도록 발전했으며, 특히 UEFI 환경에 통합되면서 널리 사용되게 되었다. 클라이언트 아키텍처 식별 방식이나 IPv6 지원(RFC 5970) 등 기술적인 발전도 이루어졌다. 초기에는 별도의 옵션 롬 형태로 제공되던 PXE 클라이언트 코드는 점차 NIC 펌웨어나 메인보드 UEFI에 내장되는 형태로 변화했다. 인텔의 표준 구현 외에도 gPXE/iPXE와 같은 오픈 소스 프로젝트들도 등장했다.[6]

2. 1. 초기 역사

컴퓨터 네트워크가 등장한 초기부터, 네트워크를 통해 서버에서 필요한 소프트웨어 이미지를 받아 부팅할 수 있는 클라이언트 시스템에 대한 요구가 꾸준히 있었다. 이를 위해서는 클라이언트가 업계 표준 네트워크 프로토콜 기반의 사전 부팅 서비스를 이용해야 했다. 또한, 처음 다운로드되어 실행되는 네트워크 부트스트랩 프로그램(NBP)은 주변 네트워크 부팅 환경과 상호 작용할 수 있도록 하드웨어에 독립적인 표준화된 방식을 제공하는 클라이언트 펌웨어 계층을 사용해야 했다. 이러한 표준의 존재와 준수는 네트워크 부팅 과정에서 시스템 간 상호 운용성을 보장하는 핵심 요소이다.

이러한 목표를 위한 초기 시도 중 하나는 1984년에 발표된 RFC 906, 'TFTP를 사용한 부트스트랩 로딩'이었다. 이 표준은 1981년에 발표된 Trivial File Transfer Protocol(TFTP) 표준인 RFC 783을 부트스트랩 로딩에 사용할 파일 전송 프로토콜로 지정했다. 이후 1985년에는 Bootstrap Protocol(BOOTP) 표준인 RFC 951이 발표되었다. BOOTP를 통해 디스크 없는 클라이언트 기기는 부팅 시 자신의 IP 주소, TFTP 서버의 주소, 그리고 메모리에 로드하여 실행할 네트워크 부트스트랩 프로그램(NBP)의 이름을 서버로부터 받아올 수 있게 되었다. 하지만 BOOTP는 구현상의 어려움 등 여러 한계점을 가지고 있었고, 이는 결국 1997년 Dynamic Host Configuration Protocol(DHCP) 표준인 RFC 2131의 개발로 이어졌다. 당시의 선구적인 TFTP/BOOTP/DHCP 방식은 중요했지만, 클라이언트 측에서 필요한 표준화된 환경을 정의하지 못했다는 한계가 있었다.

2. 2. PXE의 등장

컴퓨터 네트워크 초창기부터, 서버에서 소프트웨어 이미지를 받아 부팅할 수 있는 클라이언트 시스템에 대한 지속적인 요구가 있었다. 이를 위해서는 클라이언트가 업계 표준 네트워크 프로토콜을 기반으로 하는 사전 부팅 서비스를 사용해야 했고, 네트워크 부트스트랩 프로그램(NBP)이 하드웨어 독립적인 방식으로 주변 네트워크 부팅 환경과 상호 작용할 수 있도록 클라이언트 펌웨어 계층의 표준화가 중요했다.

초기 시도로는 1981년 발표된 TFTP (RFC 783)를 부트스트랩 로딩에 사용하자는 제안(RFC 906, 1984년)이 있었다. 이후 1985년에는 BOOTP (RFC 951) 표준이 발표되어, 디스크리스 클라이언트 머신이 자신의 IP 주소, TFTP 서버 주소, 그리고 실행할 NBP의 이름을 검색할 수 있게 되었다. 그러나 BOOTP 구현의 어려움 등 여러 요인으로 인해 결국 1997년에 DHCP (RFC 2131) 표준이 개발되었다. 하지만 이 방식들은 프로비저닝 환경에서 필수적인 표준화된 클라이언트 측을 정의하지 못하는 한계가 있었다.

이러한 배경에서 인텔은 Wired for Management[2] 프레임워크의 일부로 PXE(Preboot Execution Environment)를 도입했다. 인텔과 SystemSoft는 PXE 사양을 발표했으며, 버전 2.0은 1998년 12월에, 업데이트된 2.1 버전은 1999년 9월에 공개되었다.[3] PXE 환경은 DHCP 및 TFTP(1992년 발표된 RFC 1350에서 정의됨)를 포함한 여러 표준 클라이언트-서버 프로토콜을 사용한다. PXE 체계의 핵심은 프로비저닝 과정의 클라이언트 측 구현이 표준의 필수적인 부분이라는 점이며, 이는 NIC의 BIOS 확장이나 현재는 UEFI 코드의 일부로 구현된다. 이 펌웨어 계층은 클라이언트에서 기본 범용 네트워크 장치 인터페이스(UNDI), 최소한의 UDP/IP 스택, 프리부트 DHCP 클라이언트 모듈 및 TFTP 클라이언트 모듈의 기능을 사용할 수 있게 하며, 이들은 함께 PXE 응용 프로그래밍 인터페이스를 형성하여 NBP가 PXE 환경의 서버 측 서비스와 상호 작용할 때 사용된다. TFTP는 처리량이 낮다는 단점이 있었는데, 특히 지연 시간이 긴 링크에서 문제가 되었다. 이를 완화하기 위해 1998년 5월 TFTP 블록 크기 옵션(RFC 2348)이 발표되었고, 이후 2015년 1월에는 TFTP 창 크기 옵션(RFC 7440)이 발표되어 처리량을 개선했다.

PXE 환경은 UDP/IP, DHCP, TFTP와 같은 업계 표준 인터넷 프로토콜 조합에 의존한다. 이 프로토콜들은 클라이언트의 NIC 펌웨어에서 쉽게 구현할 수 있도록 선택되었으며, 결과적으로 표준화되고 작은 메모리 공간을 차지하는 PXE ROM이 만들어졌다. 표준화, 작은 크기, 낮은 자원 사용량은 PXE의 주요 설계 목표였으며, 이를 통해 강력한 클라이언트 컴퓨터부터 자원이 제한적인 SBCSoC 컴퓨터에 이르기까지 다양한 시스템에서 PXE 표준의 클라이언트 측을 동일하게 구현할 수 있게 되었다.

PXE 부트스트랩 세션을 시작하기 위해, 클라이언트 PXE 펌웨어의 DHCP 구성 요소는 PXE 관련 옵션이 포함된 DHCPDISCOVER 패킷을 포트 67/UDP(DHCP 서버 포트)로 브로드캐스트하여 필요한 네트워크 구성 및 부팅 매개변수를 요청한다. PXE 관련 옵션은 이 DHCP 트랜잭션을 PXE 트랜잭션으로 식별한다. 표준 DHCP 서버(PXE 미지원)는 일반적인 네트워킹 정보(IP 주소 등)를 포함한 DHCPOFFER로 응답할 수 있지만, PXE 관련 매개변수는 포함하지 않는다. PXE 클라이언트는 PXE를 지원하지 않는 DHCP 서버로부터만 응답을 받으면 부팅할 수 없다.

PXE를 지원하는 DHCP 서버의 DHCPOFFER를 구문 분석한 후, 클라이언트는 수신된 TFTP 서버 IP 주소와 NBP 이름을 기반으로 자신의 네트워크 IP 주소, IP 마스크 등을 설정한다. 그런 다음 클라이언트는 TFTP를 사용하여 NBP를 자신의 RAM으로 전송하고, 이를 검증(예: UEFI Secure Boot)한 후 NBP로부터 부팅한다. NBP는 부트 체인 프로세스의 첫 번째 연결 고리이며, 일반적으로 TFTP를 통해 최소한의 OS 실행 파일(예: WindowsPE 또는 기본 리눅스 커널+initrd)을 실행하기 위해 소수의 보조 파일을 요청한다. 이 작은 OS 실행 파일은 자체 네트워크 드라이버와 TCP/IP 스택을 로드한다. 이 시점부터 전체 OS를 부팅하거나 설치하는 데 필요한 나머지 지침은 TFTP가 아닌 HTTP, CIFS, 또는 NFS와 같은 더 강력한 전송 프로토콜을 사용하여 제공된다.

PXE는 여러 시스템 아키텍처를 고려하여 설계되었다. PXE 사양 버전 2.1은 IA-64 및 DEC Alpha를 포함한 6가지 시스템 유형에 대한 아키텍처 식별자를 정의했지만, 실제로는 IA-32만 완전히 지원했다. 이러한 초기 제한에도 불구하고, 인텔은 이후 PXE 기능을 모든 EFI/UEFI 환경으로 확장하여 새로운 UEFI 사양 내에서 PXE를 널리 지원하도록 했다. 현재 UEFI 사양 2.4A의 섹션 21은 UEFI 부팅 서비스 환경에서 네트워크 장치 접근을 제공하는 프로토콜(SNP, PXE, BIS 포함)을 정의한다.[4][5]

오늘날 PXE 환경에서 클라이언트 아키텍처 감지는 PXE v2.1 사양의 식별자보다는 주로 DHCP 옵션 93을 통해 이루어진다. 이를 통해 PXE 서버는 첫 번째 네트워크 부팅 패킷에서 클라이언트의 정확한 아키텍처를 알 수 있다. (RFC 4578 참고) IPv6의 등장과 함께 DHCP는 DHCPv6로 발전했으며, 새로운 DHCP 프로토콜 내에서 PXE를 지원하는 옵션은 2010년에 해결되었다. (RFC 5970 참고)

원래 PXE 클라이언트 펌웨어 확장은 IA-32 BIOS용 옵션 롬으로 설계되어, 초기 PC는 PXE 옵션 롬을 제공하는 NIC를 설치하여 PXE 기능을 갖추었다. 오늘날 클라이언트 PXE 코드는 NIC 자체 펌웨어 내에 직접 포함되거나 마더보드의 UEFI 펌웨어의 일부로 포함되는 것이 일반적이다. 인텔에서 작성하여 제품 개발 키트(PDK)에 포함된 연결 가능한 IA32 오브젝트 코드 형식 모듈로 무료로 제공되었지만, 오픈 소스 세계에서는 지난 몇 년간 gPXE/iPXE와 같은 자체 ROM을 제공하는 비표준 파생 프로젝트도 등장했다. 인텔 기반 ROM이 20년 이상 PXE 표준의 클라이언트 측을 구현해왔지만, 일부 사용자는 안정성과 PXE 표준 준수 대신 추가 기능을 위해 이러한 오픈 소스 대안을 선택하기도 한다.[6]

2. 3. 기술 발전

컴퓨터 네트워크 초창기부터, 클라이언트 시스템이 부팅 시 네트워크 서버에서 필요한 소프트웨어 이미지를 받아 부팅할 수 있도록 하는 기술에 대한 요구가 꾸준히 있었다. 이를 위해서는 클라이언트가 업계 표준 네트워크 프로토콜을 기반으로 하는 사전 부팅 서비스를 사용해야 했으며, 네트워크 부트스트랩 프로그램(NBP)이 하드웨어에 독립적인 방식으로 동작할 수 있도록 클라이언트 펌웨어 계층의 표준화가 중요했다. 표준의 존재와 준수는 네트워크 부팅 과정에서 시스템 간 상호 운용성을 보장하는 핵심 요소이다.

이러한 요구에 부응하기 위한 초기 시도 중 하나는 1984년에 발표된 RFC 906으로, 이는 1981년 발표된 Trivial File Transfer Protocol(TFTP) 표준(RFC 783)을 부트스트랩 로딩에 사용하도록 지정했다. 이후 1985년에는 Bootstrap Protocol(BOOTP) 표준(RFC 951)이 발표되어, 디스크가 없는 클라이언트 머신이 자체 IP 주소, TFTP 서버 주소, 그리고 실행할 NBP의 이름을 검색할 수 있게 되었다. 하지만 BOOTP는 구현상의 어려움 등으로 인해 결국 1997년 Dynamic Host Configuration Protocol(DHCP) 표준(RFC 2131)으로 발전하게 되었다. 그럼에도 불구하고 초기 TFTP/BOOTP/DHCP 방식은 프로비저닝 환경에서 필수적인 클라이언트 측 환경을 표준화하지 못하는 한계가 있었다.

프리부트 실행 환경(PXE)은 Intel에서 Wired for Management[2] 프레임워크의 일부로 도입되었으며, Intel과 SystemSoft가 발표한 사양에 설명되어 있다. PXE 버전 2.0은 1998년 12월에 출시되었고, 업데이트된 2.1 버전은 1999년 9월에 공개되었다.[3] PXE 환경은 DHCP 및 TFTP(현재 1992년에 발표된 RFC 1350에서 정의됨)를 포함한 여러 표준 클라이언트-서버 프로토콜을 사용한다. PXE 체계 내에서 프로비저닝의 클라이언트 측은 PXE 표준의 필수적인 부분이며, 네트워크 인터페이스 카드(NIC) BIOS 확장 또는 현재 UEFI 코드의 일부로 구현된다. 이 펌웨어 계층은 클라이언트에서 기본 범용 네트워크 장치 인터페이스(UNDI), 최소한의 UDP/IP 스택, 프리부트 DHCP 클라이언트 모듈 및 TFTP 클라이언트 모듈의 기능을 사용할 수 있게 하며, 이들은 함께 PXE API를 형성하여 NBP가 PXE 환경의 서버 측에서 제공하는 서비스와 상호 작용할 때 사용된다. TFTP의 낮은 처리량, 특히 지연 시간이 긴 링크를 통해 사용할 때의 문제는, 1998년 5월에 발표된 TFTP 블록 크기 옵션 RFC 2348로 처음 완화되었으며, 이후 2015년 1월에 발표된 TFTP 창 크기 옵션 RFC 7440으로 더 개선되어 잠재적으로 더 큰 페이로드 전송과 향상된 처리량을 가능하게 했다.

PXE는 여러 시스템 아키텍처를 고려하여 설계되었다. PXE 사양 버전 2.1은 IA-64 및 DEC Alpha를 포함한 여러 시스템 유형에 대한 아키텍처 식별자를 정의했지만, 당시에는 IA-32만 완전히 지원했다. 이러한 한계에도 불구하고, 인텔은 이후 PXE 기능을 모든 EFI/UEFI 환경으로 확장하여 새로운 UEFI 사양 내에서 PXE를 널리 지원하기로 결정했다.

현재 Unified Extensible Firmware Interface Specification 2.4A의 섹션 21(네트워크 프로토콜 — SNP, PXE 및 BIS)은 UEFI 부팅 서비스 환경에서 실행되는 동안 네트워크 장치에 대한 접근을 제공하는 프로토콜을 정의한다. 여기에는 Simple Network Protocol(SNP), PXE Base Code Protocol(PXE), Boot Integrity Services Protocol(BIS)이 포함된다.[4][5]

현재 PXE 환경에서 클라이언트 아키텍처를 감지하는 방식은 PXE v2.1 사양에 원래 포함된 식별자보다는, 네트워크에서 부팅할 각 컴퓨터가 클라이언트의 아키텍처를 나타내기 위해 DHCP 옵션 93을 설정하는 방식을 주로 사용한다. 이를 통해 PXE 서버는 첫 번째 네트워크 부팅 패킷에서 클라이언트의 정확한 아키텍처를 (부팅 시) 알 수 있다. (RFC 4578 참고)

IPv6의 등장과 함께 DHCP는 DHCPv6로 발전했으며, 새로운 DHCP 프로토콜 내에서 PXE를 지원하는 옵션의 필요성은 2010년 RFC 5970을 통해 해결되었다.

원래 PXE 클라이언트 펌웨어 확장은 IA-32 BIOS용 옵션 롬으로 설계되었으므로, 초기 개인용 컴퓨터(PC)는 PXE 옵션 롬을 제공하는 네트워크 인터페이스 컨트롤러(NIC)를 설치하여 PXE 기능을 갖추게 되었다. 오늘날 클라이언트 PXE 코드는 NIC 자체 펌웨어 내에 직접 포함되거나 마더보드의 UEFI 펌웨어의 일부로 포함된다.

원래 클라이언트 PXE 펌웨어가 인텔에서 작성되었고 제품 개발 키트(PDK)에 포함된 연결 가능한 IA32 오브젝트 코드 형식 모듈로 항상 무료로 제공되었지만, 오픈 소스 세계에서는 지난 몇 년 동안 자체 ROM을 제공하는 gPXE/iPXE와 같은 비표준 파생 프로젝트를 생성해왔다. 인텔 기반 ROM이 20년 이상 PXE 표준의 클라이언트 측을 구현해 왔지만 일부 사용자는 안정성과 PXE 표준 준수를 위해 추가 기능을 기꺼이 포기했다.[6]

3. 구성

PXE 환경은 네트워크를 통해 컴퓨터를 부팅하기 위한 표준 방식으로, 크게 클라이언트와 서버로 구성된다. 이를 이용하면 HDD와 같은 저장 장치가 없는 컴퓨터(씬 클라이언트 등)에 OS 이미지를 전송하여 작동시키거나, ODD 등 설치 미디어를 갖추지 않은 컴퓨터에 설치 이미지를 전송하여 설치 프로그램을 실행할 수 있다.

PXE를 이용한 네트워크 부팅에는 다음과 같은 구성 요소가 필요하다.


  • 클라이언트: 부팅하려는 컴퓨터는 PXE 기능을 지원하는 네트워크 카드(NIC)의 ROM이나 UEFI 펌웨어를 내장하고 있어야 한다.
  • 네트워크 서버:
  • DHCP 서버: 클라이언트에게 IP 주소, 서브넷 마스크 등 기본적인 네트워크 설정 정보를 제공한다. 또한, PXE 부팅에 필수적인 TFTP 서버의 주소와 부팅할 네트워크 부트스트랩 프로그램(NBP, Network Bootstrap Program) 파일의 이름을 알려주는 역할을 한다. DHCP 서버는 클라이언트의 요청(DHCPDISCOVER 패킷)에 응답(DHCPOFFER 패킷)하여 이 정보를 전달하며, 이때 PXE 관련 옵션들을 사용한다.


  • TFTP 서버: DHCP 서버가 알려준 NBP 파일을 클라이언트에게 실제로 전송하는 역할을 한다. 클라이언트는 이 파일을 RAM으로 내려받아 실행함으로써 부팅 과정을 시작한다. TFTP는 프로토콜 구조가 단순하여 펌웨어에 구현하기 쉽지만, 전송 속도가 느릴 수 있다. 이를 보완하기 위해 블록 크기(RFC 2348)나 창 크기(RFC 7440) 옵션이 제안되었다.
  • (선택 사항) 추가 파일 서버: NBP는 부팅 과정의 첫 단계를 담당하며, 이후 실제 운영 체제 커널이나 설치 이미지 등 더 큰 파일들은 HTTP, FTP, CIFS, NFS와 같이 더 빠르고 안정적인 프로토콜을 사용하는 별도의 서버를 통해 전송되는 경우가 많다.


DHCP 서버와 proxyDHCP 서버의 역할 분담


기존에 운영 중인 DHCP 서버의 설정을 변경하기 어려운 환경에서는 proxyDHCP 서버를 사용하는 방식이 유용하다.[3] 이 방식에서는 기존 DHCP 서버는 IP 주소 할당 등 일반적인 DHCP 기능만 수행하고, PXE 부팅에 필요한 정보(TFTP 서버 주소, NBP 파일명 등)는 별도의 proxyDHCP 서버가 제공한다. PXE 클라이언트는 DHCP 서버와 proxyDHCP 서버 양쪽으로부터 응답을 받아 필요한 정보를 조합하여 부팅을 진행한다. proxyDHCP 서버는 일반적으로 UDP 포트 4011을 사용하며, 기존 네트워크 환경에 영향을 주지 않고 PXE 환경을 구축할 수 있다는 장점이 있다.

3. 1. 클라이언트 CMOS 설정

클라이언트 PCCMOS 설정에서 첫 번째 부팅 장치를 LAN으로 설정하고, 옵션에서 'Boot from Rom'을 활성화한다. 이를 통해 WOL(Wake-on-LAN) 기능과 연동하여 한 대의 컴퓨터에서 사전에 설정된 컴퓨터들의 원격 전원 조작, 부팅, 원격 작업이 가능한 환경이 구축된다.

4. 작동 방식

PXE 환경은 업계 표준 인터넷 프로토콜인 UDP/IP, DHCP, 그리고 TFTP의 조합에 의존한다. 이 프로토콜들은 클라이언트의 NIC 펌웨어에서 쉽게 구현될 수 있도록 선택되었으며, 이를 통해 표준화되고 작은 메모리 사용량을 가진 PXE ROM이 만들어졌다. 표준화, PXE 펌웨어 이미지의 작은 크기, 그리고 낮은 자원 사용은 주요 설계 목표 중 일부였다. 덕분에 PXE 표준의 클라이언트 측은 강력한 클라이언트 컴퓨터부터 자원이 제한적인 단일 보드 컴퓨터 (SBC) 및 시스템 온 칩 (SoC) 컴퓨터에 이르기까지 다양한 시스템에서 동일하게 구현될 수 있다.

DHCP는 클라이언트에 필요한 네트워크 매개변수, 특히 초기 부트스트랩 프로그램(NBP, Network Bootstrap Program) 및 보조 파일을 다운로드할 TFTP 서버의 위치(IP 주소)를 제공하는 데 사용된다. PXE 부트스트랩 세션을 시작하기 위해, 클라이언트 PXE 펌웨어의 DHCP 구성 요소는 PXE 관련 옵션을 포함하는 DHCPDISCOVER 패킷을 포트 67/UDP (DHCP 서버 포트)로 브로드캐스트한다. 이를 통해 필요한 네트워크 구성 및 네트워크 부팅 매개변수를 요청한다. PXE 관련 옵션은 시작된 DHCP 트랜잭션을 PXE 트랜잭션으로 식별한다. 표준 DHCP 서버(PXE 비활성화 상태)는 네트워킹 정보(예: IP 주소)를 포함하는 일반적인 DHCPOFFER로 응답할 수 있지만, PXE 관련 매개변수는 포함하지 않는다. PXE 클라이언트는 PXE가 비활성화된 DHCP 서버로부터 응답만 받으면 네트워크 부팅을 할 수 없다.

PXE가 활성화된 DHCP 서버로부터 받은 DHCPOFFER를 분석한 후, 클라이언트는 수신된 TFTP 서버 IP 주소와 NBP 파일 이름을 기반으로 자신의 네트워크 IP 주소, IP 마스크 등을 설정하고 네트워크 상의 부팅 리소스를 가리키도록 구성한다. 다음으로 클라이언트는 TFTP를 사용하여 NBP를 자신의 으로 전송하고, 보안 부팅과 같은 방식으로 이를 검증한 후, 최종적으로 NBP로부터 부팅을 시작한다. NBP는 부트 체인 프로세스의 첫 번째 연결 고리이며, 일반적으로 TFTP를 통해 최소한의 운영 체제 실행 파일(예: Windows PE 또는 기본적인 리눅스 커널과 initrd)을 실행하기 위해 소수의 보조 파일을 추가로 요청한다. 이 작은 운영 체제 실행 파일은 자체 네트워크 드라이버와 TCP/IP 스택을 로드한다. 이 시점 이후에는 전체 운영 체제를 부팅하거나 설치하는 데 필요한 나머지 지침들이 TFTP가 아닌 HTTP, CIFS, 또는 NFS와 같이 더 강력한 전송 프로토콜을 사용하여 전달된다.

5. 장점 및 활용

윈도우 배포 서비스(WDS)
마이크로소프트 배포 도구 키트(MDT)
시스템 센터 구성 관리자(SCCM)



네트워크 부트 프로그램(NBP) 개발과 관련하여, 부팅 메뉴 확장 기능이나 스크립트 기능 등을 제공하는 부팅 매니저를 구현하는 여러 프로젝트가 존재한다.

프로젝트주요 기능
Syslinux PXELINUX부팅 메뉴 확장, 스크립트 기능 등 제공
gPXE/iPXE부팅 메뉴 확장, 스크립트 기능 등 제공



위에 언급된 프로젝트들은 대부분 둘 이상의 운영 체제를 부팅하거나 설치할 때 "부팅 매니저 - 부트 로더" 방식으로 작동한다. 초기 NBP는 자체 설정을 검색하고 사용자에게 부팅 옵션 메뉴를 보여주는 부팅 매니저 역할을 한다. 사용자가 특정 부팅 옵션을 선택하면, 해당 운영 체제에 맞는 부트 로더가 네트워크를 통해 다운로드되어 실행되고, 선택된 부팅 절차를 계속 진행한다.

PXE 부팅 환경을 구축하면 다음과 같은 방식으로 활용할 수 있다.


  • HDD와 같은 저장 장치가 없는 컴퓨터(씬 클라이언트 등)에 OS 이미지를 네트워크로 전송하여 부팅하고 작동시킬 수 있다.
  • DVD 드라이브와 같은 설치 미디어를 갖추지 않은 컴퓨터에 설치 이미지를 네트워크로 전송하여 운영 체제 설치 프로그램을 실행할 수 있다.

6. 관련 기술

PXE 이전에도 컴퓨터 네트워크를 이용한 부팅 기술들이 시도되었다. 1984년 발표된 RFC 906은 TFTP(1981년 발표된 RFC 783)를 이용한 부트스트랩 로딩 표준을 제시했으며, 1985년에는 BOOTP(RFC 951)가 등장하여 디스크 없는 클라이언트가 자신의 IP 주소, TFTP 서버 주소, 그리고 실행할 네트워크 부트스트랩 프로그램(NBP)의 이름을 얻을 수 있게 했다. 하지만 BOOTP는 구현의 어려움 등으로 인해 1997년 발표된 DHCP(RFC 2131)로 발전하게 되었다. 이러한 초기 방식들은 클라이언트 측의 표준화된 환경이 부족하다는 한계가 있었다.

PXE 환경은 DHCP와 TFTP(1992년 발표된 RFC 1350에서 정의됨)와 같은 업계 표준 인터넷 프로토콜을 기반으로 작동한다. 특히 TFTP는 처리량 문제를 개선하기 위해 블록 크기 옵션(RFC 2348, 1998년)과 창 크기 옵션(RFC 7440, 2015년)이 추가되어 더 효율적인 데이터 전송이 가능해졌다.

IPv6 환경에서의 네트워크 부팅을 지원하기 위해, DHCPv6 프로토콜 내에서도 PXE 관련 옵션이 2010년에 정의되었다(RFC 5970).

표준 PXE 클라이언트 펌웨어 외에도, 오픈 소스 커뮤니티에서는 gPXE나 iPXE와 같은 독자적인 PXE 구현 프로젝트를 진행해왔다. 이들은 인텔에서 제공하는 표준 펌웨어와 비교하여 추가적인 기능을 제공하기도 하지만, 안정성이나 표준 준수 측면에서는 차이가 있을 수 있다.[6]

6. 1. 형제 환경

애플은 부트 서버 검색 프로토콜(Boot Server Discovery Protocol, BSDP) 사양의 일부로 매우 유사한 네트워크 부팅 방식을 제시했다.[7] BSDP는 1999년 8월 애플에 의해 처음 발표되었고, 마지막 버전인 v1.0.8은 2010년 9월에 발표되었다.[8] Mac OS X Server에는 넷부트(NetBoot)라는 시스템 도구가 포함되어 있다.

넷부트 클라이언트는 BSDP를 사용하여 부팅에 필요한 운영 체제 리소스를 동적으로 얻는다. BSDP는 표준 DHCP에 없는 추가적인 넷부트 기능을 제공하기 위해, 공급업체별 정보를 사용하여 DHCP를 기반으로 만들어졌다. 이 프로토콜은 클라이언트 펌웨어에 구현되어 있다. 부팅 시 클라이언트는 DHCP를 통해 IP 주소를 얻은 다음, BSDP를 사용하여 부트 서버를 찾는다. 각 BSDP 서버는 다음과 같은 부팅 정보를 응답한다.

  • 부팅 가능한 운영 체제 이미지 목록
  • 기본 운영 체제 이미지
  • 클라이언트가 현재 선택한 운영 체제 이미지 (정의된 경우)


클라이언트는 목록에서 운영 체제를 선택하고, 선택한 내용을 서버로 보낸다. 선택된 부트 서버는 부트 파일, 부트 이미지, 그리고 선택한 운영 체제를 다운로드하고 실행하는 데 필요한 기타 정보를 제공하여 응답한다.

6. 2. 파생 환경

마이크로소프트는 자사의 부팅 정보 협상 계층(BINL, Boot Information Negotiation Layer)을 통해 PXE 환경을 확장한 독자적인 기술을 만들었다. BINL은 서버 서비스 형태로 구현되며, 마이크로소프트의 원격 설치 서비스(RIS, Remote Installation Services) 및 Windows 배포 서비스(WDS, Windows Deployment Services) 전략에서 핵심적인 역할을 담당한다. BINL은 특정 준비 과정과 함께, 일종의 마이크로소프트 자체 DHCP 확장으로 볼 수 있는 네트워크 프로토콜을 포함한다. 이는 PXE 표준 클라이언트 펌웨어를 사용하지만 마이크로소프트의 독점 기술이며, 현재 공개된 BINL 사양은 없다.

한편, ProxyDHCP를 사용하면 기존 DHCP 서버의 설정을 변경하지 않고도 PXE 부팅 환경을 구축할 수 있다. 이는 기존 DHCP 서버와의 통신을 중계하며 PXE 부팅에 필요한 옵션을 추가하는 방식으로 작동한다. 윈도우용 Windows 배포 서비스 역시 이와 유사한 방식으로 동작한다.

7. 관련 IETF 표준 문서

RFC #제목게시일만든이비고
RFC 783TFTP 프로토콜 (리비전 2)1981년 6월K. Sollins다음으로 대체 - RFC 1350
RFC 906TFTP를 사용한 부트스트랩 로딩1984년 6월Ross Finlayson-
RFC 951부트스트랩 프로토콜 (BOOTP)1985년 9월Bill Croft다음으로 업데이트됨 - RFC 1395, RFC 1497, RFC 1532, RFC 1542, RFC 5494
RFC 1350TFTP 프로토콜 (리비전 2)1992년 7월K. Sollins다음으로 업데이트됨 - RFC 1782, RFC 1783, RFC 1784, RFC 1785, RFC 2347, RFC 2348, RFC 2349
RFC 2131DHCP1997년 3월R. Droms다음으로 업데이트됨 - RFC 3396, RFC 4361, RFC 5494, RFC 6842
RFC 2348TFTP 블록 크기 옵션1998년 5월G. Malkin-
RFC 4578인텔 PXE를 위한 DHCP 옵션2006년 11월M. Johnston-
RFC 5970네트워크 부트를 위한 DHCPv6 옵션2010년 9월T. Huth-
RFC 7440TFTP 윈도사이즈 옵션2015년 1월P. Masotta-



컴퓨터 네트워크 초창기부터, 클라이언트 시스템이 부팅 시 네트워크 서버에서 소프트웨어 이미지를 받아 실행할 수 있도록 하는 표준화된 방법에 대한 요구가 있었다. 이를 위해 업계 표준 네트워크 프로토콜 기반의 사전 부팅 서비스가 필요했다.

초기 시도로는 1981년 발표된 Trivial File Transfer Protocol (TFTP) 표준인 RFC 783을 기반으로, 1984년 RFC 906 (TFTP를 사용한 부트스트랩 로딩)이 제안되었다. 이후 1985년에는 Bootstrap Protocol (BOOTP) 표준인 RFC 951이 발표되어, 디스크 없는 클라이언트가 자신의 IP 주소, TFTP 서버 주소, 실행할 네트워크 부트스트랩 프로그램(NBP)의 이름을 얻을 수 있게 되었다. 하지만 BOOTP 구현의 어려움 등으로 인해 1997년 Dynamic Host Configuration Protocol (DHCP) 표준인 RFC 2131이 개발되었다.

프리부트 실행 환경 (PXE)은 Intel에서 Wired for Management[2] 프레임워크의 일부로 도입되었으며, 1999년 9월에 버전 2.1이 공개되었다.[3] PXE 환경은 DHCP(RFC 2131)와 TFTP(RFC 1350, 1992년 개정) 등 여러 표준 클라이언트-서버 프로토콜을 사용한다. PXE는 네트워크 인터페이스 카드 (NIC)의 펌웨어(BIOS 또는 UEFI)에 구현된 표준화된 클라이언트 환경을 제공하여 NBP가 하드웨어에 독립적으로 네트워크 부팅 서비스를 이용할 수 있도록 한다. 이 펌웨어 계층은 클라이언트에서 기본 범용 네트워크 장치 인터페이스(UNDI), 최소한의 UDP/IP 스택, 프리부트(DHCP) 클라이언트 모듈 및 TFTP 클라이언트 모듈의 기능을 사용할 수 있게 하며, 함께 PXE 응용 프로그래밍 인터페이스를 형성하여 NBP에서 사용된다.

TFTP는 특히 대기 시간이 긴 네트워크에서 처리량이 낮다는 단점이 있었는데, 이를 개선하기 위해 RFC 2348 (TFTP 블록 크기 옵션, 1998년)과 RFC 7440 (TFTP 윈도사이즈 옵션, 2015년)이 발표되어 전송 효율을 높였다. 또한, PXE 환경에서 DHCP를 더 효과적으로 사용하기 위한 옵션들이 RFC 4578 (인텔 PXE를 위한 DHCP 옵션, 2006년)과 RFC 5970 (네트워크 부트를 위한 DHCPv6 옵션, 2010년)을 통해 표준화되었다.

참조

[1] 서적 The Policy Driven Data Center with ACI: Architecture, Concepts, and Methodology Cisco Press 2014-12-31
[2] 웹사이트 Wired for Management Baseline - Version 2.0 Release http://download.inte[...] Intel Corporation 1998-12-18
[3] 웹사이트 Preboot Execution Environment (PXE) Specification - Version 2.1 http://download.inte[...] Intel Corporation 1999-09-20
[4] 웹사이트 Unified Extensible Firmware Interface Specification http://www.uefi.org/[...] UEFI 2013-12-02
[5] 웹사이트 UEFI PXE Boot Performance Analysis https://uefidk.com/s[...] Intel Corporation 2014-02-02
[6] 웹사이트 Etherboot/gPXE Wiki http://etherboot.org[...] Etherboo.org
[7] 웹사이트 NetBoot 2.0: Boot Server Discovery Protocol (BSDP) v0.1 http://opensource.ap[...] Apple Corporation 2003-12-02
[8] 웹사이트 NetBoot 2.0: Boot Server Discovery Protocol (BSDP) v1.08 https://opensource.a[...] Apple Corporation 2010-09-17



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com