DHCP
Dynamic Host Configuration Protocol
동적 호스트 구성 프로토콜
- 처음으로 부팅했거나, 디스크가 없는 컴퓨터에게
Communication에 필요한 4가지 요소를 제공하기 위한 Client-Server Protocol(Client-Server Program)이다.
(Standard Network Protocol이다.)
- Host가 접속과 갱신을 빈번히 행하는 Home Internet, Wireless LAN 환경에서 자주 사용된다.
※ Communication에 필요한 4가지 요소 (Network 구성을 위한 Parameters)
1) Host 자기 자신의 IP주소
2) Network Subnet Mask
- Routing 과정에서 메시지의 Netowrk-ID를 알기 위해 필요한 값이다.
3) 하나 이상의 Name Server의 IP 주소
- Name Server는 웹 사이트의 URL Name을 IP 주소로 변환하여 리턴해준다.
4) 인접한 Router의 IP 주소
+ 접속할 웹 사이트의 URL Name
Protocols prior to DHCP (DHCP 이전의 프로토콜들)
- DHCP가 호스트 IP설정을 위한 공식 프로토콜이 되기 이전에 존재했던 프로토콜들은 아래와 같다:
- RARP
- BOOTP
1. RARP (Reverse ARP)
- ARP의 역기능을 수행하는 프로토콜로,
물리 주소에 해당되는 논리 주소를 알아내는 프로토콜이다.
* RARP의 한계
1) RARP는 L2 계층의 Broadcast 서비스를 사용하는데, 이 때문에 ARP 서버가 각각의 네트워크에 존재해야 한다.
2) Communication을 위한 4가지 항목들 중, RARP는 자기 자신의 IP주소만을 알아낼 수 있다.
2. BOOTP (Bootstrap Protocol)
- DHCP 바로 이전에 사용되었던 프로토콜로,
RARP의 두 가지 약점을 보완하기 위해 등장한 Client-Server Protocol(Client-Server Program)이다.
- Communication을 위한 4가지 항목들 모두를 제공할 수 있다.
- 그러나, BOOTP는 Static Configuration Protocol로,
Client의 물리 주소를 미리 IP 주소에 Binding시켜놓고,
Client의 요청이 발생하면 미리 Binding해놓은 IP 주소를 Table상에서 찾아 Reply해주는 방식이다.
- 그러므로, BOOTP는 Dynamic Configuration에서는 사용될 수 없다.
* Dynamic Configuration이 필요한 경우
1) 호스트가 한 물리네트워크에서 다른 물리네트워크로 이동한 경우
- 이 경우, 호스트의 물리 주소가 변하게 된다.
2) 호스트가 짧은 시간동안 임시 IP 주소를 사용하고자 하는 경우
- 물리 주소와 논리 주소가 정적으로 Binding되어 있어
짧은 시간동안에 IP주소를 할당했다가 해제하는 것이 거의 불가능하다.
※ DHCP에서는 BOOTP에 대한 Backward Compatibility(하위 호환)를 제공한다.
DHCP in Same Network (동일한 망에서의 DHCP)
1) DHCP Server가 UDP Port Number 67에 Passive Open을 수행하고, Client로부터의 Request를 기다린다.
2) 부팅된 Client는 Port Number 68에 Active Open을 수행한다.
- 이 과정에서 Client는 자신의 IP 주소와 Server의 IP 주소도 모른채로 IP-Datagram을 전송하는데,
Sender측 IP 주소는 모두 0으로 채우고(Me 주소), Destination측 IP 주소는 모두 1(Broadcasting)로 채워서 전송한다.
(All 0's Address는 Me 주소를 의미하고, All 1's Address는 Limited Broadcasting용 주소이다.)
3) DHCP Server는 DHCP Reply를 Broadcasting 혹은 Unicasting 방식으로 Client에게 전달한다.
- 이 때, DHCP Server가 Client의 물리 주소를 이미 알고 있는 경우, ARP 프로토콜을 사용하지 않을 수도 있다.
* Special Address (특수 주소) (URL)
DHCP in Different Network (다른 망에서의 DHCP)
- 기본적으로, Limited Broadcasting 주소를 통해선 해당 물리 네트워크를 관장하는 Router 바깥을 벗어날 수 없다.
(그러므로, 동일한 망에서의 DHCP처럼 Request를 Broadcast해도 DHCP 서버에 닿지 못한다.)
- DHCP 서버가 다른망에 위치해있는 경우,
DHCP Client가 DHCP Request 메시지를 Broadcasting하면,
같은 망에 있는 Relay Agent가 이 DHCP Request 메시지를 DHCP Server까지 Unicasting한다.
- DHCP Server는 이렇게 수신한 Request에 대한 DHCP Reply를 다시 Relay Agent에게로 Unicasting하고,
이를 수신한 Relay Agent는 DHCP Replay를 DHCP Client에게로 전송한다.
* Relay Agent
- DHCP Client와 같은 물리 네트워크 내에 위치한 호스트로, DHCP Server의 주소를 알고 있는 호스트이다.
- Relay Agent로는 같은 물리네트워크 내의 호스트 중 하나이거나,
L5(Application Layer)까지 구현되어 있는, 해당 물리네트워크의 Router가 될 수 있다.
(기본적으로, Router는 L3(Network Layer) 네트워크 장비이다.)
DHCP Well-Known Port Number
* DHCP Server: UDP 67
* DHCP Client: UDP 68
* TCP/UDP Port Numbers (URL)
- 일반적으로, DHCP Client는 DHCP Message를 주고받는데에 Well-Known Port Number 68을 사용하고,
DHCP Server는 DHCP Message를 주고받는데에 Well-Known Port Number 67을 사용한다.
- 특히나, 잠깐동안 DHCP 메시지를 주고받는 Client가
Ephemeral Port(임시 포트)를 사용하지 않고, Well-Known Port를 사용하는 이유는
혹여나 같은 물리네트워크내에 다른 호스트와 포트 번호가 겹칠 경우, DHCP Server가 Reply를 Broadcasting 했을 때,
다른 호스트도 DHCP Reply를 수신하여 오류를 일으킬 수 있기 때문이다.
(예를 들어, DHCP Client도 2017 포트를 사용하고,
다른 호스트 B도 2017 포트를 사용하여 Daytime Client를 실행할 경우,
DHCP Server가 2017 포트로 Broadcasting한다면, B의 Daytime Client가 이 DHCP Reply를 수신하게 되어
Daytime 프로그램에 오류가 생길 수 있다.)
- 즉, 무분별한 임시 포트 사용으로 인해 올바르지 못한 Demultiplexing이 일어나는 것을 방지하기 위해
Well-Known Port Number를 사용하는 것이다.
※ 같은 물리 네트워크 내에 호스트 A와 호스트 B가 동시에 DHCP Client를 실행하고
둘 다 Well-Known Port Number 68을 사용하고 있다면, DHCP Server가 DHCP Reply를 Broadcasting했을 때,
두 호스트 A와 B에 같은 IP 주소가 할당되는 문제가 생길 수 있을 것이다.
- 이를 방지하기 위해, 각각의 DHCP 연결에는 Transaction ID 번호를 사용하여
각 호스트간의 DHCP 연결을 구분짓는다.
(호스트들이 서로 같은 Transaction ID를 선택할 확률은 극히 낮다.)
DHCP Error Control (DHCP 에러 제어)
- DHCP는 UDP 기반 프로토콜이므로, 에러 제어 서비스를 필히 제공해야 한다.
1) Checksum
- DHCP는 UDP에서 Checksum Field를 사용할 것을 명령한다.
(UDP에서는 Checksum값 확인이 선택적이기 때문이다.)
2) Timer & Retransmission Policy
- DHCP Client가 일정 시간동안, DHCP Reply를 수신하지 못하면 DHCP Request를 재전송한다.
- 이 때, 네트워크에 재해가 발생하여 모든 클라이언트가 동시에 DHCP Request를 전송하여
Traffic Jam을 발생시키는 것을 방지하기 위해, Timer값은 각각의 Client가 Random하게 설정한다.
DHCP Packet (DHCP 패킷)
* \(\texttt{Flags}\) Format
* \(\texttt{Options}\) Format
- Network Mask 정보나 Default Router에 대한 정보, 특정 제조업체 정보를 전송할 때 쓰이는 필드이다.
- Options 필드는 DHCP Reply에서만 사용된다.
Configuration
- DHCP는 Static Address Allocation, Dynamic Address Allocation 기능 모두를 제공한다.
- DHCP는 DHCP Request가 도착하면, 먼저 정적 DB를 검색해서 요청된 물리 주소가 이미 Binding되어 있으면,
그에 Mapping되어 있는 IP 주소를 Reply하고,
정적 DB에 해당 물리 주소가 없는 경우, 동적 DB를 통해 IP 주소를 동적으로 할당(Reply)한다.
Static Address Allocation (고정 주소 할당)
- DHCP Server는 물리 주소와 논리 주소(IP 주소)가 정적으로 Binding된 DB를 바탕으로
Client에게 주소를 할당한다.
- 이 경우, BOOTP에 대한 Backward Compatibility(하위 호환)를 제공한다.
Dynamic Address Allocation (동적 주소 할당)
- DHCP Server는 이용가능한 IP 주소들의 Pool이 저장되어 있는 다른 DB도 갖고 있다.
(이 DB를 통해 동적으로 IP 주소를 할당한다.)
- 이렇게, Pool에서 할당한 주소는 임시적이다.
- 호스트가 물리 네트워크 사이를 이동하거나, 네트워크에 연결되었다가 끊어지는 경우에
동적으로 주소를 할당하는 것이 바람직하다.
DHCP Transition States (Client-Side)
State | Description |
INIT | - DHCP Client가 처음 시작되어 진입하는 상태이다. - Client는 DHCP DISCOVER 메시지를 67번 포트에 Broadcasting한다. (이후, SELECTING 상태로 이동한다.) |
SELECTING | - Client의 DHCP DISCOVER 메시지에 대한 응답으로, Server는 DHCP OFFER 메시지를 Client에게 보낸다. (DHCP OFFER 메시지에 IP 주소가 포함되며, IP주소의 Lease(임대) 시간의 기본값은 1시간이다.) - Client는 여러 Server로부터 받은 DHCP OFFER 메시지 중 하나를 선택하고 해당 Server에 DHCP Request를 전송한다. (이후, REQUESTING 상태로 이동한다.) - 만약, DHCP OFFER를 하나도 수신하지 못한 경우, 2초 간격으로 4번 재전송한다. (이후에도 DHCP OFFER가 없으면, 5분 동안 대기 후 재시도한다.) |
REQUESTING | - Client는 물리 주소와 IP 주소간의 Binding 정보를 생성하는 Server로부터 DHCP ACK 메시지를 수신할 때 까지 REQUESTING 상태에서 머문다. - DHCP ACK 메시지를 수신하면 BOUND 상태로 이동한다. |
BOUND | - Client는 IP 주소의 Lease가 만료될 때 까지 IP 주소를 사용한다. - Lease 기간의 50%가 지나면, Client는 다른 DHCP REQUEST 메시지를 Server에게 보내 Lease 기간을 새롭게 설정한다. (이후, RENEWING 상태로 이동한다.) - 또는, Client가 IP 주소의 Lease를 취소하고 INIT 상태로 이동할 수도 있다. |
RENEWING | - Client는 DHCP ACK를 수신하여 Lease를 새로 설정하기 전까지 RENEWING 상태에서 머문다. (DHCP ACK를 수신하면, 타이머를 재설정하고 BOUND 상태로 이동한다.) - Client가 DHCP ACK를 수신하지 못한 채, Lease 기간의 87.5%가 경과되기 이전까지는 RENEWING 상태에서 머문다. (그 이상으로 경과되면, REBINDING 상태로 이동한다.) |
REBINDING | - Client는 REBINDING 상태에서, DHCP NACK를 수신하거나 Lease기간이 만료되면 INIT 상태로 이동한다. (즉, 다른 IP 주소에 대한 Lease를 시도한다.) - Client는 REBINDING 상태에서, DHCP ACK를 수신하면 BOUND 상태로 이동하고, 타이머를 재설정한다. |
Example. Exchanging DHCP Messages
Reference: TCP/IP Protocol Suite 4th Edition
(Behrouz A. Forouzan 저, McGraw-Hill, 2010)
Reference: Data Communications and Networking 5th Edition
(Behrouz A. Forouzan 저, McGraw-Hill, 2012)
Reference: Microsoft, DHCP(Dynamic Host Configuration Protocol), URL, 2023년 7월 21일 검색