본문 바로가기

WIZnet DHCP/1.DHCP 동작 & Protocol 설명

DHCP 전체 동작 과정 및 프로토콜 분석 !

이번 시간에는 저번 강좌와 이어서 DHCP Protocol의 전체 동작 과정과 DHCP의 구동 Protocol에 대한 설명을 진행하겠습니다.

저번 강좌에서 DHCP란, "IP를 할당하여 주는 프로토콜이다." 라고 언급하였습니다. 이것이 DHCP의 가장 큰 존재목적이긴 하지만 부가적인 설명이 설명이 필요하다고 판단하여 DHCP에 대한 추가적인 설명을 진행하겠습니다.

DHCP는 네트워크 상에서 IP 주소를 중앙에서 관리하고 할당해줄 수 있도록 해주는 프로토콜입니다. (DHCP Server가 IP를 할당해주고 할당한 IP를 자기 내부 메모리에 저장해놓고 있으니깐..)

그리고 DHCP 동작 중 DHCP Server는 서버내에 존재하는 자신의 목록에서 IP 할당할 때, 일정 시간 동안 임대의 개념으로 IP를 할당합니다. (임대시간이 존재한다.)

이는 "RFC2131"에서 표준 동작을 정의하고 있으니 참고해주시면 감사하겠습니다.


만약, DHCP관련 네트워크 기초지식에 대한 설명이 필요하거나, DHCP가 어떤 Protocol인지 모르시겠다면 아래 링크를 클릭하셔서 참고해주세요.

DHCP 시작하기 !  - https://jinheeahn.wordpress.com/2015/04/29/dhcp시작하기!


자, 본격적으로 DHCP 강의를 시작하기에 앞서, 한 가지 언급하고 싶은 것은, 원래 DHCP의 동작에 관하여 좀 더 정확한 개념을 이해하기 위해서는 BOOTP라는 Protocol에 대한 전반 지식이 필요합니다.

"BOOTP프로토콜의 확장판이 DHCP이기 때문에 BOOTP에 대한 설명을 한 뒤 DHCP를 시작하겠습니다."

BOOTP(Bootstrap Protocol) - "자기 스스로" 이라는 뜻으로 초기 RARP의 대체품으로 제작된 프로토콜입니다.

RARP는 ARP의 반대 개념으로 Peer(상대방)와 통신하기 위해서 Peer의 MAC정보를 이용하여 IP address를 얻어오는 방식입니다. (MAC - 하드웨어의 각 고유 번호. 사람으로 치자면 주민등록번호)

IP address에 대한 정보를 얻고, 그 IP address를 이용해서 IP Packet 통신을 가능하게 합니다.

하지만, 여기서 RARP의 단점이 드러나게 됩니다. RARP는 IP 정보만 얻어올 수 있습니다. 즉, 다른 네트워크의 정보는 얻어오지 못하는 단점이 드러나게 됩니다. 그래서 대체품으로 제작된 것이 BOOTP입니다.

BOOTP는 Server 에서 Client로 Network 정보를 유동적으로 할당할 수 있는 프로토콜입니다.

BOOTP Server는 Client로 부터 Request(요청 메세지)를 받게 되면 Server 내에 미리 설정되어 있는 Table List에서 MAC address에 매핑되어 있는 Network 정보를 Client로 할당하게 됩니다.

즉, BOOTP Server는 사용자가 Server 내의 Table List에 Client의 MAC 정보를 미리 설정해놓고 Client로부터 요청메세지를 받는다면 Table List에 등록된대로 매핑된 Network 정보를 할당하게 됩니다.

그래서 BOOTP를 DHCP에 대응하여 Static Host Configuraion Protocol이라 칭합니다.


DHCP(Dynamic Host Configuraion Protocol)는 이러한 BOOTP의 동작에 Dynamic한 기능이 확장된 통신 프로토콜입니다.

DHCP는 BOOTP를 확장한 프로토콜인 만큼 Data 전송 Packet 구조를 BOOTP와 동일하게 사용합니다. 그래서 BOOTP Client를 이용하여 IP를 할당받고 싶을 때, DHCP Server로부터 IP 할당이 가능합니다.

