DHCP

DHCP(Dynamic Host Configuration Protocol)는 IP 주소를 자동으로 할당해주는 프로토콜이다.

개요[편집 | 원본 편집]

OSI 참조 모델이나 TCP/IP 참조 모델이나 네트워크의 성립을 위해서 인터넷 프로토콜에서 쓸 식별자, 즉 IP주소를 요구한다. 없다고 아예 안 되는 건 아닌데, 인터넷 프로토콜이 없으면 라우터를 넘어가지 못하므로 인터넷을 목전에 두고 손가락만 빨고 있어야 하고, 내부 프로토콜도 대부분 IP를 요구하기 때문에 할 수 있는 게 사실상 없다.

그래서 IP 주소를 호스트에 입력해줘야 하는 데, IP 주소는 동일 네트워크에서 중첩될 수 없는 고유한 주소여야 한다. IP 주소가 겹치면 호스트를 구별할 수 없으므로 통신이 중단된다. 호스트가 수십 대 이내인 소규모 환경이면 모를까, 수백 대만 넘어가도 사용자의 실수 등으로 IP 중첩이 발생했을 때 솎아내기 매우 어렵다. 또한 모든 호스트에 하나씩 IP가 할당되면 사용되지 않는 호스트도 항상 IP 한 개를 물고 있는 것이므로 주소 자원을 효율적으로 관리할 수 없다.

그래서 이런 관리를 자동화한 것이 DHCP다. DHCP에서 받아오는 IP를 통상 "유동 IP"라고 하고, 여기에 반대되는 의미로 사용자나 관리자가 직접 설정하는 것을 "고정 IP"라고 한다. 이전에는 RARPBOOTP 프로토콜이 이러한 역할을 해왔으며, DHCP는 BOOTP를 확장한 프로토콜로 BOOTP에 대해 하위 호환성이 있다.

DHCP는 클라이언트 측 포트가 고정되어 있는 몇 안 되는 프로토콜로, 서버는 UDP 67번 포트를 사용하고 클라이언트는 UDP 68번 포트를 사용한다.

수행 과정[편집 | 원본 편집]

  • 임대(Lease)
    IP 주소가 없는 클라이언트가 서버에서 IP를 받아오는 행위를 "임대"라고 한다. 원래 응용 계층 프로토콜은 IP가 있어야 정상적인 통신이 가능한데, DHCP 임대를 수행하는 상황에서는 클라이언트에 IP가 없으므로 모든 과정이 브로드캐스트(방송)로 진행된다.
    1. 발견 메시지(Discover)
      클라이언트가 서버를 물색하는 과정이다. 발견 메시지를 수 차례 방송해도 응답하는 서버가 없을 경우, 인터넷 프로토콜 주소는 자동적으로 APIPA(링크 로컬)에 의거 169.254.0.0/16이나 FE8_::/10 안에서 임의 할당된다.
    2. 제안 메시지(Offer)
      발견 메시지를 수신한 서버가 주소 풀을 확인한 뒤, 남는 자원이 있으면 하나 집어서 클라이언트에게 설정값을 제안하는 과정이다. 기본적으로 라우팅에 필요한 최소 요건인 IP 주소와 서브넷 마스크와 IP 관리에 필요한 임대기간을 제안하고, 관리자의 설정에 따라 추가로 게이트웨이(라우터), DNS, WINS 주소 등을 제안한다. 클라이언트는 제안이 마음에 안 들 경우 원하는 제안이 올 때까지 무시할 수 있으나 수 차례 반복되면 기존 제안을 수락한다.
    3. 요청 메시지(Request)
      제안 메시지를 클라이언트가 수락했다는 메시지다. 같은 네트워크 내에 DHCP 서버가 여러 개 존재하는 경우, 클라이언트는 가장 빨리 도착한 제안을 수락하거나, 기존에 수락했던 적이 있는 서버의 제안을 우선적으로 수락한다.
    4. 수락 메시지(ACK)
      요청 메시지를 서버가 확인했다는 메시지다. 이 단계에서 IP 임대가 최종적으로 확정된다.
  • 갱신(Renewal · Rebinding)
    임대된 IP 주소는 무한히 쓸 수 있는 것이 아니라, 임대기간이 할당되어 있다. 클라이언트는 IP 주소를 계속 쓰기 위해 갱신 과정을 거쳐야 한다. 이 상황에서는 IP 주소가 이미 할당되어 있기 때문에 유니캐스트로 실시한다.
    갱신은 클라이언트의 요청 메시지(Request)와 서버의 수락 메시지(ACK) 만으로 이뤄지며, 갱신이 되면 해당 시점에서 임대기간을 다시 계산한다. 임대기간이 8일인 경우, 7일차에 갱신하면 총 사용기간이 16일(8일+8일)이 아니라 15일(7일+8일)이 되는 식.
    갱신이 2가지로 구분되는 이유는 딱 하나인데, 갱신 요청 시점이 다른 것 뿐이다. Renewal은 임대 기간의 ½ 시점에서 이뤄지고, Rebinding은 임대 기간의 ⅞ 시점에서 이뤄진다. 임대기간이 8일인 경우 Renewal은 4일차에, Rebinding은 7일차에 시도한다. 둘 중 하나라도 완료되면 임대기간이 초기화되므로 Rebinding은 Renewal이 실패했을 때의 보험 같은 것이다.
  • 반납(Release)
    갱신하지 못한 채 임대기간이 종료되었거나, 호스트 종료 등의 사유로 IP 주소를 사용할 필요가 없을 때 IP 주소를 반환하는 단계다. IP 주소 자원의 효율적인 사용을 도모하기 위해 존재한다고 볼 수 있다. 이 경우에는 클라이언트가 일방적으로 서버에 통보하는 식으로 이뤄진다. 이후 네트워크 접속이 필요할 때 임대 절차부터 다시 시작한다.

