DHCP
Last updated
Last updated
IP를 동적으로 할당하는 데 사용되는 프로토콜
사용자가 직접 입력해야 하는 IP 주소, 서브넷 마스크, 게이트웨이, DNS 정보를 자동으로 할당받아 사용할 수 있다.
일반적으로 데이터 센터의 서버 팜과 같은 운영 망에서 사용되는 IP는 주로 정적 할당을 사용하지만 PC 사용자를 위해 운영되는 사무실 네트워크에서는 IP를 자동으로 할당받는 동적 할당 방식을 많이 사용한다.
사용하지 않는 IP 정보는 회수되어 사용하는 경우에만 재할당되어 사용자 이동이 많고 한정된 IP 주소를 가진 경우 유용하다.
BOOTP(Bootstrap Protocol)을 기반으로 확장된 형태이다. 따라서 BOOTP와 DHCP 사이에 호환성이 있다.
호스트가 DHCP 서버로부터 IP를 할당 받는 과정은 다음과 같다.
DHCP Discover DHCP 클라이언트는 DHCP 서버를 찾기 위해 DHCP Discover 메시지를 브로드캐스트로 전송한다. 이 때 서비스 포트의 출발지는 UDP 68번(bootpc), 목적지는 UDP 67번(bootps)를 사용한다. IP를 할당받는 과정이므로 패킷을 정상적으로 주고받을 수 없어 TCP 대신 UDP를 사용한다.
DHCP Offer DHCP Discover를 수신한 DHCP 서버는 클라이언트에 할당할 IP 주소와 서브넷, 게이트웨이, DNS 정보, Lease Time 등의 정보를 포함한 DHCP 메시지를 클라이언트로 전송한다.
클라이언트에 할당할 IP 주소는 DHCP IP Pool에서 할당할 IP를 선택하거나 미리 정의되어있는 MAC주소-IP주소 값을 통해 정해진다.
DHCP Request DHCP 서버로부터 제안받은 IP 주소(Requested IP)와 DHCP 서버 정보(DHCP Server Identifier)를 포함한 DHCP 요청 메시지를 브로드캐스트로 전송한다.
이 때 브로드캐스트를 사용하는 이유는 DHCP 서버가 여러 대 동작하는 환경을 위함이다. DHCP 서버는 Request에 담긴 IP 정보가 자신이 제안한 것인지 확인 후 맞다면 해당 패킷에 대해 응답한다.
DHCP Acknowledgement DHCP 클라이언트로부터 IP 주소를 사용하겠다는 요청을 받으면, DHCP 서버에 해당 IP를 어떤 클라이언트가 언제부터 사용하기 시작했는지 정보를 기록하고 DHCP Request 메시지를 정상적으로 수신했다는 응답을 전송한다. 클라이언트는 이 메시지를 받으면 DHCP 서버에서 할당받은 IP를 로컬에 설정하고 사용하기 시작한다.
DHCP를 이용해 IP 할당 시 lease time(임대 시간)이라는 값이 존재하여, 일정 시간동안만 IP가 유효하고 임대 시간이 만료되면 IP가 다시 IP Pool로 회수된다.
클라이언트가 IP를 사용하는 도중에 임대 시간이 만료되면 DHCP Discover부터 시작해 다시 IP를 할당받아야 한다. 하지만 이렇게 될 경우 사용하던 IP 주소가 다른 클라이언트에 할당될 수도 있으므로 예상치 못한 상황이 발생할 수도 있다.
클라이언트가 고정되어 있고 IP Pool이 크다면 DHCP 임대 시간을 길게 잡고, 클라이언트가 불특정하게 자주 바뀌면 임대 시간을 짧게 설정해 IP가 빨리 반환되도록 해야 한다.
따라서 임대 시간의 50%가 지난 시점에 DHCP 갱신(Renewal) 과정을 수행하여 기존 IP의 임대 시간을 초기화한다.
임대 시간이 50% 지난 시점에서 갱신에 실패하면, 다시 남은 시간의 50% 지난 시점(초기 임대 시간의 75% 시점)에 다시 시도한다. 이 때에도 갱신을 실패하면 임대 시간이 만료되었을 때 IP를 반납하고 다시 처음부터 IP를 할당받아야 한다.
갱신 작업은 다음과 같이 수행된다.
DHCP Request
처음 수행한 IP 할당 과정과 달리 이미 DHCP 서버와 사용중인 IP 정보가 있는 상태이므로, DHCP Request 과정부터 수행한다. 이 때에는 유니캐스트로 전송한다.
DHCP ACK
요청에 따라 IP 임대 시간을 갱신하고 결과를 클라이언트에 보낸다.
윈도 서버의 DHCP 서비스를 사용하거나 리눅스의 DHCP 데몬을 사용해 구성할 수 있다.
스위치, 라우터, 방화벽, VPN과 같은 네트워크, 보안 장비에서도 DHCP 서비스가 가능하다.
다음 값들을 포함해 여러 값들을 설정할 수 있다.
IP주소 풀(IP범위)
클라이언트에 할당할 IP 주소 범위
예외IP주소 풀(예외IP범위)
클라이언트에 할당할 IP 주소로 선언된 범위 중 예외적으로 할당하지 않을 대역
임대 시간
클라이언트에 할당할 IP 주소의 기본 임대 시간
서브넷 마스크(Subnet Mask)
클라이언트에 할당할 IP 주소에 대한 서브넷 마스크 정보
게이트웨이(Router)
클라이언트에 할당할 게이트웨이 정보
DNS(Domain Name Server)
클라이언트에 할당할 DNS 주소
DHCP 서버에 IP 할당 요청을 보내기 위해 브로드캐스트 메시지를 사용하는데, 브로드캐스트는 동일 네트워크에서만 전송되므로 각 네트워크마다 DHCP 서버가 필요하다.
네트워크 대역이 여러 개인 환경에서는 DHCP 서버 배치 및 이중화를 고려해야 한다.
DHCP 릴레이 에이전트를 사용하면 DHCP 서버 한 대로 여러 네트워크 대역에서 IP 풀을 관리할 수 있다.
서로 다른 네트워크 대역에 있는 DHCP 클라이언트와 DHCP 서버 간에 패킷을 주고받을 수 있도록 중계(Relay)한다.
DHCP 릴레이 에이전트는 DHCP 클라이언트와 같은 L2 네트워크 내에 존재해야 하며, DHCP 서버의 IP 주소가 등록되어 있어야 한다.
브로드캐스트로 전달된 DHCP 패킷을 릴레이 에이전트가 수신하면, 이를 DHCP 서버 혹은 클라이언트로 유니캐스트하여 보낸다.
다음과 같은 과정으로 다른 대역폭에 있는 DHCP 서버로부터 IP를 동적 할당 받을 수 있다.
DHCP Discover (클라이언트 → 릴레이 에이전트)
DHCP 클라이언트는 DHCP 서버를 찾기 위해 브로드캐스트로 패킷을 전송한다.
DHCP Discover (릴레이 에이전트 →DHCP서버) DHCP 릴레이 에이전트는 패킷을 받은 후, 출발지와 목적지를 릴레이 에이전트 IP 주소와 DHCP 서버 IP 주소로 재작성한다. 목적지가 브로드캐스트에서 DHCP 서버 IP 주소로 변경되었기 때문에 릴레이 에이전트가 DHCP 서버로 DHCP Discover 메시지를 보낼 때는 유니캐스트로 전송한다. 출발지 주소는 DHCP 서버로 가기 위한 방향의 인터페이스 IP 주소이고, DHCP 메시지에 사용되는 릴레이 에이전트 IP 주소는 DHCP 클라이언트가 속한 내부 인터페이스의 IP 주소이다.
DHCP Offer (DHCP서버 → 릴레이 에이전트) DHCP Discover를 수신한 DHCP 서버는 클라이언트에 할당할 IP 주소와 서브넷, 게이트웨이, DNS 정보, 임대 시간(Lease Time) 등의 정보를 포함한 DHCP 메시지를 DHCP 릴레이 에이전트에게 유니캐스트로 전송한다. 이때 DHCP Server Identifier는 DHCP 서버 자신으로 둔다.
DHCP Offer (릴레이 에이전트 → 클라이언트) DHCP 릴레이 에이전트는 DHCP Offer 메시지를 DHCP 클라이언트에 브로드캐스트로 다시 전송한다. DHCP Server Identifier 값만 실제 DHCP 서버의 IP 주소에서 릴레이 에이전트의 외부 인터페이스 IP 주소로 변경해 전송한다.
DHCP Request (클라이언트 → 릴레이 에이전트) DHCP 클라이언트는 DHCP 서버로부터 제안받은 IP 주소(Requested IP)와 DHCP 서버 정보(DHCP Server Identifier)를 포함한 DHCP 요청 메시지를 브로드캐스트로 전송한다.
DHCP Request (릴레이 에이전트 →DHCP서버) DHCP 클라이언트에서 보낸 DHCP 요청 메시지를 유니캐스트로 변환해 DHCP 서버로 전달한다.
DHCP ACK (DHCP서버 → 릴레이 에이전트) DHCP 요청을 받은 DHCP 서버는 해당 IP를 어떤 클라이언트가 언제부터 사용하기 시작했는지 정보를 기록하고 DHCP Request 메시지를 정상적으로 수신했다는 응답을 DHCP 릴레이 에이전트에게 유니캐스트로 전송한다.
DHCP ACK (릴레이 에이전트 → 클라이언트) DHCP 서버에서 받은 Ack 메시지를 클라이언트에 브로드캐스트로 다시 전달한다.