좀 더 명확한 동작 Sequence를 설명드리자면,

DHCP Server는 2개의 Database를 가지고 있습니다.

  1. IP와 MAC를 매핑시켜논 Static Database (BOOTP)
  2. 유효한 (사용하지 않은) IP address의 Dynamic Database. DHCP Client가 IP address를 요청할 때, 할당할 IP 정보가 담긴 Database이다.

여기서, Client가 요청 메세지를 보내면, Server는 먼저 Static database를 살펴보고 BOOTP Client가 있다면 매핑되어 있는 IP를 할당하게 된다.

반면에 Static database에 해당되지 않는다면, 유효 IP 중 하나를 선택하여 Client에 할당하게 되며, 할당한 IP를 Dynamic Database에 할당하였다는 내역을 추가하게 됩니다.


"그런데.. 왜 IP address 정보가 필요하지?" 라는 궁금증이 쭉 읽으시다보면 생각이 드는데요. TCP/IP 통신을 하기 위해서는 통신할 Peer의 MAC address 및 IP address를 알아야 Packet 통신이 가능합니다.

위 설명을 이해하기 위해서는 OSI 및 TCP/IP 계층 Layer 설명을 숙지하고 계셔야 합니다.

간단하게 설명을 드리자면, TCP/IP의 제일 하위 계층 인 Network access(Physical Layer)을 이용하여 각 단말이 물리적으로 연결이 됩니다.

물리적으로 연결된 단말들은 Data Frame를 보냅니다. 이 Frame에는 자신의 MAC address와 통신할 상대방의 MAC address에 대한 정보가 담겨있습니다. 수 많은 단말들이 이 Data Frame을 열어보고 자신의 MAC주소와 맞지 않으면 "PASS"를 합니다. (Packet의 구성들은 아래의 그림처럼 정의되어 있으니 참고해주세요.)

제목 없음2

위 그림은 Ethernet Frame Data의 그림을 명확하게 기재해논 것입니다.

그리고 아래 그림은 DHCP Packet을 토대로 TCP/IP Layer에 맞게 구성한 그림입니다.

제목 없음1

위 그림들을 참고하면, 통신할 단말이 Data Frame을 받고 그 Data 내부에 있는 MAC addres가 자신의 정보와 일치하면 Frame 정보 내부에 존재하는 실제 Data를 볼 수 있게 됩니다. 그리고 상위 프로토콜인 IP Packet은 어떤 Type으로 구성되어 있는지 확인할 수 있습니다.

여기서 부터는, IP Layer에 해당됩니다. IP Layer에서 먼저 IP Header를 보고 그 다음 상위 프로토콜인 Trasport는 어떤 프로토콜로 구성되어 있는지 또, IP address가 자신이 맞는지 다시 한번 확인하게 됩니다.

IP address가 동일하다면 이제 Transport 영역인 UDP or TCP 영역인지 확인하고 마지막으로 Application Layer의 실제 Data를 볼 수 있게 됩니다.


자, 이제 DHCP의 전체 동작 Packet을 살펴보도록 하겠습니다.

제목 없음

위 그림을 보면, 자세하게 설명이 되어 있는데요. DHCP가 4개의 메세지를 이용하여 동작한다는 것을 알 수 있습니다.


  • Discover

메세지 방향 = DHCP Client(단말) -> DHCP Server

브로드캐스트로 전송 (Destination MAC = FF:FF:FF:FF:FF:FF / Destination IP = 255.255.255.255)

Discover 메세지는 Client가 DHCP Server를 찾기 위한 메세지입니다. 동일 Subnet상의 단말에게 브로드캐스팅을 하여 "거기 혹시 DHCP 서버님 계시면 제게 대답 좀 주세요" 라고 Client가 요청합니다.

주요 파라미터는 Destination MAC과 IP입니다.

이때, Discover 메세지를 보내는 Client는 Server로 부터 오는 응답메세지를 유니캐스트나 브로드캐스트로 응답하게 할 수 있다. (Discover Flag가 0x8000이면 브로드캐스트, 0x0000이면 유니캐스트)

(브로드캐스트 = 동일 Subnet상에 있는 모든 단말에게 Data를 전달하는 방식)