기타[편집 | 원본 편집]

  • 주소 풀 관리
    DHCP 서버가 네트워크 안에서 1대만 있는 경우에는 일반적으로 주소풀 관리에 큰 어려움이 없다. 하지만 고정 IP 설정을 사용하는 클라이언트(서비스용 서버 등)가 있거나, 서버가 2대 이상 있는 경우에는 주소 풀 관리에 주의가 필요하다. 고정 IP 설정은 주소 풀에서 제외하거나 해당 주소를 예약하는 조치가 필요하고, DHCP 서버 간에는 주소 풀을 겹치게 설정하면 안 된다.
  • 라우터를 넘어가는 방법
    원래 브로드캐스트 메시지는 라우터에서 전부 씹히게 되어 있다. 그래서 DHCP 서버는 반드시 클라이언트와 같은 네트워크 안에 위치해야 한다. 하지만 브로드밴드 등 방대한 네트워크를 운영하면서 중간에 라우터를 여럿 끼운 경우에는 DHCP 서버를 모든 지역에 하나씩 두기 힘들고, 서버를 여럿 두더라도 주소 풀 관리나 유지보수가 힘들다.
    그래서 라우터에 외부 DHCP 서버를 가리키는 이정표를 설정해두고, 클라이언트에서 DHCP 브로드캐스트 메시지가 들어오면 이걸 다른 네트워크의 DHCP 서버로 중개하도록 설정할 수 있다. 이것을 DHCP 릴레이 에이전트나 프록시 기능이라고 한다.
  • 공격
    DHCP 서버는 정해진 주소 풀 안에서 IP를 나눠준다. 만약 주소 풀 안의 자원을 모두 소진한 경우에는 더 이상 기능할 수 없는 데, 이 점을 노려 좀비 PC나 가상의 호스트를 동원하여 IP 주소 풀을 고갈시키는 "기아 공격"(starvation attack)을 통해 일종의 서비스 거부 공격을 할 수 있다. 개념이 박힌 관리자라면 네트워크 스위치단에서 MAC 테이블 갯수 제한을 걸어놨을 것이므로 쉬운 공격은 아니다.
    다른 공격 방법으로는 스푸핑의 일종으로, 제안 메시지에 독을 타 게이트웨이나 네임 서버를 공격자의 호스트를 가리키게 하여 중간자 공격을 도모하는 공격 방법이 있다.

같이 보기[편집 | 원본 편집]

각주