(유니캐스트 = 동일 Subnet상에서 1:1로 단말에게 Data로 전달하는 방식)


  • Offer

메세지 방향 = DHCP Server -> DHCP Client(단말)

Discover 메세지 요청에 따라 Offer(응답) 메세지가 브로드캐스트 or 유니캐스트로 메세지를 보냅니다.

Offer 메세지는 DHCP 서버가 "저 여기 있어요"라고 응답하는 메세지입니다. 이 때 Client에 Network 정보들을 보내줍니다.

주요 파라미터는,

  1. Server & Client MAC
  2. Server & Client IP
  3. Your IP: 단말에 할당(임대)할 IP 주소
  4. Subnet Mask (Option 1)
  5. Router (Option 3): 단말의 Default Gateway IP 주소
  6. DNS (Option 6): DNS 서버 IP 주소
  7. IP Lease Time (Option 51): 단말이 IP 주소(Your IP)를 사용(임대)할 수 있는 기간(시간)
  8. DHCP Server Identifier (Option 54): 본 메시지(DHCP Offer)를 보낸 DHCP 서버의 주소. 만약, 2개 이상의 DHCP 서버가 Offer 메세지를 보낼 수 있으므로 이를 해결하기 위해 각 DHCP 서버는 자신의 IP 주소를 본 필드에 넣어서 단말에 보냄

  • Request

메세지 방향 = DHCP Client(단말) -> DHCP Server

브로드캐스트로 전송 (Destination MAC = FF:FF:FF:FF:FF:FF / Destination IP = 255.255.255.255)

Request 메세지는 Offer로 부터 받은 Network 정보들을 사용하겠다고 보내는 메세지 입니다.

즉, DHCP Server가 존재한다는 것을 알았고, Server로 부터 할당받을 Network 정보를 알았으니 Client는 DHCP Server로 알려준 Network 정보를 사용하겠다고 다시 요청하는 것입니다.

주요 파라미터는,

  1. Server & Client MAC
  2. Server & Client IP
  3. Requested IP Address (Option 50): 난 이 IP 주소를 사용하겠다. (DHCP Offer의 Your IP 주소가 여기에 들어감.)
  4. DHCP Server Identifier (Option 54): 2대 이상의 DHCP 서버가 DHCP Offer를 보낸 경우, Client는 가장 처음 응답이 온 DHCP 서버의 IP주소를 받게 된다. 그 서버의 IP 주소가 여기에 들어감. 즉, DHCP Server Identifier에 명시된 DHCP 서버에게 "DHCP Request" 메시지를 보내어 단말 IP 주소를 포함한 네트워크 정보를 얻는 것임

Request 메세지도 Discover 메세지와 동일하게 보낸 메세지에 대한 Server로 부터의 응답을 유니캐스트나 브로드캐스트로 응답하게 할 수 있다. (Discover Flag가 0x8000이면 브로드캐스트, 0x0000이면 유니캐스트)


  • ACK

메세지 방향 = DHCP Server -> DHCP Client(단말)

Request 메세지 요청에 따라 ACK(응답) 메세지가 브로드캐스트 or 유니캐스트로 메세지를 보냅니다.

ACK 메세지는 DHCP의 마지막 절차로, Request 요청에 의해서 DHCP Server가 Offer 응답에서 보낸 Network정보대로 단말에게 Network 정보를 할당해주는 메세지입니다.

주요 파라미터는,

  1. Server & Client MAC
  2. Server & Client IP
  3. Your IP: 단말에 할당(임대)할 IP 주소
  4. Subnet Mask (Option 1)
  5. Router (Option 3): 단말의 Default Gateway IP 주소
  6. DNS (Option 6): DNS 서버 IP 주소
  7. IP Lease Time (Option 51): 단말이 본 IP 주소(Your IP)를 사용(임대)할 수 있는 기간(시간)
  8. DHCP Server Identifier (Option 54): 본 메시지(ACK)를 보낸 DHCP Server의 주소

다음 시간에는 DHCP Packet을 Wireshark라는 Tool로 Capture하고 실제 DHCP Packet이 어떻게 구성되어있는지에 대해 설명하도록 하겠습니다.